1+ # ------------------------------------------------------------------------------
2+ # 核心资源定义
3+ #
4+ # 本文件包含了模块的核心基础设施资源
5+ # 这里的代码负责根据输入变量来创建和配置所有云资源
6+ # ------------------------------------------------------------------------------
7+
8+ # 配置阿里云提供商
9+ provider "alicloud" {
10+ region = " cn-hangzhou"
11+ }
12+
13+ # 生成一个随机字符串
14+ # Generate a random string.
15+ resource "random_string" "lowercase" {
16+ length = 8
17+ special = false
18+ upper = false
19+ numeric = false
20+ }
21+
22+ # 定义本地变量
23+ locals {
24+ common_name = " lindorm-demo-${ random_string . lowercase . result } "
25+ sorted_zone_ids = sort (data. alicloud_zones . default . ids )
26+ max_zone_id = local. sorted_zone_ids [length (local. sorted_zone_ids ) - 1 ]
27+
28+ # 定义 ECS 启动命令
29+ ecs_command = <<- SHELL
30+ #!/bin/bash
31+ function log_info() {
32+ printf "%s [INFO] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
33+ }
34+ function log_error() {
35+ printf "%s [ERROR] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
36+ }
37+ function debug_exec(){
38+ local cmd="$@"
39+ log_info "$cmd"
40+ eval "$cmd"
41+ ret=$?
42+ echo ""
43+ log_info "$cmd, exit code: $ret"
44+ return $ret
45+ }
46+ function init_work(){
47+ yum upgrade & yum install -y python3 cryptography==3.4.8
48+ wget -O lindorm-cli-linux-latest.tar.gz https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/lindorm-cli-linux-latest.tar.gz
49+ tar zxvf lindorm-cli-linux-latest.tar.gz
50+ }
51+ debug_exec init_work
52+ SHELL
53+ }
54+
55+ # 查询可用区
56+ data "alicloud_zones" "default" {
57+ available_disk_category = " cloud_essd"
58+ available_instance_type = var. instance_type
59+ }
60+
61+ # 创建专有网络VPC
62+ resource "alicloud_vpc" "vpc" {
63+ cidr_block = " 192.168.0.0/16"
64+ vpc_name = " vpc-${ local . common_name } "
65+ }
66+
67+ # 创建交换机VSwitch
68+ resource "alicloud_vswitch" "vswitch" {
69+ vpc_id = alicloud_vpc. vpc . id
70+ cidr_block = " 192.168.0.0/24"
71+ zone_id = local. max_zone_id
72+ vswitch_name = " vsw-${ local . common_name } "
73+ }
74+
75+ # 创建安全组
76+ resource "alicloud_security_group" "security_group" {
77+ vpc_id = alicloud_vpc. vpc . id
78+ security_group_name = " sg-${ local . common_name } "
79+ }
80+
81+ # 查询最新的镜像
82+ data "alicloud_images" "alinux3" {
83+ name_regex = " ^aliyun_3_x64_*"
84+ owners = " system"
85+ most_recent = true
86+ status = " Available"
87+ }
88+
89+ # 创建ECS实例
90+ resource "alicloud_instance" "ecs_instance" {
91+ availability_zone = local. max_zone_id
92+ vpc_id = alicloud_vpc. vpc . id
93+ vswitch_id = alicloud_vswitch. vswitch . id
94+ security_groups = [alicloud_security_group . security_group . id ]
95+ password = var. instance_password
96+ instance_type = var. instance_type
97+ instance_name = " ecs-${ local . common_name } "
98+ system_disk_category = " cloud_essd"
99+ image_id = data. alicloud_images . alinux3 . images [0 ]. id
100+ internet_max_bandwidth_out = 5
101+ }
102+
103+ # 创建Lindorm实例
104+ resource "alicloud_lindorm_instance" "lindorm_instance" {
105+ instance_storage = 160
106+ zone_id = local. max_zone_id
107+ payment_type = " PayAsYouGo"
108+ vswitch_id = alicloud_vswitch. vswitch . id
109+ vpc_id = alicloud_vpc. vpc . id
110+ search_engine_specification = " lindorm.g.xlarge"
111+ search_engine_node_count = 2
112+ table_engine_specification = " lindorm.g.xlarge"
113+ table_engine_node_count = 2
114+ disk_category = " cloud_efficiency"
115+ instance_name = " lindorm-${ local . common_name } "
116+ }
117+
118+ # 定义ECS命令资源
119+ resource "alicloud_ecs_command" "deploy_application_on_ecs_alicloud_ecs_command" {
120+ type = " RunShellScript"
121+ timeout = 300
122+ command_content = base64encode (local. ecs_command )
123+ name = " auto-75ca2a13"
124+ working_dir = " /root"
125+ }
126+
127+ # 创建ECS命令调用
128+ resource "alicloud_ecs_invocation" "deploy_application_on_ecs_alicloud_ecs_invocation" {
129+ instance_id = [alicloud_instance . ecs_instance . id ]
130+ command_id = alicloud_ecs_command. deploy_application_on_ecs_alicloud_ecs_command . id
131+ timeouts {
132+ create = " 60m"
133+ }
134+ }
0 commit comments