首页 > 解决方案 > terraform 在循环中调用模块

问题描述

是否可以从另一个资源、数据、本地等调用带有 for_each 函数的 terraform 模块?

terraform required_version = ">= 0.15.4"


def.tfvar

name                         = "app-stage"
project                      = "stage-xyz"

主文件


    source             = "../../src/codedeploy"
    name               = var.name
    project            = var.project
    s3_bucket_arn      = var.s3_bucket_arn
    environment        = var.environment
    app_name           = module.codedeploy.app_name

输出.tf

output "app_name" {
  value = aws_codedeploy_app.app.name
}

这个可行,但如果我想创建几个 codedeploy 那么我必须创建几个 tfvar 文件并应用它们而不是这样做,我想创建一个 tfvar 文件并在 main.tf 文件中使用 for_each 函数。


abce.tfvar

codeDeploy_records = {
  "app-stage= {
      project                      = "stage-xyz",
    },
  "app-qa= {
      project                      = "qa-xyz",
   }
  }

主文件

module "codedeploy" {
   
    for_each    = var.codeDeploy_records
        source             = "../../src/codedeploy"
        name               = each.key
        project            = each.value.project
        app_name           = module.codedeploy.app_name

那一个给出了以下错误。此对象没有名为“app_name”的属性。

我们可以从下面调用一个模块吗?

local test {
for_each    = var.codeDeploy_records
        source             = "../../src/codedeploy"
        name               = each.key
        project            = each.value.projec
        app_name           = module.codedeploy.app_name 

}

module "codedeploy" {
   
    

标签: amazon-web-servicesterraformaws-code-deploy

解决方案


在这种情况下我的解决方案

app_name           = module.codedeploy_app[each.key].app_name

推荐阅读