You need to enable JavaScript to run this app.
导航

Modules

最近更新时间2022.07.01 10:39:19

首次发布时间2022.05.17 12:06:31

Terraform配置文件通常由多个ResourceData Source变量组成,Modules可以帮助您简化配置和降低维护的复杂度,通过关键字"module"进行声明。
Module相当于一个Terraform模块,是对多个资源的封装及抽象。

调用module模块

在配置文件中指定调用路径,示例如下:

module "child_module" {
  source = "./child"
  ...
}
  • module块的名称:
    关键字"module"后为块的名称,该名称必须是有效的标识符。
  • module块中的参数:
    • source:必选参数,指向包含模块配置文件的源路径。

      源路径类型说明示例

      本地路径

      必须以 "./" 或 "../" 开头

      source = "./child"
      source = "../parent"

      GitHub使用Https协议source = "github.com/terraform-xxx-modules/terraform-xxx-vpc.git"
      使用SSH协议source = "git@github.com:terraform-xxx-modules/terraform-xxx-vpc.git"
      指定分支或版本,需在路径中指定ref参数source = "github.com/terraform-xxx-modules/terraform-xxx-vpc.git?ref=v1.0.0"

      通用Git仓库

      "git::"开头,支持使用Https或SSH协议,支持指定分支或版本

      • source = "git::ssh://username@example.com/storage.git"
      • source = "git::https://example.com/vpc.git?ref=v1.2.0"
    • 所需其他参数。

说明

  • 添加module块之后,您需要执行terraform init命令将模块代码的副本保存至工作目录下。
  • 修改或删除module块后,也需重新执行terraform init命令更新相应的配置。

访问模块的输出变量

module块是对资源的封装和抽象,因此不能直接访问module块中定义的资源属性,只能访问module块中定义的输出变量,格式为:module.< MODULE NAME >.< OUTPUT NAME >。

以下以本地源路径为例,为您介绍如何访问module块的输出变量:

  1. 在工作目录./modules/vpc路径声明module块后,创建一个VPC,并输出VPC ID。声明方式可参见变量

    variable "cidr" {
      type    = string
      default = "172.20.0.0/16"
    }
    
    resource "volcengine_vpc" "foo" {
      name = "tf_vpc_test"
      cidr = var.cidr
    }
    
    output "vpc_id" {
      value = volcengine_vpc.foo.id
    }
    
  2. 在工作目录中调用该模块,并在VPC下新增一个子网,此时vpc_id的值使用 "module.vpc.vpc_id”表示。

    module "vpc" {
      source = "./modules/vpc"
    }
    
    resource "volcengine_subnet" "default" {
      subnet_name = "tf_subnet_test"
      cidr_block = "172.20.1.0/24"
      zone_id = "cn-beijing-a"
      vpc_id  = module.vpc.vpc_id
    }