1+ # # here are the updates to merge:
2+
3+
4+
5+ data "alicloud_db_zones" "default" {
6+ engine = " MySQL"
7+ engine_version = " 8.0"
8+ instance_charge_type = " PostPaid"
9+ category = " HighAvailability"
10+ db_instance_storage_type = " cloud_essd"
11+ }
12+
13+ # 查询实例实例规格
14+ data "alicloud_instance_types" "default" {
15+ availability_zone = data. alicloud_db_zones . default . zones . 0 . id
16+ system_disk_category = " cloud_essd"
17+ }
18+
19+ data "alicloud_db_instance_classes" "default" {
20+ zone_id = data. alicloud_db_zones . default . zones . 0 . id
21+ engine = " MySQL"
22+ engine_version = " 8.0"
23+ category = " HighAvailability"
24+ instance_charge_type = " PostPaid"
25+ db_instance_storage_type = " cloud_essd"
26+ }
27+
28+
29+ # VPC
30+ resource "alicloud_vpc" "vpc" {
31+ vpc_name = " database-migration-test"
32+ cidr_block = " 192.168.0.0/16"
33+ }
34+
35+ # VSwitch
36+ resource "alicloud_vswitch" "vswitch" {
37+ vpc_id = alicloud_vpc. vpc . id
38+ cidr_block = " 192.168.0.0/24"
39+ zone_id = data. alicloud_db_zones . default . zones . 0 . id
40+ vswitch_name = " database-migration-vswitch"
41+ }
42+
43+ # Security Group
44+ resource "alicloud_security_group" "security_group" {
45+ security_group_name = " SG-DTS-GROUP-20220101"
46+ vpc_id = alicloud_vpc. vpc . id
47+ }
48+
49+ # Security Group Rule - Allow all traffic
50+ resource "alicloud_security_group_rule" "security_group_ingress" {
51+ security_group_id = alicloud_security_group. security_group . id
52+ type = " ingress"
53+ ip_protocol = " all"
54+ port_range = " -1/-1"
55+ cidr_ip = " 0.0.0.0/0"
56+ }
57+
58+ # Data source for ECS image
59+ data "alicloud_images" "instance_image" {
60+ name_regex = " ^aliyun_3_x64_20G_alibase_*"
61+ most_recent = true
62+ owners = " system"
63+ instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
64+ }
65+
66+ # ECS Instance (WebServer)
67+ resource "alicloud_instance" "web_server" {
68+ instance_name = " database-migration-webserver"
69+ image_id = data. alicloud_images . instance_image . images [0 ]. id
70+ instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
71+ security_groups = [alicloud_security_group . security_group . id ]
72+ vswitch_id = alicloud_vswitch. vswitch . id
73+ system_disk_category = " cloud_essd"
74+ internet_max_bandwidth_out = 80
75+ password = var. ecs_instance_password
76+ instance_charge_type = " PostPaid"
77+ }
78+
79+ # RDS Instance (Database)
80+ resource "alicloud_db_instance" "database" {
81+ engine = " MySQL"
82+ engine_version = " 8.0"
83+ instance_type = data. alicloud_db_instance_classes . default . instance_classes . 0 . instance_class
84+ instance_storage = 20
85+ vpc_id = alicloud_vpc. vpc . id
86+ vswitch_id = alicloud_vswitch. vswitch . id
87+ security_group_ids = [alicloud_security_group . security_group . id ]
88+ security_ips = [alicloud_instance . web_server . private_ip ]
89+ zone_id = data. alicloud_db_zones . default . zones . 0 . id
90+ instance_charge_type = " Postpaid"
91+ category = " Basic"
92+ }
93+
94+ # RDS Database
95+ resource "alicloud_db_database" "wordpress_db" {
96+ instance_id = alicloud_db_instance. database . id
97+ name = " wordpressdb"
98+ character_set = " utf8mb4"
99+ description = " WordPress database for migration test"
100+ }
101+
102+ # RDS Account
103+ resource "alicloud_rds_account" "db_user" {
104+ db_instance_id = alicloud_db_instance. database . id
105+ account_name = var. db_user_name
106+ account_password = var. db_password
107+ account_type = " Super"
108+ account_description = " Database user for WordPress"
109+ }
110+
111+ # Local script for WordPress installation
112+ locals {
113+ wordpress_install_script = <<- SHELL
114+ #!/bin/sh
115+ DatabaseUser='wordpressuser'
116+ DatabasePwd='password'
117+ DatabaseName='wordpressdb'
118+ DatabaseHost='localhost'
119+ yum update -y
120+ yum install -y unzip zip
121+ yum install -y mysql-server
122+ systemctl start mysqld
123+ systemctl enable mysqld
124+ mysql -e "CREATE DATABASE wordpressdb;"
125+ mysql -e "CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';"
126+ mysql -e "GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'localhost';"
127+ mysql -e "FLUSH PRIVILEGES;"
128+ mysql -e "CREATE USER dtssync1 IDENTIFIED BY 'P@ssw0rd';"
129+ mysql -e "GRANT ALL ON *.* TO 'dtssync1'@'%';"
130+ mysql -e "FLUSH PRIVILEGES;"
131+ mysql -e "SET GLOBAL binlog_format = 'ROW';"
132+ yum install -y nginx
133+ systemctl start nginx
134+ systemctl enable nginx
135+ yum install -y php php-fpm php-mysqlnd
136+ systemctl start php-fpm
137+ systemctl enable php-fpm
138+ cd /usr/share/nginx/html
139+ wget https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240726/hhvpuw/wordpress-6.6.1.tar
140+ tar -xvf wordpress-6.6.1.tar
141+ cp -R wordpress/* .
142+ rm -R wordpress
143+ cp wp-config-sample.php wp-config.php
144+ sed -i "s/database_name_here/$DatabaseName/" wp-config.php
145+ sed -i "s/username_here/$DatabaseUser/" wp-config.php
146+ sed -i "s/password_here/$DatabasePwd/" wp-config.php
147+ sed -i "s/localhost/$DatabaseHost/" wp-config.php
148+ systemctl restart nginx
149+ systemctl restart php-fpm
150+ SHELL
151+ }
152+
153+ # ECS Command for WordPress installation
154+ resource "alicloud_ecs_command" "wordpress_install_command" {
155+ name = " wordpress-install-command"
156+ description = " Install WordPress and MySQL on ECS instance"
157+ enable_parameter = false
158+ type = " RunShellScript"
159+ command_content = base64encode (local. wordpress_install_script )
160+ timeout = 3600
161+ working_dir = " /root"
162+ }
163+
164+ # Execute command on ECS instance
165+ resource "alicloud_ecs_invocation" "wordpress_install_invocation" {
166+ instance_id = [alicloud_instance . web_server . id ]
167+ command_id = alicloud_ecs_command. wordpress_install_command . id
168+
169+ depends_on = [
170+ alicloud_security_group_rule . security_group_ingress
171+ ]
172+
173+ timeouts {
174+ create = " 60m"
175+ }
176+ }
0 commit comments