diff --git a/solution/tech-solution/ecnap/README.md b/solution/tech-solution/ecnap/README.md new file mode 100644 index 000000000..381ac91c2 --- /dev/null +++ b/solution/tech-solution/ecnap/README.md @@ -0,0 +1,97 @@ +## Introduction + + +本示例用于实现解决方案[企业云上网络架构规划](https://www.aliyun.com/solution/tech-solution/ecnap), 涉及到CEN、TR、VPC、vSwitch、ECS等资源的部署。 + + + +This example is used to implement solution [Enterprise Cloud Network Architecture Planning](https://www.aliyun.com/solution/tech-solution/ecnap), which involves the creation and deployment of resources such as cen, tr, vpc, vSwitch, and ecs. + + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [alicloud_cen_instance.cen_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_instance) | resource | +| [alicloud_cen_transit_router.transit_router](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router) | resource | +| [alicloud_cen_transit_router_route_entry.transit_router_route_entry](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_entry) | resource | +| [alicloud_cen_transit_router_route_table.transit_router_custom_route_table_1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table) | resource | +| [alicloud_cen_transit_router_route_table.transit_router_custom_route_table_2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table) | resource | +| [alicloud_cen_transit_router_route_table_association.transit_router_custom_route_table_1_association_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.transit_router_custom_route_table_1_association_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.transit_router_custom_route_table_1_association_prd3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_association.transit_router_custom_route_table_2_association_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_association) | resource | +| [alicloud_cen_transit_router_route_table_propagation.transit_router_custom_route_table_propagation_for_vpc_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_propagation) | resource | +| [alicloud_cen_transit_router_route_table_propagation.transit_router_custom_route_table_propagation_for_vpc_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_propagation) | resource | +| [alicloud_cen_transit_router_route_table_propagation.transit_router_custom_route_table_propagation_for_vpc_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_route_table_propagation) | resource | +| [alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd1_attachment](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd2_attachment](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd3_attachment](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_sec_attachment](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/cen_transit_router_vpc_attachment) | resource | +| [alicloud_ecs_command.run_command](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_invocation.invoke_script](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_instance.ecs_instance_in_vpc_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs_instance_in_vpc_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs_instance_in_vpc_prd3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs_instance_in_vpc_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_route_entry.route_forward_to_cen](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_entry) | resource | +| [alicloud_route_entry.route_forward_to_ecs](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_entry) | resource | +| [alicloud_route_table.vpc_sec_custom_route_table_1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_table) | resource | +| [alicloud_route_table.vpc_sec_custom_route_table_2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_table) | resource | +| [alicloud_route_table_attachment.route_table_attachment_vswitch_sec_001](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_table_attachment) | resource | +| [alicloud_route_table_attachment.route_table_attachment_vswitch_sec_002](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_table_attachment) | resource | +| [alicloud_route_table_attachment.route_table_attachment_vswitch_sec_003](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/route_table_attachment) | resource | +| [alicloud_security_group.sg_for_vpc_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group.sg_for_vpc_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group.sg_for_vpc_prd3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group.sg_for_vpc_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd1_ingress_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd1_ingress_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd1_ingress_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd2_ingress_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd2_ingress_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd2_ingress_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_prd3_ingress_prd3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_sec_ingress_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_sec_ingress_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_security_group_rule.sg_rule_for_vpc_sec_ingress_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_vpc.vpc_prd1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vpc.vpc_prd2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vpc.vpc_prd3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vpc.vpc_sec](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vswitch.vswitch_prd1_001](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd1_002](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd1_003](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd2_001](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd2_002](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd2_003](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd3_001](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd3_002](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_prd3_003](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_sec_001](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_sec_002](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch_sec_003](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 | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [ecs\_instance\_password](#input\_ecs\_instance\_password) | 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)` | `string` | n/a | yes | +| [ecs\_instance\_type](#input\_ecs\_instance\_type) | ECS实例规格 | `string` | `"ecs.t6-c4m1.large"` | no | +| [region](#input\_region) | 资源部署地域 | `string` | `"cn-hangzhou"` | no | +| [zone1](#input\_zone1) | 交换机可用区1 | `string` | `"cn-hangzhou-j"` | no | +| [zone2](#input\_zone2) | 交换机可用区2,请确保交换机可用区2与交换机可用区1不相同 | `string` | `"cn-hangzhou-k"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/ecnap/main.tf b/solution/tech-solution/ecnap/main.tf new file mode 100644 index 000000000..a681f4d16 --- /dev/null +++ b/solution/tech-solution/ecnap/main.tf @@ -0,0 +1,465 @@ +provider "alicloud" { + region = "cn-hangzhou" +} + +# VPC resources +resource "alicloud_vpc" "vpc_prd1" { + vpc_name = "VPC_PRD1" + cidr_block = "10.1.0.0/16" +} + +resource "alicloud_vpc" "vpc_prd2" { + vpc_name = "VPC_PRD2" + cidr_block = "10.2.0.0/16" +} + +resource "alicloud_vpc" "vpc_prd3" { + vpc_name = "VPC_PRD3" + cidr_block = "10.3.0.0/16" +} + +resource "alicloud_vpc" "vpc_sec" { + vpc_name = "VPC_SEC" + cidr_block = "172.16.0.0/16" +} + +# VSwitch resources +resource "alicloud_vswitch" "vswitch_prd1_001" { + vpc_id = alicloud_vpc.vpc_prd1.id + zone_id = var.zone1 + vswitch_name = "vsw_prd1_001" + cidr_block = "10.1.1.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd1_002" { + vpc_id = alicloud_vpc.vpc_prd1.id + zone_id = var.zone2 + vswitch_name = "vsw_prd1_002" + cidr_block = "10.1.2.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd1_003" { + vpc_id = alicloud_vpc.vpc_prd1.id + zone_id = var.zone1 + vswitch_name = "vsw_prd1_003" + cidr_block = "10.1.3.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd2_001" { + vpc_id = alicloud_vpc.vpc_prd2.id + zone_id = var.zone1 + vswitch_name = "vsw_prd2_001" + cidr_block = "10.2.1.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd2_002" { + vpc_id = alicloud_vpc.vpc_prd2.id + zone_id = var.zone2 + vswitch_name = "vsw_prd2_002" + cidr_block = "10.2.2.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd2_003" { + vpc_id = alicloud_vpc.vpc_prd2.id + zone_id = var.zone1 + vswitch_name = "vsw_prd2_003" + cidr_block = "10.2.3.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd3_001" { + vpc_id = alicloud_vpc.vpc_prd3.id + zone_id = var.zone1 + vswitch_name = "vsw_prd3_001" + cidr_block = "10.3.1.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd3_002" { + vpc_id = alicloud_vpc.vpc_prd3.id + zone_id = var.zone2 + vswitch_name = "vsw_prd3_002" + cidr_block = "10.3.2.0/24" +} + +resource "alicloud_vswitch" "vswitch_prd3_003" { + vpc_id = alicloud_vpc.vpc_prd3.id + zone_id = var.zone1 + vswitch_name = "vsw_prd3_003" + cidr_block = "10.3.3.0/24" +} + +resource "alicloud_vswitch" "vswitch_sec_001" { + vpc_id = alicloud_vpc.vpc_sec.id + zone_id = var.zone1 + vswitch_name = "vsw_sec_001" + cidr_block = "172.16.1.0/24" +} + +resource "alicloud_vswitch" "vswitch_sec_002" { + vpc_id = alicloud_vpc.vpc_sec.id + zone_id = var.zone2 + vswitch_name = "vsw_sec_002" + cidr_block = "172.16.2.0/24" +} + +resource "alicloud_vswitch" "vswitch_sec_003" { + vpc_id = alicloud_vpc.vpc_sec.id + zone_id = var.zone1 + vswitch_name = "vsw_sec_003" + cidr_block = "172.16.3.0/24" +} + +# Security Groups +resource "alicloud_security_group" "sg_for_vpc_prd1" { + security_group_name = "SG_For_VPC_PRD1" + vpc_id = alicloud_vpc.vpc_prd1.id +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd1_ingress_prd1" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd1.id + cidr_ip = "10.1.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd1_ingress_prd2" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd1.id + cidr_ip = "10.2.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd1_ingress_sec" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd1.id + cidr_ip = "172.16.0.0/16" +} + +resource "alicloud_security_group" "sg_for_vpc_prd2" { + security_group_name = "SG_For_VPC_PRD2" + vpc_id = alicloud_vpc.vpc_prd2.id +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd2_ingress_prd1" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd2.id + cidr_ip = "10.1.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd2_ingress_prd2" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd2.id + cidr_ip = "10.2.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd2_ingress_sec" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd2.id + cidr_ip = "172.16.0.0/16" +} + +resource "alicloud_security_group" "sg_for_vpc_prd3" { + security_group_name = "SG_For_VPC_PRD3" + vpc_id = alicloud_vpc.vpc_prd3.id +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_prd3_ingress_prd3" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_prd3.id + cidr_ip = "10.3.0.0/16" +} + +resource "alicloud_security_group" "sg_for_vpc_sec" { + security_group_name = "SG_For_VPC_SEC" + vpc_id = alicloud_vpc.vpc_sec.id +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_sec_ingress_prd1" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_sec.id + cidr_ip = "10.1.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_sec_ingress_prd2" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_sec.id + cidr_ip = "10.2.0.0/16" +} + +resource "alicloud_security_group_rule" "sg_rule_for_vpc_sec_ingress_sec" { + type = "ingress" + ip_protocol = "all" + policy = "accept" + port_range = "-1/-1" + priority = 1 + security_group_id = alicloud_security_group.sg_for_vpc_sec.id + cidr_ip = "172.16.0.0/16" +} + +# ECS Instances +resource "alicloud_instance" "ecs_instance_in_vpc_prd1" { + instance_name = "PRD1" + vswitch_id = alicloud_vswitch.vswitch_prd1_003.id + security_groups = [alicloud_security_group.sg_for_vpc_prd1.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 + internet_max_bandwidth_out = 0 +} + +resource "alicloud_instance" "ecs_instance_in_vpc_prd2" { + instance_name = "PRD2" + vswitch_id = alicloud_vswitch.vswitch_prd2_003.id + security_groups = [alicloud_security_group.sg_for_vpc_prd2.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 + internet_max_bandwidth_out = 0 +} + +resource "alicloud_instance" "ecs_instance_in_vpc_prd3" { + instance_name = "PRD3" + vswitch_id = alicloud_vswitch.vswitch_prd3_003.id + security_groups = [alicloud_security_group.sg_for_vpc_prd3.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 + internet_max_bandwidth_out = 0 +} + +resource "alicloud_instance" "ecs_instance_in_vpc_sec" { + instance_name = "SEC" + vswitch_id = alicloud_vswitch.vswitch_sec_003.id + security_groups = [alicloud_security_group.sg_for_vpc_sec.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 + internet_max_bandwidth_out = 0 +} + + +# Run command to enable IPv4 forwarding +resource "alicloud_ecs_command" "run_command" { + name = "enable_ipv4_forward" + command_content = base64encode(<<-EOF + echo 1 > /proc/sys/net/ipv4/ip_forward + EOF + ) + type = "RunShellScript" + timeout = 60 +} + +resource "alicloud_ecs_invocation" "invoke_script" { + instance_id = [alicloud_instance.ecs_instance_in_vpc_sec.id] + command_id = alicloud_ecs_command.run_command.id +} + +# CEN +resource "alicloud_cen_instance" "cen_instance" { + cen_instance_name = "cen" +} + +# TR +data "alicloud_cen_transit_router_service" "open" { + enable = "On" +} + +resource "alicloud_cen_transit_router" "transit_router" { + cen_id = alicloud_cen_instance.cen_instance.id +} + +# Transit Router Attachments +resource "alicloud_cen_transit_router_vpc_attachment" "transit_router_vpc_prd1_attachment" { + vpc_id = alicloud_vpc.vpc_prd1.id + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + zone_mappings { + zone_id = var.zone1 + vswitch_id = alicloud_vswitch.vswitch_prd1_001.id + } + zone_mappings { + zone_id = var.zone2 + vswitch_id = alicloud_vswitch.vswitch_prd1_002.id + } + auto_publish_route_enabled = true +} + +resource "alicloud_cen_transit_router_vpc_attachment" "transit_router_vpc_prd2_attachment" { + vpc_id = alicloud_vpc.vpc_prd2.id + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + zone_mappings { + zone_id = var.zone1 + vswitch_id = alicloud_vswitch.vswitch_prd2_001.id + } + zone_mappings { + zone_id = var.zone2 + vswitch_id = alicloud_vswitch.vswitch_prd2_002.id + } + auto_publish_route_enabled = true +} + +resource "alicloud_cen_transit_router_vpc_attachment" "transit_router_vpc_prd3_attachment" { + vpc_id = alicloud_vpc.vpc_prd3.id + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + zone_mappings { + zone_id = var.zone1 + vswitch_id = alicloud_vswitch.vswitch_prd3_001.id + } + zone_mappings { + zone_id = var.zone2 + vswitch_id = alicloud_vswitch.vswitch_prd3_002.id + } + auto_publish_route_enabled = true +} + +resource "alicloud_cen_transit_router_vpc_attachment" "transit_router_vpc_sec_attachment" { + vpc_id = alicloud_vpc.vpc_sec.id + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + zone_mappings { + zone_id = var.zone1 + vswitch_id = alicloud_vswitch.vswitch_sec_001.id + } + zone_mappings { + zone_id = var.zone2 + vswitch_id = alicloud_vswitch.vswitch_sec_002.id + } + auto_publish_route_enabled = true +} + +# Transit Router Route Table +resource "alicloud_cen_transit_router_route_table" "transit_router_custom_route_table_1" { + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + transit_router_route_table_name = "tr_custom_route_table_1" +} + +resource "alicloud_cen_transit_router_route_table" "transit_router_custom_route_table_2" { + transit_router_id = alicloud_cen_transit_router.transit_router.transit_router_id + transit_router_route_table_name = "tr_custom_route_table_2" +} + +# VPC_PRD1,VPC_PRD2,VPC_PRD3 +resource "alicloud_cen_transit_router_route_table_association" "transit_router_custom_route_table_1_association_prd1" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd1_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_1.transit_router_route_table_id +} + +resource "alicloud_cen_transit_router_route_table_association" "transit_router_custom_route_table_1_association_prd2" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd2_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_1.transit_router_route_table_id +} + +resource "alicloud_cen_transit_router_route_table_association" "transit_router_custom_route_table_1_association_prd3" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd3_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_1.transit_router_route_table_id +} + +resource "alicloud_cen_transit_router_route_entry" "transit_router_route_entry" { + transit_router_route_entry_destination_cidr_block = "0.0.0.0/0" + transit_router_route_entry_next_hop_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_sec_attachment.transit_router_attachment_id + transit_router_route_entry_next_hop_type = "Attachment" + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_1.transit_router_route_table_id +} + +# SEC +resource "alicloud_cen_transit_router_route_table_association" "transit_router_custom_route_table_2_association_sec" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_sec_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_2.transit_router_route_table_id +} + +# Transit Router Route Table Propagation +resource "alicloud_cen_transit_router_route_table_propagation" "transit_router_custom_route_table_propagation_for_vpc_prd1" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd1_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_2.transit_router_route_table_id +} + +resource "alicloud_cen_transit_router_route_table_propagation" "transit_router_custom_route_table_propagation_for_vpc_prd2" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_prd2_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_2.transit_router_route_table_id +} + +resource "alicloud_cen_transit_router_route_table_propagation" "transit_router_custom_route_table_propagation_for_vpc_sec" { + transit_router_attachment_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_sec_attachment.transit_router_attachment_id + transit_router_route_table_id = alicloud_cen_transit_router_route_table.transit_router_custom_route_table_2.transit_router_route_table_id +} + +# VPC_SEC Route Table +resource "alicloud_route_table" "vpc_sec_custom_route_table_1" { + vpc_id = alicloud_vpc.vpc_sec.id + route_table_name = "Custom VPC_SEC TR IN" +} + +resource "alicloud_route_table_attachment" "route_table_attachment_vswitch_sec_001" { + vswitch_id = alicloud_vswitch.vswitch_sec_001.id + route_table_id = alicloud_route_table.vpc_sec_custom_route_table_1.id +} + +resource "alicloud_route_table_attachment" "route_table_attachment_vswitch_sec_002" { + vswitch_id = alicloud_vswitch.vswitch_sec_002.id + route_table_id = alicloud_route_table.vpc_sec_custom_route_table_1.id +} + +resource "alicloud_route_table" "vpc_sec_custom_route_table_2" { + vpc_id = alicloud_vpc.vpc_sec.id + route_table_name = "Custom VPC_SEC TR OUT" +} + +resource "alicloud_route_table_attachment" "route_table_attachment_vswitch_sec_003" { + vswitch_id = alicloud_vswitch.vswitch_sec_003.id + route_table_id = alicloud_route_table.vpc_sec_custom_route_table_2.id +} + +# VPC_SEC Route Forwarding +resource "alicloud_route_entry" "route_forward_to_ecs" { + route_table_id = alicloud_route_table.vpc_sec_custom_route_table_1.id + destination_cidrblock = "0.0.0.0/0" + nexthop_type = "Instance" + nexthop_id = alicloud_instance.ecs_instance_in_vpc_sec.id +} + +resource "alicloud_route_entry" "route_forward_to_cen" { + route_table_id = alicloud_route_table.vpc_sec_custom_route_table_2.id + destination_cidrblock = "0.0.0.0/0" + nexthop_type = "Attachment" + nexthop_id = alicloud_cen_transit_router_vpc_attachment.transit_router_vpc_sec_attachment.transit_router_attachment_id +} + diff --git a/solution/tech-solution/ecnap/outputs.tf b/solution/tech-solution/ecnap/outputs.tf new file mode 100644 index 000000000..85cb875b6 --- /dev/null +++ b/solution/tech-solution/ecnap/outputs.tf @@ -0,0 +1,5 @@ +output "ecs_instances" { + description = "查看创建的ECS实例列表" + value = format("https://ecs.console.aliyun.com/server/region/%s?instanceIds=%s,%s,%s,%s", var.region, alicloud_instance.ecs_instance_in_vpc_prd1.id, alicloud_instance.ecs_instance_in_vpc_prd2.id, alicloud_instance.ecs_instance_in_vpc_prd3.id, alicloud_instance.ecs_instance_in_vpc_sec.id) +} + diff --git a/solution/tech-solution/ecnap/variables.tf b/solution/tech-solution/ecnap/variables.tf new file mode 100644 index 000000000..d806b460d --- /dev/null +++ b/solution/tech-solution/ecnap/variables.tf @@ -0,0 +1,33 @@ +variable "ecs_instance_type" { + type = string + description = "ECS实例规格" + default = "ecs.t6-c4m1.large" +} + +variable "ecs_instance_password" { + type = string + sensitive = true + description = "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)" + # default = "Alicloud@123" +} + +variable "region" { + type = string + description = "资源部署地域" + default = "cn-hangzhou" +} + +variable "zone1" { + type = string + description = "交换机可用区1" + default = "cn-hangzhou-j" +} + +variable "zone2" { + type = string + description = "交换机可用区2,请确保交换机可用区2与交换机可用区1不相同" + default = "cn-hangzhou-k" +} + + + diff --git a/solution/tech-solution/gaoia/README.md b/solution/tech-solution/gaoia/README.md new file mode 100644 index 000000000..1d6659350 --- /dev/null +++ b/solution/tech-solution/gaoia/README.md @@ -0,0 +1,58 @@ +## Introduction + + +本示例用于实现解决方案[互联网应用全球加速](https://www.aliyun.com/solution/tech-solution/gaoia), 涉及到GA、NLB、VPC、vSwitch、ECS等资源的部署。 + + + +This example is used to implement solution [Global acceleration of Internet applications](https://www.aliyun.com/solution/tech-solution/gaoia), which involves the creation and deployment of resources such as ga, nlb, vpc, vSwitch, and ecs. + + + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [alicloud_ecs_command.run_command_ecs01](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_command.run_command_ecs02](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource | +| [alicloud_ecs_invocation.invoke_script_ecs01](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_ecs_invocation.invoke_script_ecs02](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource | +| [alicloud_ga_accelerator.accelerator](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ga_accelerator) | resource | +| [alicloud_ga_ip_set.accelerate_region](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ga_ip_set) | resource | +| [alicloud_ga_listener.ga_listener](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ga_listener) | resource | +| [alicloud_instance.ecs_instance_01](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_instance.ecs_instance_02](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource | +| [alicloud_nlb_listener.nlb_listener](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/nlb_listener) | resource | +| [alicloud_nlb_load_balancer.nlb_load_balancer](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/nlb_load_balancer) | resource | +| [alicloud_nlb_server_group.nlb_server_group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/nlb_server_group) | resource | +| [alicloud_nlb_server_group_server_attachment.server_attachment1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/nlb_server_group_server_attachment) | resource | +| [alicloud_nlb_server_group_server_attachment.server_attachment2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/nlb_server_group_server_attachment) | resource | +| [alicloud_security_group.security_group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource | +| [alicloud_security_group_rule.allow_tcp_80](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource | +| [alicloud_vpc.vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource | +| [alicloud_vswitch.vswitch1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | +| [alicloud_vswitch.vswitch2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [accelerate\_region\_id](#input\_accelerate\_region\_id) | 加速地域ID | `string` | `"cn-hongkong"` | no | +| [ecs\_instance\_password](#input\_ecs\_instance\_password) | 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)` | `string` | n/a | yes | +| [ecs\_instance\_type](#input\_ecs\_instance\_type) | ECS实例规格 | `string` | `"ecs.e-c1m1.large"` | no | +| [region](#input\_region) | 资源部署地域 | `string` | `"us-east-1"` | no | +| [zone1](#input\_zone1) | 交换机可用区1 | `string` | `"us-east-1a"` | no | +| [zone2](#input\_zone2) | 交换机可用区2,请确保交换机可用区2与交换机可用区1不相同 | `string` | `"us-east-1b"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/gaoia/main.tf b/solution/tech-solution/gaoia/main.tf new file mode 100644 index 000000000..c4764b239 --- /dev/null +++ b/solution/tech-solution/gaoia/main.tf @@ -0,0 +1,161 @@ +provider "alicloud" { + region = "us-east-1" +} + +resource "alicloud_vpc" "vpc" { + vpc_name = "VPC_EU" + cidr_block = "192.168.0.0/16" +} + +resource "alicloud_vswitch" "vswitch1" { + vpc_id = alicloud_vpc.vpc.id + zone_id = var.zone1 + vswitch_name = "vsw_001" + cidr_block = "192.168.1.0/24" +} + +resource "alicloud_vswitch" "vswitch2" { + vpc_id = alicloud_vpc.vpc.id + zone_id = var.zone2 + vswitch_name = "vsw_002" + cidr_block = "192.168.2.0/24" +} + +resource "alicloud_security_group" "security_group" { + security_group_name = "SecurityGroup_1" + vpc_id = alicloud_vpc.vpc.id +} + +resource "alicloud_security_group_rule" "allow_tcp_80" { + type = "ingress" + ip_protocol = "tcp" + policy = "accept" + port_range = "80/80" + priority = 1 + security_group_id = alicloud_security_group.security_group.id + cidr_ip = "192.168.0.0/16" +} + + +resource "alicloud_instance" "ecs_instance_01" { + instance_name = "ECS01" + vswitch_id = alicloud_vswitch.vswitch1.id + security_groups = [alicloud_security_group.security_group.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 +} + +resource "alicloud_instance" "ecs_instance_02" { + instance_name = "ECS02" + vswitch_id = alicloud_vswitch.vswitch2.id + security_groups = [alicloud_security_group.security_group.id] + image_id = "centos_7_6_x64_20G_alibase_20211130.vhd" + instance_type = var.ecs_instance_type + password = var.ecs_instance_password + system_disk_category = "cloud_essd" + system_disk_size = 40 +} + +resource "alicloud_ecs_command" "run_command_ecs01" { + name = "Deploy testing ecs01 website" + command_content = base64encode(<<-EOF + yum install -y nginx + systemctl start nginx.service + cd /usr/share/nginx/html/ + echo "Hello World ! This is ECS01." > index.html + EOF + ) + type = "RunShellScript" + timeout = 60 +} + +resource "alicloud_ecs_invocation" "invoke_script_ecs01" { + instance_id = [alicloud_instance.ecs_instance_01.id] + command_id = alicloud_ecs_command.run_command_ecs01.id +} + +resource "alicloud_ecs_command" "run_command_ecs02" { + name = "Deploy testing ecs02 website" + command_content = base64encode(<<-EOF + yum install -y nginx + systemctl start nginx.service + cd /usr/share/nginx/html/ + echo "Hello World ! This is ECS02." > index.html + EOF + ) + type = "RunShellScript" + timeout = 60 +} + +resource "alicloud_ecs_invocation" "invoke_script_ecs02" { + instance_id = [alicloud_instance.ecs_instance_02.id] + command_id = alicloud_ecs_command.run_command_ecs02.id +} + +resource "alicloud_nlb_load_balancer" "nlb_load_balancer" { + vpc_id = alicloud_vpc.vpc.id + load_balancer_name = "NLB_EU" + address_type = "Intranet" + address_ip_version = "Ipv4" + zone_mappings { + zone_id = var.zone1 + vswitch_id = alicloud_vswitch.vswitch1.id + } + zone_mappings { + zone_id = var.zone2 + vswitch_id = alicloud_vswitch.vswitch2.id + } +} + +resource "alicloud_nlb_server_group" "nlb_server_group" { + vpc_id = alicloud_vpc.vpc.id + server_group_name = "NLB_SERVER_GROUP" +} + +resource "alicloud_nlb_server_group_server_attachment" "server_attachment1" { + server_group_id = alicloud_nlb_server_group.nlb_server_group.id + server_type = "Ecs" + server_id = alicloud_instance.ecs_instance_01.id + port = 80 +} + +resource "alicloud_nlb_server_group_server_attachment" "server_attachment2" { + server_group_id = alicloud_nlb_server_group.nlb_server_group.id + server_type = "Ecs" + server_id = alicloud_instance.ecs_instance_02.id + port = 80 +} + +resource "alicloud_nlb_listener" "nlb_listener" { + listener_port = 80 + listener_protocol = "TCP" + load_balancer_id = alicloud_nlb_load_balancer.nlb_load_balancer.id + server_group_id = alicloud_nlb_server_group.nlb_server_group.id +} + +resource "alicloud_ga_accelerator" "accelerator" { + bandwidth_billing_type = "CDT" + payment_type = "PayAsYouGo" +} + +resource "alicloud_ga_ip_set" "accelerate_region" { + accelerate_region_id = var.accelerate_region_id + bandwidth = "2" + accelerator_id = alicloud_ga_accelerator.accelerator.id + isp_type = "BGP" +} + +resource "alicloud_ga_listener" "ga_listener" { + name = "TCP_80" + port_ranges { + from_port = 80 + to_port = 80 + } + protocol = "TCP" + accelerator_id = alicloud_ga_accelerator.accelerator.id + client_affinity = "SOURCE_IP" +} + diff --git a/solution/tech-solution/gaoia/outputs.tf b/solution/tech-solution/gaoia/outputs.tf new file mode 100644 index 000000000..3395fb52e --- /dev/null +++ b/solution/tech-solution/gaoia/outputs.tf @@ -0,0 +1,9 @@ +output "nlb_dns_name" { + description = "NLB的DNS名称" + value = alicloud_nlb_load_balancer.nlb_load_balancer.dns_name +} + +output "accelerator_id" { + description = "全球加速实例ID" + value = alicloud_ga_accelerator.accelerator.id +} diff --git a/solution/tech-solution/gaoia/variables.tf b/solution/tech-solution/gaoia/variables.tf new file mode 100644 index 000000000..4a3dfab51 --- /dev/null +++ b/solution/tech-solution/gaoia/variables.tf @@ -0,0 +1,36 @@ +variable "ecs_instance_type" { + type = string + description = "ECS实例规格" + default = "ecs.e-c1m1.large" +} + +variable "ecs_instance_password" { + type = string + sensitive = true + description = "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)" + # default = "Alicloud@123" +} + +variable "region" { + type = string + description = "资源部署地域" + default = "us-east-1" +} + +variable "zone1" { + type = string + description = "交换机可用区1" + default = "us-east-1a" +} + +variable "zone2" { + type = string + description = "交换机可用区2,请确保交换机可用区2与交换机可用区1不相同" + default = "us-east-1b" +} + +variable "accelerate_region_id" { + type = string + default = "cn-hongkong" + description = "加速地域ID" +}