云资源自动化 for Terraform Modules

这篇说说Terraform模块的定义与调用方法,重点说明module块中source和version参数的使用,涵盖本地路径、Terraform Registry及GitHub三种模块源类型及版本约束规则。 source参数:指定模块源,支持本地路径、Registry、GitHub等多种类型,Terraform init时自动下载。 version参数:仅用于Registry源,约束模块版本,格式与Provider版。

相关产品
云资源自动化 for Terraform 产品页,含版本规格、价格与购买入口。

模块是包含一组 Terraform 代码的文件夹,是对多个资源的抽象和封装。

一、调用模块

在 Terraform 代码中使用module块引用模块。一个 module 块包含 module 关键字、module 名称和 module 体({}之间的部分)三部分。如下所示:

module "servers" { source = "./app-cluster" servers = 5}

module调用可以使用下列参数:

·source:指定引用模块的源。

·version:指定引用模块的版本号。

·meta-arguments:Terraform 0.13开始支持的特性,类似 resource 与 data,可以用来操作 module 的行为,详情请参见 MetaData。

二、Source

source参数用来指定模块源,指定 Terraform 获取子模块源代码的方式。Terraform 在 terraform init 的安装步骤中,使用它将源代码下载到本地磁盘上,以便其他 Terraform 命令可以使用。
模块安装程序支持从以下源类型进行安装:

·本地路径

·TerraformRegistry

·GitHub

·Bitbucket

·Generic Git, Mercurial repositories

·HTTP URLs

·S3 buckets

·GCS buckets

·Modules in Package Sub-directories

这篇说说本地路径、TerraformRegistry 及 GitHub 的使用方法。

三、本地路径

本地路径可以使用同一项目中的子模块,与其他资源的区别是无需下载相关代码即可使用。例如:

module "consul" { source = "./consul"}

四、Terraform Registry

Registry 目前是 Terraform 推荐的模块仓库方案,采用了 Terraform 定制的协议,支持版本化管理和使用模块。提供的 公共仓库 中保存和索引了大量公共模块,可以快速搜索到各类和社区提供的高质量模块。

公共仓库的模块可以用 <NAMESPACE>/<NAME>/<PROVIDER> 形式的源地址来引用,你可在模块介绍中获取确切的源地址。例如:

module "consul" { source = "hashicorp/consul/xxx" version = "0.1.0"}

托管在其他仓库的模块,则需在源地址头部添加 <HOSTNAME>/ 部分,指定私有仓库的主机名。例如:

module "consul" { source = "app.terraform.io/example-corp/k8s-cluster/azurerm" version = "1.1.0"}

五、GitHub

若 Terraform 读取 source 参数值,是以 github.com 为前缀时,会将其自动识别为一个 GitHub 源。例如,使用 HTTPS 协议克隆仓库:

module "consul" { source = "github.com/hashicorp/example"}

如需使用 SSH 协议,则请使用如下地址:

module "consul" { source = "git@github.com:hashicorp/example.git"}

注意:说明:

注意:GitHub 源的处理与通用 Git 仓库一致,它们获取 git 凭证和通过 ref 参数引用特定版本的方式均一致。如需访问私有仓库,则需额外配置 git 凭证。

六、Version

使用 registry 作为模块源时,可以使用 version 元参数约束使用的模块版本。例如:

module "consul" { source = "hashicorp/consul/xxx" version = "0.0.5" servers = 3}

version 元参数的格式与 Provider 版本约束的格式一致。在满足版本约束的前提下,Terraform 会使用当前已安装的最新版本的模块实例。若当前没有满足约束的版本被安装过,则会下载符合约束的最新的版本。

version 元参数只能配合 registry 使用,支持公共的或私有的模块仓库。其他类型的模块源不一定支持版本化,本地路径模块不支持版本化。

赞 (0)
上一篇 4天前
下一篇 4天前