1 初始化环境
1.1 创建初始文件夹
$ cd /data
$ mkdir terraform
$ mkdir aliyun
terraform作为terraform的配置文件夹,内部的每一个.tf,.tfvars文件都会被加载。
1.2 配置provider
创建providers.tf文件,配置provider依赖。
provider "alicloud" {access_key = "xxxxxxxx"secret_key = "xxxxxxxx"region = "cn-beijing"
}
- provider这一行表明提供的阿里云的接口
- access_key和secret_key分别是阿里云的ak、sk。在阿里云的账户中可以获取
- region 是管理的区域
1.3 初始化环境
执行命令 terraform init初始化环境。会自动读取provider.tf 文件下载对应的依赖包。
terraform init
2 创建一台ECS实例(分步骤执行)
为了安全起见,建议将ak/sk设置在环境变量里,设置后使用echo ${变量}确认下是否生效。
环境变量配置方式如下:
$ export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
$ export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
$ echo $ALICLOUD_ACCESS_KEY
$ echo $ALICLOUD_SECRET_KEY
2.1 创建交换机
当需要创建ecs资源的区域不存在vpc和交换机的情况下,需要优先创建交换机。
创建terraform.tf文件,完善ecs创建信息。
resource "alicloud_vpc" "vpc" {vpc_name = "tf_test_foo"cidr_block = "10.16.0.0/16"
}resource "alicloud_vswitch" "vsw" {vpc_id = alicloud_vpc.vpc.idcidr_block = "10.16.0.0/20"zone_id = "cn-beijing-b"
}
运行terraform plan 查看将被要执行的操作。
terraform apply开始执行创建。
terraform show查看已创建的专有网络和交换机。
2.2 创建安全组
在已有专有网络中创建一个安全组并添加一个允许任何地址访问的安全组规则。在terraform.tf文件中增加以下内容。
resource "alicloud_security_group" "default" {name = "default"vpc_id = alicloud_vpc.vpc.id
}resource "alicloud_security_group_rule" "allow_all_tcp" {type = "ingress"ip_protocol = "tcp"nic_type = "intranet"policy = "accept"port_range = "1/65535"priority = 1security_group_id = alicloud_security_group.default.idcidr_ip = "0.0.0.0/0"
}
执行terraform plan查看将被要执行的操作。
从上面的输出可以发现,已经存在的资源不会被再次创建,只会创建新增的资源。另外由于之前的执行操作已经将新增变量存储在本地,因此只要不删除执行记录,则变量将会被一直引用。
执行terraform apply执行创建操作。
执行terraform show查看创建结果。
执行结果会将历史执行结果全部展示。
2.3 创建ECS
在terraform.tf文件中增加以下内容:
resource "alicloud_instance" "instance" {# cn-beijingavailability_zone = "cn-beijing-b"security_groups = alicloud_security_group.default.*.id# series IIIinstance_type = "ecs.n1.small"system_disk_category = "cloud_efficiency"image_id = "aliyun_3_x64_20G_alibase_20230424.vhd"instance_name = "ecs_name"vswitch_id = alicloud_vswitch.vsw.idinternet_max_bandwidth_out = 10
}
执行terraform plan查看将被要执行的操作。
执行terraform apply 执行变更:
执行结果有报错,去控制台查看发现资源ecs资源并未被创建。经确认是该地域无当前机型,导致创建失败。重新调整机型后重新执行:
此次报错是因为可用区与创建vsw选择的可用区不一致,无法查到vswid信息,导致创建失败,将可用区修正后继续执行:
执行成功,登录控制台后发现资源均已被创建成功。
3 创建一台ECS实例(一次性执行)
将创建vpc、vsw、安全组、ecs一次性全部执行,会发生什么呢?
不出现失败的情况,以上资源均会被创建。
但是当某一个资源创建失败后,后面的资源将不会再被创建,前面已经创建成功的将不会被删除。当错误参数调整后再执行,已经创建的资源不会再次被创建,未被创建的资源将会继续创建。