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