众所周知,Terraform 是一个开源的自动化的资源编排工具,支持多家云服务提供商。阿里云作为第三大云服务提供商,terraform-alicloud-provider 已经支持了超过 90 多个 Resource 和 Data Source,覆盖20多个服务和产品,吸引了越来越多的开发者加入到阿里云Terraform生态的建设中。
随着 Resource 和 DataSource 的不断增加和完善,业务架构的不断发展,Terraform 模板编写的成本和复杂度也在不断的增加。如何让Terraform 模板更加简单和重用,就是本文所要解决的问题。
本文将通过一个典型的负载均衡架构,向大家介绍如何使用 Module 简化 Terraform 的模板。
如图所示,这个架构中,包含 ECS 实例,SLB 实例,RDS 实例,OSS 等资源和服务,同时所有的 ECS,RDS 和部分 SLB 在一个 VPC 网络环境中。
将所有Resource放在一个模板中进行统一管理
面对这样的一个架构,模板可以有多种写法。通常的写法是将架构中涉及到的所有资源写到一个模板中,并通过参数和关系型 resource 将这些资源关联起来,如下所示:
// Images data source for image_id
data "alicloud_images" "default" {
...
}
// Instance_types data source for instance_type
data "alicloud_instance_types" "default" {
...
}
// Zones data source for availability_zone
data "alicloud_zones" "default" {
...
}
// A new VPC
resource "alicloud_vpc" "vpc" {
name = "default"
...
}
// Two new VSwitches
resource "alicloud_vswitch" "vswitches" {
count = 2
vpc_id = "${alicloud_vpc.vpc.id}"
...
}
// A new Security Group
resource "alicloud_security_group" "default" {
vpc_id = "alicloud_vpc.vpc.id}"
...
}
// Two Web