Skip to content

Commit b8e6647

Browse files
lsy1968shanye997
authored andcommitted
201-use-case-create-and-manage-ecs-instance
1 parent e9f4ef1 commit b8e6647

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
## Introduction
2+
3+
<!-- DOCS_DESCRIPTION_CN -->
4+
本示例用于在阿里云上创建一台ECS实例,涉及到专有网络VPC、虚拟交换机vSwitch、安全组、弹性计算实例等资源的创建和部署。
5+
详情可查看[创建一台ECS实例](https://help.aliyun.com/zh/ecs/developer-reference/terraform/)
6+
<!-- DOCS_DESCRIPTION_CN -->
7+
8+
<!-- DOCS_DESCRIPTION_EN -->
9+
This example is used to create an ECS instance on Alibaba Cloud, which involves the creation and deployment of resources such as Virtual Private Cloud, virtual Switches, security groups, and Elastic Compute Service instances.
10+
More details in [Create an ECS instance](https://help.aliyun.com/zh/ecs/developer-reference/terraform/).
11+
<!-- DOCS_DESCRIPTION_EN -->
12+
13+
<!-- BEGIN_TF_DOCS -->
14+
## Providers
15+
16+
| Name | Version |
17+
|------|---------|
18+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
19+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
20+
21+
## Modules
22+
23+
No modules.
24+
25+
## Resources
26+
27+
| Name | Type |
28+
|------|------|
29+
| [alicloud_instance.instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource |
30+
| [alicloud_security_group.group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource |
31+
| [alicloud_security_group_rule.allow_all_tcp](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule) | resource |
32+
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource |
33+
| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
34+
| [random_integer.default](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/integer) | resource |
35+
| [alicloud_zones.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/zones) | data source |
36+
37+
## Inputs
38+
39+
| Name | Description | Type | Default | Required |
40+
|------|-------------|------|---------|:--------:|
41+
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | 定义一个字符串类型的变量instance\_type,默认值为"ecs.e-c1m1.large",用于指定ECS实例类型 | `string` | `"ecs.e-c1m1.large"` | no |
42+
| <a name="input_region"></a> [region](#input\_region) | 定义一个变量region,默认值为"cn-beijing",用于指定阿里云区域 | `string` | `"cn-beijing"` | no |
43+
| <a name="input_vpc_cidr_block"></a> [vpc\_cidr\_block](#input\_vpc\_cidr\_block) | 定义一个变量vpc\_cidr\_block,默认值为"172.16.0.0/16",用于指定VPC的CIDR块 | `string` | `"172.16.0.0/16"` | no |
44+
| <a name="input_vsw_cidr_block"></a> [vsw\_cidr\_block](#input\_vsw\_cidr\_block) | 定义一个变量vsw\_cidr\_block,默认值为"172.16.0.0/24",用于指定VSwitch的CIDR块 | `string` | `"172.16.0.0/24"` | no |
45+
<!-- END_TF_DOCS -->
46+
47+
## Documentation
48+
<!-- docs-link -->
49+
50+
The template is based on Aliyun document: [Create an ECS instance](https://help.aliyun.com/zh/ecs/developer-reference/terraform/)
51+
52+
<!-- docs-link -->
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# 定义一个变量region,默认值为"cn-beijing",用于指定阿里云区域
2+
variable "region" {
3+
default = "cn-beijing"
4+
}
5+
6+
# 配置阿里云provider,使用变量region中定义的区域
7+
provider "alicloud" {
8+
region = var.region
9+
}
10+
11+
# 定义一个字符串类型的变量instance_type,默认值为"ecs.e-c1m1.large",用于指定ECS实例类型
12+
variable "instance_type" {
13+
type = string
14+
default = "ecs.e-c1m1.large"
15+
}
16+
17+
# 使用数据源查询可用区信息,通过指定的实例类型、资源创建类型(如VSwitch)以及磁盘种类来过滤结果
18+
data "alicloud_zones" "default" {
19+
available_instance_type = var.instance_type
20+
available_resource_creation = "VSwitch"
21+
available_disk_category = "cloud_essd"
22+
}
23+
24+
# 定义一个变量vpc_cidr_block,默认值为"172.16.0.0/16",用于指定VPC的CIDR块
25+
variable "vpc_cidr_block" {
26+
default = "172.16.0.0/16"
27+
}
28+
29+
# 定义一个变量vsw_cidr_block,默认值为"172.16.0.0/24",用于指定VSwitch的CIDR块
30+
variable "vsw_cidr_block" {
31+
default = "172.16.0.0/24"
32+
}
33+
34+
# 生成一个介于10000到99999之间的随机整数,用于确保某些资源名称的唯一性
35+
resource "random_integer" "default" {
36+
min = 10000
37+
max = 99999
38+
}
39+
40+
# 创建名为vpc-test的VPC,并使用随机整数确保名称唯一性
41+
resource "alicloud_vpc" "vpc" {
42+
vpc_name = "vpc-test_${random_integer.default.result}"
43+
cidr_block = var.vpc_cidr_block
44+
}
45+
46+
# 创建安全组,名称包含随机整数以保证唯一性,并关联至上述VPC
47+
resource "alicloud_security_group" "group" {
48+
security_group_name = "test_${random_integer.default.result}" # 替换了这里的字段名
49+
vpc_id = alicloud_vpc.vpc.id
50+
}
51+
52+
# 创建一条允许所有TCP流量进入的安全组规则,与之前创建的安全组关联
53+
resource "alicloud_security_group_rule" "allow_all_tcp" {
54+
type = "ingress"
55+
ip_protocol = "tcp"
56+
nic_type = "intranet" # 修改了这里,将nic_type改为'intranet'
57+
policy = "accept"
58+
port_range = "1/65535"
59+
priority = 1
60+
security_group_id = alicloud_security_group.group.id
61+
cidr_ip = "0.0.0.0/0"
62+
}
63+
64+
# 创建VSwitch,名称中包含随机整数以确保唯一性,并与VPC、可用区关联
65+
resource "alicloud_vswitch" "vswitch" {
66+
vpc_id = alicloud_vpc.vpc.id
67+
cidr_block = var.vsw_cidr_block
68+
zone_id = data.alicloud_zones.default.zones[0].id
69+
vswitch_name = "vswitch-test-${random_integer.default.result}"
70+
}
71+
72+
# 创建ECS实例,设置多个参数如可用区、安全组、实例类型等,并使用随机整数保证实例名称的唯一性
73+
resource "alicloud_instance" "instance" {
74+
availability_zone = data.alicloud_zones.default.zones[0].id
75+
security_groups = [alicloud_security_group.group.id]
76+
instance_type = var.instance_type
77+
system_disk_category = "cloud_essd"
78+
system_disk_name = "test_foo_system_disk_${random_integer.default.result}"
79+
system_disk_description = "test_foo_system_disk_description"
80+
image_id = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
81+
instance_name = "test_ecs_${random_integer.default.result}"
82+
vswitch_id = alicloud_vswitch.vswitch.id
83+
internet_max_bandwidth_out = 10
84+
password = "Terraform@Example" # 用户根据自己实际情况修改
85+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
required_providers {
3+
alicloud = {
4+
source = "aliyun/alicloud"
5+
}
6+
}
7+
}

0 commit comments

Comments
 (0)