$ cd /data
$ mkdir terraform
$ mkdir aliyun
terraform作为terraform的配置文件夹,内部的每一个.tf,.tfvars文件都会被加载。
创建providers.tf文件,配置provider依赖。
provider "alicloud" {
access_key = "xxxxxxxx"
secret_key = "xxxxxxxx"
region = "cn-beijing"
}
执行命令 terraform init初始化环境。会自动读取provider.tf 文件下载对应的依赖包。
terraform init
为了安全起见,建议将ak/sk设置在环境变量里,设置后使用echo ${变量}确认下是否生效。
环境变量配置方式如下:
$ export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
$ export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
$ echo $ALICLOUD_ACCESS_KEY
$ echo $ALICLOUD_SECRET_KEY
当需要创建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.id
cidr_block = "10.16.0.0/20"
zone_id = "cn-beijing-b"
}
运行terraform plan 查看将被要执行的操作。
terraform apply开始执行创建。
在已有专有网络中创建一个安全组并添加一个允许任何地址访问的安全组规则。在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 = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
执行terraform plan查看将被要执行的操作。
从上面的输出可以发现,已经存在的资源不会被再次创建,只会创建新增的资源。另外由于之前的执行操作已经将新增变量存储在本地,因此只要不删除执行记录,则变量将会被一直引用。
执行terraform apply执行创建操作。
执行结果会将历史执行结果全部展示。
在terraform.tf文件中增加以下内容:
resource "alicloud_instance" "instance" {
# cn-beijing
availability_zone = "cn-beijing-b"
security_groups = alicloud_security_group.default.*.id
# series III
instance_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.id
internet_max_bandwidth_out = 10
}
执行terraform plan查看将被要执行的操作。
执行terraform apply 执行变更:
执行结果有报错,去控制台查看发现资源ecs资源并未被创建。经确认是该地域无当前机型,导致创建失败。重新调整机型后重新执行:
此次报错是因为可用区与创建vsw选择的可用区不一致,无法查到vswid信息,导致创建失败,将可用区修正后继续执行:
将创建vpc、vsw、安全组、ecs一次性全部执行,会发生什么呢?
不出现失败的情况,以上资源均会被创建。
但是当某一个资源创建失败后,后面的资源将不会再被创建,前面已经创建成功的将不会被删除。当错误参数调整后再执行,已经创建的资源不会再次被创建,未被创建的资源将会继续创建。