1
+ # 查询实例实例规格
2
+ data "alicloud_instance_types" "default" {
3
+ instance_type_family = " ecs.g7"
4
+ }
5
+
6
+ data "alicloud_zones" "default" {
7
+ available_instance_type = data. alicloud_instance_types . default . ids . 0
8
+ }
9
+
10
+ data "alicloud_db_zones" "default" {
11
+ engine = " MySQL"
12
+ engine_version = " 8.0"
13
+ instance_charge_type = " PostPaid"
14
+ category = " Basic"
15
+ db_instance_storage_type = " cloud_essd"
16
+ }
17
+
18
+ data "alicloud_db_instance_classes" "default" {
19
+ zone_id = data. alicloud_db_zones . default . ids . 0
20
+ instance_charge_type = " PostPaid"
21
+ engine = " MySQL"
22
+ engine_version = " 8.0"
23
+ category = " Basic"
24
+ db_instance_storage_type = " cloud_essd"
25
+ }
26
+
27
+ data "alicloud_alb_zones" "default" {}
28
+
29
+ data "alicloud_images" "instance_image" {
30
+ name_regex = " ^aliyun_3_9_x64_20G_*"
31
+ most_recent = true
32
+ owners = " system"
33
+ instance_type = data. alicloud_instance_types . default . ids . 0
34
+ }
35
+
36
+ resource "alicloud_vpc" "vpc" {
37
+ vpc_name = " ${ var . common_name } -vpc"
38
+ cidr_block = " 192.168.0.0/16"
39
+ }
40
+
41
+ resource "alicloud_vswitch" "ecs_vswitch1" {
42
+ vpc_id = alicloud_vpc. vpc . id
43
+ cidr_block = " 192.168.1.0/24"
44
+ zone_id = data. alicloud_zones . default . ids . 0
45
+ vswitch_name = " ${ var . common_name } -vsw"
46
+ }
47
+
48
+ resource "alicloud_vswitch" "ecs_vswitch2" {
49
+ vpc_id = alicloud_vpc. vpc . id
50
+ cidr_block = " 192.168.2.0/24"
51
+ zone_id = data. alicloud_zones . default . ids . 1
52
+ vswitch_name = " ${ var . common_name } -vsw"
53
+ }
54
+
55
+ resource "alicloud_vswitch" "alb_vswitch3" {
56
+ vpc_id = alicloud_vpc. vpc . id
57
+ cidr_block = " 192.168.3.0/24"
58
+ zone_id = data. alicloud_alb_zones . default . ids . 0
59
+ vswitch_name = " ${ var . common_name } -vsw"
60
+ }
61
+
62
+ resource "alicloud_vswitch" "alb_vswitch4" {
63
+ vpc_id = alicloud_vpc. vpc . id
64
+ cidr_block = " 192.168.4.0/24"
65
+ zone_id = data. alicloud_alb_zones . default . ids . 1
66
+ vswitch_name = " ${ var . common_name } -vsw"
67
+ }
68
+
69
+ resource "alicloud_vswitch" "rds_vswitch5" {
70
+ vpc_id = alicloud_vpc. vpc . id
71
+ cidr_block = " 192.168.5.0/24"
72
+ zone_id = data. alicloud_db_zones . default . ids . 0
73
+ vswitch_name = " ${ var . common_name } -vsw"
74
+ }
75
+
76
+ resource "alicloud_security_group" "security_group" {
77
+ security_group_name = " ${ var . common_name } -sg"
78
+ vpc_id = alicloud_vpc. vpc . id
79
+ }
80
+
81
+ resource "alicloud_security_group_rule" "security_group_rule1" {
82
+ security_group_id = alicloud_security_group. security_group . id
83
+ type = " ingress"
84
+ ip_protocol = " tcp"
85
+ port_range = " 80/80"
86
+ cidr_ip = " 0.0.0.0/0"
87
+ }
88
+
89
+ resource "alicloud_security_group_rule" "security_group_rule2" {
90
+ security_group_id = alicloud_security_group. security_group . id
91
+ type = " ingress"
92
+ ip_protocol = " tcp"
93
+ port_range = " 443/443"
94
+ cidr_ip = " 0.0.0.0/0"
95
+ }
96
+
97
+ resource "alicloud_instance" "ecs_instance1" {
98
+ instance_name = " ${ var . common_name } -ecs-1"
99
+ image_id = data. alicloud_images . instance_image . images . 0 . id
100
+ instance_type = data. alicloud_instance_types . default . ids . 0
101
+ security_groups = [alicloud_security_group . security_group . id ]
102
+ vswitch_id = alicloud_vswitch. ecs_vswitch1 . id
103
+ system_disk_category = " cloud_essd"
104
+ internet_max_bandwidth_out = 5
105
+ password = var. ecs_instance_password
106
+ }
107
+
108
+ resource "alicloud_instance" "ecs_instance2" {
109
+ instance_name = " ${ var . common_name } -ecs-2"
110
+ image_id = data. alicloud_images . instance_image . images . 0 . id
111
+ instance_type = data. alicloud_instance_types . default . ids . 0
112
+ security_groups = [alicloud_security_group . security_group . id ]
113
+ vswitch_id = alicloud_vswitch. ecs_vswitch2 . id
114
+ system_disk_category = " cloud_essd"
115
+ internet_max_bandwidth_out = 5
116
+ password = var. ecs_instance_password
117
+ }
118
+
119
+ resource "alicloud_alb_load_balancer" "alb" {
120
+ load_balancer_name = " ${ var . common_name } -alb"
121
+ load_balancer_edition = " Basic"
122
+ vpc_id = alicloud_vpc. vpc . id
123
+ address_type = " Internet"
124
+ address_allocated_mode = " Fixed"
125
+
126
+ load_balancer_billing_config {
127
+ pay_type = " PayAsYouGo"
128
+ }
129
+
130
+ zone_mappings {
131
+ zone_id = data. alicloud_alb_zones . default . ids . 0
132
+ vswitch_id = alicloud_vswitch. alb_vswitch3 . id
133
+ }
134
+
135
+ zone_mappings {
136
+ zone_id = data. alicloud_alb_zones . default . ids . 1
137
+ vswitch_id = alicloud_vswitch. alb_vswitch4 . id
138
+ }
139
+ }
140
+
141
+ resource "alicloud_alb_server_group" "alb_server_group" {
142
+ server_group_name = " ${ var . common_name } -server-group"
143
+ vpc_id = alicloud_vpc. vpc . id
144
+ protocol = " HTTP"
145
+
146
+ health_check_config {
147
+ health_check_enabled = true
148
+ health_check_protocol = " HTTP"
149
+ health_check_path = " /"
150
+ health_check_codes = [" http_2xx" , " http_3xx" , " http_4xx" ]
151
+ health_check_connect_port = 80
152
+ }
153
+
154
+ sticky_session_config {
155
+ sticky_session_enabled = false
156
+ }
157
+
158
+ servers {
159
+ port = 80
160
+ server_type = " Ecs"
161
+ server_id = alicloud_instance. ecs_instance1 . id
162
+ server_ip = alicloud_instance. ecs_instance1 . primary_ip_address
163
+ weight = 100
164
+ }
165
+
166
+ servers {
167
+ port = 80
168
+ server_type = " Ecs"
169
+ server_id = alicloud_instance. ecs_instance2 . id
170
+ server_ip = alicloud_instance. ecs_instance2 . primary_ip_address
171
+ weight = 100
172
+ }
173
+ }
174
+
175
+ resource "alicloud_alb_listener" "alb_listener" {
176
+ listener_protocol = " HTTP"
177
+ listener_port = 80
178
+ load_balancer_id = alicloud_alb_load_balancer. alb . id
179
+
180
+ default_actions {
181
+ type = " ForwardGroup"
182
+ forward_group_config {
183
+ server_group_tuples {
184
+ server_group_id = alicloud_alb_server_group. alb_server_group . id
185
+ }
186
+ }
187
+ }
188
+ }
189
+
190
+ resource "alicloud_db_instance" "rds_instance" {
191
+ engine = " MySQL"
192
+ engine_version = " 8.0"
193
+ instance_type = data. alicloud_db_instance_classes . default . ids . 0
194
+ instance_storage = 40
195
+ vpc_id = alicloud_vpc. vpc . id
196
+ vswitch_id = alicloud_vswitch. rds_vswitch5 . id
197
+ security_group_ids = [alicloud_security_group . security_group . id ]
198
+
199
+ }
200
+
201
+ resource "alicloud_db_database" "rds_database" {
202
+ count = (alicloud_db_instance. rds_instance . engine == " MySQL" ? 1 : 0 )
203
+ name = var. database_name
204
+ description = " ${ var . database_name } database"
205
+ instance_id = alicloud_db_instance. rds_instance . id
206
+ character_set = " utf8mb4"
207
+ }
208
+
209
+ resource "alicloud_rds_account" "create_db_user" {
210
+ db_instance_id = alicloud_db_instance. rds_instance . id
211
+ account_name = var. db_user_name
212
+ account_password = var. db_password
213
+ account_type = " Super"
214
+ }
215
+
216
+ locals {
217
+ prepare_data_script = <<- SHELL
218
+ #!/bin/bash
219
+
220
+ yum install -y mysql
221
+
222
+ mkdir -p /data
223
+ cat <<"EOF" >> /data/script.sql
224
+ -- script.sql
225
+ USE ${ var . database_name } ;
226
+ CREATE TABLE `todo_list` (
227
+ `id` bigint NOT NULL COMMENT 'id',
228
+ `title` varchar(128) NOT NULL COMMENT 'title',
229
+ `desc` text NOT NULL COMMENT 'description',
230
+ `status` varchar(128) NOT NULL COMMENT 'status 未开始、进行中、已完成、已取消',
231
+ `priority` varchar(128) NOT NULL COMMENT 'priority 高、中、低',
232
+ `expect_time` datetime COMMENT 'expect time',
233
+ `actual_completion_time` datetime COMMENT 'actual completion time',
234
+ `gmt_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'create time',
235
+ `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'modified time',
236
+ PRIMARY KEY (`id`)
237
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
238
+ ;
239
+ INSERT INTO todo_list
240
+ (id, title, `desc`, `status`, priority, expect_time)
241
+ value(1, "创建一个应用", "使用阿里云解决方案搭建一个应用", "进行中", "高", "2024-04-01 00:00:00")
242
+ EOF
243
+
244
+ mysql -h${ alicloud_db_instance . rds_instance . connection_string } -u${ var . db_user_name } -p${ var . db_password } < /data/script.sql
245
+ SHELL
246
+
247
+ install_app_script = <<- SHELL
248
+ #!/bin/bash
249
+ sudo yum -y install java-1.8.0-openjdk-devel.x86_64
250
+
251
+ cat <<EOT >> ~/.bash_profile
252
+ export APPLETS_RDS_ENDPOINT=${ alicloud_db_instance . rds_instance . connection_string }
253
+ export APPLETS_RDS_USER=${ var . db_user_name }
254
+ export APPLETS_RDS_PASSWORD=${ var . db_password }
255
+ export APPLETS_RDS_DB_NAME=${ var . database_name }
256
+ export APP_MANUAL_DEPLOY=false
257
+ EOT
258
+ source ~/.bash_profile
259
+ wget https://help-static-aliyun-doc.aliyuncs.com/tech-solution/cloud-demo-0.0.2.jar
260
+ nohup java -jar cloud-demo-0.0.2.jar > demo.log 2>&1 &
261
+ SHELL
262
+ }
263
+
264
+ resource "alicloud_ecs_command" "prepare_data" {
265
+ depends_on = [alicloud_db_database . rds_database , alicloud_rds_account . create_db_user ]
266
+ name = " tf-PrepareData"
267
+ command_content = base64encode (local. prepare_data_script )
268
+ description = " create tables"
269
+ type = " RunShellScript"
270
+ working_dir = " /root"
271
+ }
272
+
273
+ resource "alicloud_ecs_invocation" "invoke_script" {
274
+ instance_id = [alicloud_instance . ecs_instance1 . id ]
275
+ command_id = alicloud_ecs_command. prepare_data . id
276
+ }
277
+
278
+
279
+ resource "alicloud_ecs_command" "install_app" {
280
+ depends_on = [alicloud_ecs_invocation . invoke_script ]
281
+ name = " tf-testAcc"
282
+ command_content = base64encode (local. install_app_script )
283
+ description = " Install App"
284
+ type = " RunShellScript"
285
+ working_dir = " /root"
286
+ }
287
+
288
+ resource "alicloud_ecs_invocation" "invoke_app" {
289
+ instance_id = [alicloud_instance . ecs_instance1 . id , alicloud_instance . ecs_instance2 . id ]
290
+ command_id = alicloud_ecs_command. install_app . id
291
+ }
0 commit comments