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