箫竹Aaron
2018-09-20
6118浏览量
Module 是一个Terraform 模板,是对多个子节点,子资源,子架构模板的组合和抽象。利用Module 在降低模板编写和维护复杂度的同时,使得模板结构更加简洁清楚。为什么要使用 Module,详见文章 Module 让 Terraform 使用更简单。
本文将根据自己对 Module 的理解,向大家讲解如何编写一个通用,标准的 Module。
在 Terraform 官方注册 module,目前只支持 Github 的仓库,因此,在编写模板之前,必须先建立一个标准的 Github 仓库:
terraform-<PROVIDER>-<NAME>
,如terraform-alicloud-ecs-instance
,terraform-alicloud-vpc
等为了更好的管理所有阿里云的terraform module,现在所有的仓库都建在组织 terraform-alicloud-modules
下。当有新建仓库需求时,可联系负责人。
Module 仓库建立完毕后,首先要 fork 仓库并将其clone到本地。接下来,开始 Mudole 的编写工作。官方已经给出了一个标准的 Module 应该遵循的原则和规范,详见 standard-module-structure . 本文将在此基础上进行补充。
基本原则
slb instance
和 slb attachment
,这两个子资源分别定义在了 modules/slb
和 modules/slb_attachment
中,然后在最外层的 main.tf
中将这两个module组合为一个新的modulemain.tf
this
,default
,尽量避免使用foo
,test
等为了更好的了解Module被他人引用的次数,阿里云Provider支持对每个Module进行打标,即在main.tf的provider中声明字段configuration_source,格式如下:
provider "alicloud" {
...
configuration_source = "terraform-alicloud-modules/demo" // This should be replaced by the specified owner and module name
}
variables.tf
outputs.tf
instance_ids
中README
Usage
,指明该如何使用这个 Module。Module 的source 格式为 source = "<Repo Organization>/<NAME>/alicloud"
,如:source = "terraform-alicloud-modules/slb-listener/alicloud"
为了更好地编写Module,阿里云提供了一个Module Demo,大家可以参考。
在完成模板的编写后,可以通过terratest 来实现对当前Module的验证性测试。测试无误后,提交代码到github。
如果想要把Module提交到阿里云官方组织terraform-alicloud-modules,可直接在下方留言或者发邮件到 heguimin36@163.com 进行申请。申请通过后,我将为大家新建一个属于自己的Repo。每个贡献Module的开发者都将有机会成为terraform-alicloud-modules members中的一员。
由于Terraform Module 是以 Repo releases 来实现版本控制的,因此在确定代码无误后,包括Readme,发布一个新的Release。之后在terraform module 注册和完成module的发布,具体操作详见 registry modules.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
集结各类场景实战经验,助你开发运维畅行无忧