【问题标题】:Terraform reusable variable blockTerraform 可重用变量块
【发布时间】:2020-04-15 23:11:59
【问题描述】:

我的 terraform 配置中有两个 lambda,我希望它们具有完全相同的环境变量。

我不想每次修改一个 lambda 环境块时都修改一个。是否有可能有某种可重用的块?

所以不要这样:

resource "aws_lambda_function" "f1" {
   <..>
   environment {
    variables = {
      ENV_STAGE = "${lower(var.environment)}" # all of these will always be same for both lambdas
      A = "A"
    }
  }
}

resource "aws_lambda_function" "f2" {
  <..>
  environment {
    variables = {
      ENV_STAGE = "${lower(var.environment)}"
      A = "A"
    }
  }
}

应该是这样的:

env = {
    variables = {
      ENV_STAGE = "${lower(var.environment)}"
      A = "A"
    }
 }

resource "aws_lambda_function" "f1" {
  <..>
  environment = env
}

resource "aws_lambda_function" "f2" {
  <..>
  environment = env
}

【问题讨论】:

  • 您可以组合这两个资源并对其进行两次迭代。这是否可行取决于两个 lambda 资源之间的差异。

标签: terraform


【解决方案1】:

你需要一个locals block

locals {
  shared_env_variables = {
    ENV_STAGE = "${lower(var.environment)}"
    A = "A"
  }
}

resource "aws_lambda_function" "f1" {
  environment {
    variables = merge(local.shared_env_variables, {
       ONLY_FOR_F1: "something"
    })
  }
}

resource "aws_lambda_function" "f2" {
  environment {
    variables = local.shared_env_variables
  }
}

for_each 可以实现更高级的操作,例如基于地图创建资源

【讨论】:

    【解决方案2】:

    @dtech 的回答是正确的,我只想补充一点,v0.11 的语法略有不同(我目前正在使用的)。

    Source

    locals {
      common_env = {
        ENV_STAGE              = "${lower(var.environment)}"
      }
    }
    
    resource "aws_lambda_function" "Lambda" {
      <..>
      environment {
        variables = "${merge(local.common_env)}"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 2021-04-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2019-10-06
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多