首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在terraform中运行同一文件中的多个模块?

如何在terraform中运行同一文件中的多个模块?
EN

Stack Overflow用户
提问于 2020-09-20 01:47:59
回答 1查看 361关注 0票数 0

我使用https://github.com/cloudposse/terraform-aws-acm-request-certificate生成证书,使用terraform和aws。

如何在terraform中运行同一文件中的多个域?(非子域)

我尝试了一下,但出现了错误Error: Duplicate module call

代码语言:javascript
复制
module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "example.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

我寻找的解决方案如下:

代码语言:javascript
复制
const domains = ["example.com", "otherexample.com"]

foreach(domain of domains) {
 module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = domain
  process_domain_validation_options = true
  ttl                               = "300"
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-20 07:06:31

首先,您对两个模块使用相同的名称。它们应该是不同的,例如:

代码语言:javascript
复制
module "acm_request_certificate_example" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

module "acm_request_certificate_other_example" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

此外,在terraform 0.13中,您可以使用foreach作为模块。

代码语言:javascript
复制
# my_buckets.tf
module "bucket" {
  for_each = toset(["assets", "media"])
  source   = "./publish_bucket"
  name     = "${each.key}_bucket"
}

请参阅release notes中的详细信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63971715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档