1+ # ------------------------------------------------------------------------------
2+ # 核心资源定义 (Main Resource Definitions)
3+ #
4+ # 本文件包含了模块的核心基础设施资源。
5+ # 这里的代码负责根据输入变量来创建和配置所有云资源。
6+ # ------------------------------------------------------------------------------
7+
8+ # 配置阿里云提供商 (Provider)
9+ provider "alicloud" {
10+ # 资源部署地域
11+ region = " cn-hangzhou"
12+ }
13+
14+ # 生成随机ID后缀
15+ resource "random_id" "suffix" {
16+ byte_length = 8
17+ }
18+
19+ # 定义本地变量
20+ locals {
21+ common_name = random_id. suffix . id
22+ }
23+
24+ # 创建VPC
25+ resource "alicloud_vpc" "vpc" {
26+ cidr_block = " 192.168.0.0/16"
27+ vpc_name = " ${ local . common_name } -vpc"
28+ }
29+
30+ # 创建交换机
31+ resource "alicloud_vswitch" "vswitch1" {
32+ vpc_id = alicloud_vpc. vpc . id
33+ cidr_block = " 192.168.1.0/24"
34+ zone_id = var. region_zone_id1
35+ vswitch_name = " ${ local . common_name } -app1-vsw"
36+ }
37+
38+ # 创建交换机
39+ resource "alicloud_vswitch" "vswitch2" {
40+ vpc_id = alicloud_vpc. vpc . id
41+ cidr_block = " 192.168.2.0/24"
42+ zone_id = var. region_zone_id2
43+ vswitch_name = " ${ local . common_name } -app2-vsw"
44+ }
45+
46+ # 创建交换机(NAT网关)
47+ resource "alicloud_vswitch" "vswitch3" {
48+ vpc_id = alicloud_vpc. vpc . id
49+ cidr_block = " 192.168.3.0/24"
50+ zone_id = var. region_zone_id1
51+ vswitch_name = " ${ local . common_name } -pub-vsw"
52+ }
53+
54+ # 创建安全组
55+ resource "alicloud_security_group" "security_group" {
56+ vpc_id = alicloud_vpc. vpc . id
57+ security_group_name = " ${ local . common_name } -sg"
58+ }
59+
60+ # 安全组规则:允许HTTPS
61+ resource "alicloud_security_group_rule" "allow_https" {
62+ type = " ingress"
63+ ip_protocol = " tcp"
64+ port_range = " 443/443"
65+ cidr_ip = " 0.0.0.0/0"
66+ security_group_id = alicloud_security_group. security_group . id
67+ }
68+
69+ # 安全组规则:允许HTTP
70+ resource "alicloud_security_group_rule" "allow_http" {
71+ type = " ingress"
72+ ip_protocol = " tcp"
73+ port_range = " 80/80"
74+ cidr_ip = " 0.0.0.0/0"
75+ security_group_id = alicloud_security_group. security_group . id
76+ }
77+
78+ # 安全组规则:允许SSH
79+ resource "alicloud_security_group_rule" "allow_workbench" {
80+ type = " ingress"
81+ ip_protocol = " tcp"
82+ port_range = " 22/22"
83+ cidr_ip = " 100.104.0.0/16"
84+ security_group_id = alicloud_security_group. security_group . id
85+ }
86+
87+ # 创建ECS1
88+ resource "alicloud_instance" "ecs_instance1" {
89+ instance_name = " ${ local . common_name } -ecs-1"
90+ image_id = " aliyun_3_9_x64_20G_alibase_20231219.vhd"
91+ instance_type = var. instance_type1
92+ system_disk_category = " cloud_essd"
93+ vswitch_id = alicloud_vswitch. vswitch1 . id
94+ security_groups = [alicloud_security_group . security_group . id ]
95+ internet_max_bandwidth_out = 0
96+ password = var. instance_password
97+ }
98+
99+ # 创建ECS2
100+ resource "alicloud_instance" "ecs_instance2" {
101+ instance_name = " ${ local . common_name } -ecs-2"
102+ image_id = " aliyun_3_9_x64_20G_alibase_20231219.vhd"
103+ instance_type = var. instance_type2
104+ system_disk_category = " cloud_essd"
105+ vswitch_id = alicloud_vswitch. vswitch2 . id
106+ security_groups = [alicloud_security_group . security_group . id ]
107+ internet_max_bandwidth_out = 0
108+ password = var. instance_password
109+ }
110+
111+ # 创建NAT网关
112+ resource "alicloud_nat_gateway" "nat_gateway" {
113+ vpc_id = alicloud_vpc. vpc . id
114+ vswitch_id = alicloud_vswitch. vswitch3 . id
115+ nat_type = " Enhanced"
116+ nat_gateway_name = " ${ local . common_name } -ngw"
117+ }
118+
119+ # 创建EIP
120+ resource "alicloud_eip" "eip" {
121+ bandwidth = 200
122+ internet_charge_type = " PayByTraffic"
123+ isp = " BGP"
124+ deletion_protection = false
125+ }
126+
127+ # 绑定EIP到NAT网关
128+ resource "alicloud_eip_association" "eip_association" {
129+ instance_id = alicloud_nat_gateway. nat_gateway . id
130+ allocation_id = alicloud_eip. eip . id
131+ }
132+
133+ # 配置SNAT规则(vswitch1)
134+ resource "alicloud_snat_entry" "snat" {
135+ snat_table_id = alicloud_nat_gateway. nat_gateway . snat_table_ids
136+ snat_ip = alicloud_eip. eip . ip_address
137+ source_vswitch_id = alicloud_vswitch. vswitch1 . id
138+ snat_entry_name = " ${ local . common_name } -snat"
139+ depends_on = [alicloud_eip_association . eip_association ]
140+ }
141+
142+ # 配置SNAT规则(vswitch2)
143+ resource "alicloud_snat_entry" "snat2" {
144+ snat_table_id = alicloud_nat_gateway. nat_gateway . snat_table_ids
145+ snat_ip = alicloud_eip. eip . ip_address
146+ source_vswitch_id = alicloud_vswitch. vswitch2 . id
147+ snat_entry_name = " ${ local . common_name } -snat2"
148+ depends_on = [alicloud_eip_association . eip_association ]
149+ }
0 commit comments