Terraform是一个比较强大的自动化资源编排管理工具,通过模板描述资源,通过apply命令创建/更新资源。详细的使用方法及特性可以参见公众号中关于Terraform的其他文章了解。本文将主要讲解如何利用CLI+Terraform简化模板的编写。
Terraform的模板由几大结构组成:资源(resource)、变量(variable)、输出(output),他还有一个很重量级的结构:数据源(data)。数据源是用来过滤资源中parameter的可选项的,举个例子,ECS的实例类型(instance_type)有90多个选项,我们希望能够根据一些条件过滤这些选项,这时便可以利用data的特性,描述需要ECS的规格(几核 几G 哪个系列),data结果中将会返回符合过滤条件的列表,在resource中直接指定数据源为此data即可。data结构的例子如下:
data "alicloud_instance_types" "4c8g" {
instance_type_family= "ecs.s3"
cpu_core_count = 4
memory_size = 8
}
在resource中引用:
instance_type = "${data. alicloud_instance_types. 4c8g.0.id}"
除实例类型(instance_type)外,ECS的datasource还提供了镜像(images)、地域(regions)、可用区(zones)的数据过滤,详细文档可参见 https://www.terraform.io/docs/providers/alicloud/index.html,或 data_source_alicloud_instance_types_test.go 其中含有示例代码。
datasource在Terraform模板编写时为参数获取提供了便利,如果再加上CLI,使用会更便捷,在上面的模板例子中可以通过CLI方便的看到ECS的系列(instance_type_family)数据,当然也可以看到实例类例、镜像、地域、可用区等数据,将其值放在模板中,将大量简化我们模板编写时对参数可选值的获取。
CLI的安装及使用
- CLI安装: sudo pip install aliyuncli
- ecs调用包安装: sudo pip install aliyun-python-sdk-ecs
- 配置: aliyuncli configure,按提示输入AK、region、output format(建议table)
- 执行aliyuncli ecs 将能够看到支持的命令,以上面的例子为例输入aliyuncli ecs DescribeInstanceTypeFamilies 将能够看到返回的系列列表,如下图:
- CLI的更多帮助请参见https://help.aliyun.com/document_detail/29993.html
更多Terraform的模板请参考https://github.com/alibaba/terraform-provider/tree/master/terraform/examples,有问题可以在issue中提问。欢迎大家关注我们的开源自动化运维工具集:https://github.com/alibaba/opstools/