diff --git a/solution/tech-solution/tltcamanidl/README.md b/solution/tech-solution/tltcamanidl/README.md new file mode 100644 index 000000000..3c70d659a --- /dev/null +++ b/solution/tech-solution/tltcamanidl/README.md @@ -0,0 +1,106 @@ + +## Introduction + + +本示例基于阿里云洛神网络全球基础设施及云原生 SDN 技术,帮助企业客户在云上快速构建[两地三中心跨域多活网络](https://www.aliyun.com/solution/tech-solution/tltcamanidl),保障企业核心业务在全球多地域的高品质互联。 + + + +This example is based on Alibaba Cloud's Luoshen Network global infrastructure and cloud-native SDN technology, helping enterprise customers quickly build a two-site, three-center cross-region active-active network on the cloud, ensuring high-quality interconnection for enterprise core businesses across multiple global regions. + + + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/a | +| [alicloud.user1\_region1](#provider\_alicloud.user1\_region1) | n/a | +| [alicloud.user1\_region2](#provider\_alicloud.user1\_region2) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [alicloud_alb_listener.listener1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_listener) | resource | +| [alicloud_alb_listener.listener2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_listener) | resource | +| [alicloud_alb_load_balancer.alb1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_load_balancer) | resource | +| [alicloud_alb_load_balancer.alb2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_load_balancer) | resource | +| [alicloud_alb_server_group.server_group1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_server_group) | resource | +| [alicloud_alb_server_group.server_group2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/alb_server_group) | resource | +| [alicloud_cen_instance.cen](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_instance) | resource | +| [alicloud_cen_transit_router.tr1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router) | resource | +| [alicloud_cen_transit_router.tr2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router) | resource | +| [alicloud_cen_transit_router_peer_attachment.user2_peer_attachment](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_peer_attachment) | resource | +| [alicloud_cen_transit_router_route_entry.route_entry1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_entry) | resource | +| [alicloud_cen_transit_router_route_entry.route_entry2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_entry) | resource | +| [alicloud_cen_transit_router_route_table.route_table1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table) | resource | +| [alicloud_cen_transit_router_route_table.route_table2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table) | resource | +| [alicloud_cen_transit_router_route_table_association.association1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.association2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.association3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.association4](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_propagation.propagation3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_propagation) | resource | +| [alicloud_cen_transit_router_route_table_propagation.propagation4](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_propagation) | resource | +| [alicloud_cen_transit_router_vpc_attachment.vpc_att1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_cen_transit_router_vpc_attachment.vpc_att2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_dts_instance.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/dts_instance) | resource | +| [alicloud_ecs_command.cmd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_command.cmd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_invocation.default1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_ecs_invocation.default2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_ecs_invocation.default3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_ecs_invocation.default4](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_instance.ecs1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs4](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_polardb_account.polardb_account1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_account) | resource | +| [alicloud_polardb_account.polardb_account2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_account) | resource | +| [alicloud_polardb_account_privilege.privilege](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_account_privilege) | resource | +| [alicloud_polardb_account_privilege.privilege2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_account_privilege) | resource | +| [alicloud_polardb_cluster.polardb1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_cluster) | resource | +| [alicloud_polardb_cluster.polardb2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_cluster) | resource | +| [alicloud_polardb_database.polardb_database1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_database) | resource | +| [alicloud_polardb_database.polardb_database2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_database) | resource | +| [alicloud_route_entry.route_entry2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_entry) | resource | +| [alicloud_route_entry.user1_region1_route_entry](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_entry) | resource | +| [alicloud_security_group.group1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group.group2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group_rule.rule1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.rule2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_vpc.vpc1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vpc.vpc2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vswitch.vsw1-1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vsw1-2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vsw2-1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vsw2-2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_cen_transit_router_service.open](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/cen_transit_router_service) | data source | +| [alicloud_polardb_node_classes.data_polardb1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/polardb_node_classes) | data source | +| [alicloud_polardb_node_classes.data_polardb2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/polardb_node_classes) | data source | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [db\_password](#input\_db\_password) | Please enter the PolarDB database password. The password must be 8-32 characters long and include uppercase letters, lowercase letters, numbers, and special characters (e.g., !@#$%^&*()\_+-=). If repeating the configuration in this tutorial, please ensure that the MySQL database password is identical to the one set during the first execution of the template. Otherwise, the configuration result will be invalid. | `string` | n/a | yes | +| [ecs\_instance\_password](#input\_ecs\_instance\_password) | Please enter the ECS login password, with a length of 8-30 characters, and it must include three of the following: uppercase letters, lowercase letters, numbers, and special characters from ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/.` | `string` | n/a | yes | +| [polardb\_account\_name](#input\_polardb\_account\_name) | n/a | `string` | `"terraform"` | no | +| [polardb\_class](#input\_polardb\_class) | n/a | `string` | `"polar.mysql.x4.large"` | no | +| [region1](#input\_region1) | n/a | `string` | `"cn-shanghai"` | no | +| [region1\_instance\_type1](#input\_region1\_instance\_type1) | n/a | `string` | `"ecs.g8i.large"` | no | +| [region1\_instance\_type2](#input\_region1\_instance\_type2) | n/a | `string` | `"ecs.g8i.large"` | no | +| [region1\_zone\_id1](#input\_region1\_zone\_id1) | n/a | `string` | `"cn-shanghai-e"` | no | +| [region1\_zone\_id2](#input\_region1\_zone\_id2) | n/a | `string` | `"cn-shanghai-f"` | no | +| [region2](#input\_region2) | n/a | `string` | `"cn-beijing"` | no | +| [region2\_instance\_type1](#input\_region2\_instance\_type1) | n/a | `string` | `"ecs.g7.large"` | no | +| [region2\_instance\_type2](#input\_region2\_instance\_type2) | n/a | `string` | `"ecs.g7.large"` | no | +| [region2\_zone\_id1](#input\_region2\_zone\_id1) | n/a | `string` | `"cn-beijing-k"` | no | +| [region2\_zone\_id2](#input\_region2\_zone\_id2) | n/a | `string` | `"cn-beijing-l"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/tltcamanidl/main.tf b/solution/tech-solution/tltcamanidl/main.tf new file mode 100644 index 000000000..9ff5d3ee0 --- /dev/null +++ b/solution/tech-solution/tltcamanidl/main.tf @@ -0,0 +1,615 @@ +provider "alicloud" { + alias = "user1_region1" + region = var.region1 +} + +provider "alicloud" { + alias = "user1_region2" + region = var.region2 +} + +# vpc1 +resource "alicloud_vpc" "vpc1" { + provider = alicloud.user1_region1 + vpc_name = "vpc1" + cidr_block = "10.0.0.0/16" +} + +resource "alicloud_vswitch" "vsw1-1" { + provider = alicloud.user1_region1 + vpc_id = alicloud_vpc.vpc1.id + cidr_block = "10.0.1.0/24" + zone_id = var.region1_zone_id1 +} + +resource "alicloud_vswitch" "vsw1-2" { + provider = alicloud.user1_region1 + vpc_id = alicloud_vpc.vpc1.id + cidr_block = "10.0.2.0/24" + zone_id = var.region1_zone_id2 +} + +# vpc2 +resource "alicloud_vpc" "vpc2" { + provider = alicloud.user1_region2 + vpc_name = "vpc2" + cidr_block = "172.16.0.0/16" +} + +resource "alicloud_vswitch" "vsw2-1" { + provider = alicloud.user1_region2 + vpc_id = alicloud_vpc.vpc2.id + cidr_block = "172.16.1.0/24" + zone_id = var.region2_zone_id1 +} + +resource "alicloud_vswitch" "vsw2-2" { + provider = alicloud.user1_region2 + vpc_id = alicloud_vpc.vpc2.id + cidr_block = "172.16.2.0/24" + zone_id = var.region2_zone_id2 +} + +resource "alicloud_route_entry" "user1_region1_route_entry" { + provider = alicloud.user1_region1 + for_each = toset(["172.16.1.0/24", "172.16.2.0/24"]) + route_table_id = alicloud_vpc.vpc1.route_table_id + destination_cidrblock = each.key + nexthop_type = "Attachment" + nexthop_id = alicloud_cen_transit_router_vpc_attachment.vpc_att1.transit_router_attachment_id +} + +resource "alicloud_route_entry" "route_entry2" { + provider = alicloud.user1_region2 + for_each = toset(["10.0.1.0/24", "10.0.2.0/24"]) + route_table_id = alicloud_vpc.vpc2.route_table_id + destination_cidrblock = each.key + nexthop_type = "Attachment" + nexthop_id = alicloud_cen_transit_router_vpc_attachment.vpc_att2.transit_router_attachment_id +} + +resource "alicloud_instance" "ecs1" { + provider = alicloud.user1_region1 + instance_name = "APP001" + instance_type = var.region1_instance_type1 + security_groups = alicloud_security_group.group1.*.id + vswitch_id = alicloud_vswitch.vsw1-1.id + image_id = "aliyun_3_x64_20G_alibase_20250629.vhd" + system_disk_category = "cloud_essd" + instance_charge_type = "PostPaid" + password = var.ecs_instance_password + +} + +resource "alicloud_security_group" "group1" { + provider = alicloud.user1_region1 + vpc_id = alicloud_vpc.vpc1.id +} + +resource "alicloud_security_group_rule" "rule1" { + provider = alicloud.user1_region1 + type = "ingress" + ip_protocol = "all" + nic_type = "intranet" + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = alicloud_security_group.group1.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group" "group2" { + provider = alicloud.user1_region2 + vpc_id = alicloud_vpc.vpc2.id +} + +resource "alicloud_security_group_rule" "rule2" { + provider = alicloud.user1_region2 + type = "ingress" + ip_protocol = "all" + nic_type = "intranet" + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = alicloud_security_group.group2.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_instance" "ecs2" { + provider = alicloud.user1_region1 + instance_name = "APP002" + instance_type = var.region1_instance_type2 + security_groups = alicloud_security_group.group1.*.id + vswitch_id = alicloud_vswitch.vsw1-2.id + image_id = "aliyun_3_x64_20G_alibase_20250629.vhd" + system_disk_category = "cloud_essd" + instance_charge_type = "PostPaid" + password = var.ecs_instance_password +} + +resource "alicloud_instance" "ecs3" { + provider = alicloud.user1_region2 + instance_name = "APP003" + instance_type = var.region2_instance_type1 + security_groups = alicloud_security_group.group2.*.id + vswitch_id = alicloud_vswitch.vsw2-1.id + image_id = "aliyun_3_x64_20G_alibase_20250629.vhd" + system_disk_category = "cloud_essd" + instance_charge_type = "PostPaid" + password = var.ecs_instance_password +} + +resource "alicloud_instance" "ecs4" { + provider = alicloud.user1_region2 + instance_name = "APP004" + instance_type = var.region2_instance_type2 + security_groups = alicloud_security_group.group2.*.id + vswitch_id = alicloud_vswitch.vsw2-2.id + image_id = "aliyun_3_x64_20G_alibase_20250629.vhd" + system_disk_category = "cloud_essd" + instance_charge_type = "PostPaid" + password = var.ecs_instance_password +} + +# create cmd +locals { + add_index_page = < index.html +cat index.html +service nginx status +curl localhost + + EOF +} + +resource "alicloud_ecs_command" "cmd1" { + provider = alicloud.user1_region1 + name = "tf-test" + command_content = base64encode(local.add_index_page) + type = "RunShellScript" + working_dir = "/root" + enable_parameter = true +} + +resource "alicloud_ecs_command" "cmd2" { + provider = alicloud.user1_region2 + name = "tf-test" + command_content = base64encode(local.add_index_page) + type = "RunShellScript" + working_dir = "/root" + enable_parameter = true +} + +resource "alicloud_ecs_invocation" "default1" { + provider = alicloud.user1_region1 + command_id = alicloud_ecs_command.cmd1.id + instance_id = [alicloud_instance.ecs1.id] + parameters = { + instance_name = alicloud_instance.ecs1.instance_name + } +} + +resource "alicloud_ecs_invocation" "default2" { + provider = alicloud.user1_region1 + command_id = alicloud_ecs_command.cmd1.id + instance_id = [alicloud_instance.ecs2.id] + parameters = { + instance_name = alicloud_instance.ecs2.instance_name + } +} + +resource "alicloud_ecs_invocation" "default3" { + provider = alicloud.user1_region2 + command_id = alicloud_ecs_command.cmd2.id + instance_id = [alicloud_instance.ecs3.id] + parameters = { + instance_name = alicloud_instance.ecs3.instance_name + } +} + +resource "alicloud_ecs_invocation" "default4" { + provider = alicloud.user1_region2 + command_id = alicloud_ecs_command.cmd2.id + instance_id = [alicloud_instance.ecs4.id] + parameters = { + instance_name = alicloud_instance.ecs4.instance_name + } +} + +# resource "random_string" "s" { +# length = 10 +# lower = true +# min_lower = 10 +# special = false +# } + +# --- polardb +data "alicloud_polardb_node_classes" "data_polardb1" { + provider = alicloud.user1_region1 + db_type = "MySQL" + db_version = "8.0" + pay_type = "PostPaid" + zone_id = var.region1_zone_id2 +} + +data "alicloud_polardb_node_classes" "data_polardb2" { + provider = alicloud.user1_region2 + db_type = "MySQL" + db_version = "8.0" + pay_type = "PostPaid" + zone_id = var.region2_zone_id1 +} + +resource "alicloud_polardb_cluster" "polardb1" { + provider = alicloud.user1_region1 + db_type = "MySQL" + db_version = "8.0" + db_node_class = var.polardb_class + pay_type = "PostPaid" + vswitch_id = alicloud_vswitch.vsw1-1.id + description = "terraform-example" + loose_polar_log_bin = "ON" + + db_cluster_ip_array { + db_cluster_ip_array_name = "default" + security_ips = [alicloud_instance.ecs1.private_ip, alicloud_instance.ecs2.private_ip] + } +} + +resource "alicloud_polardb_cluster" "polardb2" { + provider = alicloud.user1_region2 + db_type = "MySQL" + db_version = "8.0" + db_node_class = var.polardb_class + pay_type = "PostPaid" + vswitch_id = alicloud_vswitch.vsw2-1.id + description = "terraform-example" + loose_polar_log_bin = "ON" + + db_cluster_ip_array { + db_cluster_ip_array_name = "default" + security_ips = [alicloud_instance.ecs3.private_ip, alicloud_instance.ecs4.private_ip] + } +} + +resource "alicloud_polardb_account" "polardb_account1" { + provider = alicloud.user1_region1 + db_cluster_id = alicloud_polardb_cluster.polardb1.id + account_name = var.polardb_account_name + account_password = var.db_password + account_description = "terraform-example" +} + +resource "alicloud_polardb_account" "polardb_account2" { + provider = alicloud.user1_region2 + db_cluster_id = alicloud_polardb_cluster.polardb2.id + account_name = var.polardb_account_name + account_password = var.db_password + account_description = "terraform-example" + # account_type = "Super" +} + +resource "alicloud_polardb_database" "polardb_database1" { + provider = alicloud.user1_region1 + db_cluster_id = alicloud_polardb_cluster.polardb1.id + db_name = "terraform-example" +} + +resource "alicloud_polardb_database" "polardb_database2" { + provider = alicloud.user1_region2 + db_cluster_id = alicloud_polardb_cluster.polardb2.id + db_name = "terraform-example" +} + +resource "alicloud_polardb_account_privilege" "privilege" { + provider = alicloud.user1_region1 + db_cluster_id = alicloud_polardb_cluster.polardb1.id + account_name = alicloud_polardb_account.polardb_account1.account_name + account_privilege = "ReadOnly" + db_names = [alicloud_polardb_database.polardb_database1.db_name] +} + +resource "alicloud_polardb_account_privilege" "privilege2" { + provider = alicloud.user1_region2 + db_cluster_id = alicloud_polardb_cluster.polardb2.id + account_name = alicloud_polardb_account.polardb_account2.account_name + account_privilege = "ReadWrite" + db_names = [alicloud_polardb_database.polardb_database2.db_name] +} + +# --- alb --- +resource "alicloud_alb_load_balancer" "alb1" { + provider = alicloud.user1_region1 + vpc_id = alicloud_vpc.vpc1.id + address_type = "Internet" + address_allocated_mode = "Fixed" + load_balancer_name = "test_create_by_ros" + load_balancer_edition = "Basic" + load_balancer_billing_config { + pay_type = "PayAsYouGo" + } + zone_mappings { + vswitch_id = alicloud_vswitch.vsw1-1.id + zone_id = var.region1_zone_id1 + } + zone_mappings { + vswitch_id = alicloud_vswitch.vsw1-2.id + zone_id = var.region1_zone_id2 + } +} + +resource "alicloud_alb_load_balancer" "alb2" { + provider = alicloud.user1_region2 + vpc_id = alicloud_vpc.vpc2.id + address_type = "Internet" + address_allocated_mode = "Fixed" + load_balancer_name = "test_create_by_ros" + load_balancer_edition = "Basic" + load_balancer_billing_config { + pay_type = "PayAsYouGo" + } + zone_mappings { + vswitch_id = alicloud_vswitch.vsw2-1.id + zone_id = var.region2_zone_id1 + } + zone_mappings { + vswitch_id = alicloud_vswitch.vsw2-2.id + zone_id = var.region2_zone_id2 + } +} + +resource "alicloud_alb_server_group" "server_group1" { + provider = alicloud.user1_region1 + protocol = "HTTP" + vpc_id = alicloud_vpc.vpc1.id + server_group_name = "test_create_by_ros" + health_check_config { + health_check_connect_port = "46325" + health_check_enabled = true + health_check_host = "tf-example.com" + health_check_codes = ["http_2xx", "http_3xx"] + health_check_http_version = "HTTP1.1" + health_check_interval = "2" + health_check_method = "HEAD" + health_check_path = "/tf-example" + health_check_protocol = "HTTP" + health_check_timeout = 5 + healthy_threshold = 3 + unhealthy_threshold = 3 + } + sticky_session_config { + sticky_session_enabled = true + cookie = "tf-example" + sticky_session_type = "Server" + } + servers { + port = 80 + server_id = alicloud_instance.ecs1.id + server_ip = alicloud_instance.ecs1.private_ip + server_type = "Ecs" + weight = 100 + } + servers { + port = 80 + server_id = alicloud_instance.ecs2.id + server_ip = alicloud_instance.ecs2.private_ip + server_type = "Ecs" + weight = 100 + } +} + +resource "alicloud_alb_server_group" "server_group2" { + provider = alicloud.user1_region2 + protocol = "HTTP" + vpc_id = alicloud_vpc.vpc2.id + server_group_name = "test_create_by_ros" + health_check_config { + health_check_connect_port = "46325" + health_check_enabled = true + health_check_host = "tf-example.com" + health_check_codes = ["http_2xx", "http_3xx"] + health_check_http_version = "HTTP1.1" + health_check_interval = "2" + health_check_method = "HEAD" + health_check_path = "/tf-example" + health_check_protocol = "HTTP" + health_check_timeout = 5 + healthy_threshold = 3 + unhealthy_threshold = 3 + } + sticky_session_config { + sticky_session_enabled = true + cookie = "tf-example" + sticky_session_type = "Server" + } + servers { + port = 80 + server_id = alicloud_instance.ecs3.id + server_ip = alicloud_instance.ecs3.private_ip + server_type = "Ecs" + weight = 100 + } + servers { + port = 80 + server_id = alicloud_instance.ecs4.id + server_ip = alicloud_instance.ecs4.private_ip + server_type = "Ecs" + weight = 100 + } +} + +resource "alicloud_alb_listener" "listener1" { + provider = alicloud.user1_region1 + load_balancer_id = alicloud_alb_load_balancer.alb1.id + listener_protocol = "HTTP" + listener_port = 80 + default_actions { + type = "ForwardGroup" + forward_group_config { + server_group_tuples { + server_group_id = alicloud_alb_server_group.server_group1.id + } + } + } +} + +resource "alicloud_alb_listener" "listener2" { + provider = alicloud.user1_region2 + load_balancer_id = alicloud_alb_load_balancer.alb2.id + listener_protocol = "HTTP" + listener_port = 80 + default_actions { + type = "ForwardGroup" + forward_group_config { + server_group_tuples { + server_group_id = alicloud_alb_server_group.server_group2.id + } + } + } +} + +# --- cen -- +resource "alicloud_cen_instance" "cen" { + cen_instance_name = "two-location-three-center-BY-TERRAFORM" +} + +data "alicloud_cen_transit_router_service" "open" { + enable = "On" +} + +resource "alicloud_cen_transit_router" "tr1" { + provider = alicloud.user1_region1 + cen_id = alicloud_cen_instance.cen.id + depends_on = [data.alicloud_cen_transit_router_service.open] +} + +resource "alicloud_cen_transit_router" "tr2" { + provider = alicloud.user1_region2 + cen_id = alicloud_cen_instance.cen.id + depends_on = [data.alicloud_cen_transit_router_service.open] +} + +resource "alicloud_cen_transit_router_vpc_attachment" "vpc_att1" { + provider = alicloud.user1_region1 + transit_router_vpc_attachment_name = "vpc_attachment_1" + cen_id = alicloud_cen_instance.cen.id + transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id + vpc_id = alicloud_vpc.vpc1.id + zone_mappings { + zone_id = var.region1_zone_id1 + vswitch_id = alicloud_vswitch.vsw1-1.id + } + zone_mappings { + zone_id = var.region1_zone_id2 + vswitch_id = alicloud_vswitch.vsw1-2.id + } +} + +resource "alicloud_cen_transit_router_vpc_attachment" "vpc_att2" { + provider = alicloud.user1_region2 + transit_router_vpc_attachment_name = "vpc_attachment_2" + cen_id = alicloud_cen_instance.cen.id + transit_router_id = alicloud_cen_transit_router.tr2.transit_router_id + vpc_id = alicloud_vpc.vpc2.id + zone_mappings { + zone_id = var.region2_zone_id1 + vswitch_id = alicloud_vswitch.vsw2-1.id + } + zone_mappings { + zone_id = var.region2_zone_id2 + vswitch_id = alicloud_vswitch.vsw2-2.id + } +} + +resource "alicloud_cen_transit_router_route_table" "route_table1" { + provider = alicloud.user1_region1 + transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id +} + +resource "alicloud_cen_transit_router_route_table" "route_table2" { + provider = alicloud.user1_region2 + transit_router_id = alicloud_cen_transit_router.tr2.transit_router_id +} + +resource "alicloud_cen_transit_router_route_entry" "route_entry1" { + provider = alicloud.user1_region1 + for_each = toset(["10.0.1.0/24", "10.0.2.0/24"]) + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table1.transit_router_route_table_id + transit_router_route_entry_destination_cidr_block = each.key + transit_router_route_entry_next_hop_type = "Attachment" + transit_router_route_entry_next_hop_id = alicloud_cen_transit_router_vpc_attachment.vpc_att1.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_route_entry" "route_entry2" { + provider = alicloud.user1_region2 + for_each = toset(["172.16.1.0/24", "172.16.2.0/24"]) + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table2.transit_router_route_table_id + transit_router_route_entry_destination_cidr_block = each.key + transit_router_route_entry_next_hop_type = "Attachment" + transit_router_route_entry_next_hop_id = alicloud_cen_transit_router_vpc_attachment.vpc_att2.transit_router_attachment_id +} + + +resource "alicloud_cen_transit_router_route_table_association" "association1" { + provider = alicloud.user1_region1 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table1.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.vpc_att1.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_route_table_association" "association2" { + provider = alicloud.user1_region2 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table2.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.vpc_att2.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_peer_attachment" "user2_peer_attachment" { + provider = alicloud.user1_region2 + cen_id = alicloud_cen_instance.cen.id + transit_router_id = alicloud_cen_transit_router.tr2.transit_router_id + peer_transit_router_region_id = var.region1 + peer_transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id + bandwidth_type = "DataTransfer" + bandwidth = 2 + auto_publish_route_enabled = true +} + +resource "alicloud_cen_transit_router_route_table_association" "association3" { + provider = alicloud.user1_region1 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table1.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_peer_attachment.user2_peer_attachment.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_route_table_propagation" "propagation3" { + provider = alicloud.user1_region1 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table1.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_peer_attachment.user2_peer_attachment.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_route_table_association" "association4" { + provider = alicloud.user1_region2 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table2.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_peer_attachment.user2_peer_attachment.transit_router_attachment_id +} + +resource "alicloud_cen_transit_router_route_table_propagation" "propagation4" { + provider = alicloud.user1_region2 + transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table2.transit_router_route_table_id + transit_router_attachment_id = alicloud_cen_transit_router_peer_attachment.user2_peer_attachment.transit_router_attachment_id +} + +# --- dts --- +resource "alicloud_dts_instance" "default" { + provider = alicloud.user1_region1 + type = "sync" + payment_type = "PayAsYouGo" + instance_class = "large" + source_endpoint_engine_name = "MySQL" + source_region = var.region1 + destination_endpoint_engine_name = "MySQL" + destination_region = var.region2 +} \ No newline at end of file diff --git a/solution/tech-solution/tltcamanidl/variables.tf b/solution/tech-solution/tltcamanidl/variables.tf new file mode 100644 index 000000000..f44ac5f07 --- /dev/null +++ b/solution/tech-solution/tltcamanidl/variables.tf @@ -0,0 +1,92 @@ +variable "region1" { + type = string + description = "" + default = "cn-shanghai" +} + +variable "region2" { + type = string + description = "" + default = "cn-beijing" +} + +variable "region1_zone_id1" { + type = string + description = "" + default = "cn-shanghai-e" +} + +variable "region1_zone_id2" { + type = string + description = "" + default = "cn-shanghai-f" +} + +variable "region2_zone_id1" { + type = string + description = "" + default = "cn-beijing-k" +} + +variable "region2_zone_id2" { + type = string + description = "" + default = "cn-beijing-l" +} + +variable "region1_instance_type1" { + description = "" + default = "ecs.g8i.large" +} + +variable "region1_instance_type2" { + description = "" + default = "ecs.g8i.large" +} + +variable "region2_instance_type1" { + description = "" + default = "ecs.g7.large" +} + +variable "region2_instance_type2" { + description = "" + default = "ecs.g7.large" +} + +# variable "ecs_password" { +# type = string +# sensitive = true +# description = "" +# } + +variable "polardb_account_name" { + type = string + description = "" + default = "terraform" +} + +# variable "polardb_password" { +# type = string +# sensitive = true +# description = "" +# } + +variable "ecs_instance_password" { + type = string + sensitive = true + description = "Please enter the ECS login password, with a length of 8-30 characters, and it must include three of the following: uppercase letters, lowercase letters, numbers, and special characters from ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/." +} + +variable "db_password" { + description = "Please enter the PolarDB database password. The password must be 8-32 characters long and include uppercase letters, lowercase letters, numbers, and special characters (e.g., !@#$%^&*()_+-=). If repeating the configuration in this tutorial, please ensure that the MySQL database password is identical to the one set during the first execution of the template. Otherwise, the configuration result will be invalid." + type = string + sensitive = true +} + +variable "polardb_class" { + type = string + description = "" + default = "polar.mysql.x4.large" + # default = "polar.mysql.g2m.large.c" +} \ No newline at end of file