Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 地形可重用可变块_Terraform - Fatal编程技术网

Terraform 地形可重用可变块

Terraform 地形可重用可变块,terraform,Terraform,我的terraform配置中有两个lambda,我希望它们具有完全相同的环境变量 我不希望每次修改一个lambda环境块时都需要修改这两个环境块。有可能有某种可重用的块吗 因此,与此相反: resource "aws_lambda_function" "f1" { <..> environment { variables = { ENV_STAGE = "${lower(var.environment)}" # all of these will al

我的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"
    }
  }
}
资源“aws\u lambda\u函数”“f1”{
环境{
变量={
ENV_STAGE=“${lower(var.environment)}”#对于两个lambda,所有这些都将始终相同
A=“A”
}
}
}
资源“aws_lambda_函数”“f2”{
环境{
变量={
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
}
env={
变量={
ENV_STAGE=“${lower(var.environment)}”
A=“A”
}
}
资源“aws_lambda_函数”“f1”{
环境=环境
}
资源“aws_lambda_函数”“f2”{
环境=环境
}
您需要一个

使用

可以实现基于地图创建资源等更高级的功能。您需要


使用

@dtech可以实现基于地图创建资源等更高级的功能。答案是正确的,我只想补充一点,v0.11的语法略有不同(我目前使用的语法)

本地人{
公共环境={
ENV_STAGE=“${lower(var.environment)}”
}
}
资源“aws_lambda_函数”“lambda”{
环境{
变量=“${merge(local.common_env)}”
}
}

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

本地人{
公共环境={
ENV_STAGE=“${lower(var.environment)}”
}
}
资源“aws_lambda_函数”“lambda”{
环境{
变量=“${merge(local.common_env)}”
}
}

您可以将这两个资源组合起来,并对它们进行两次迭代。这是否可行取决于两个lambda资源之间的差异。您可以组合这两个资源并在它们上迭代两次。这是否可行取决于两个lambda资源之间的差异。
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
  }
}
locals {
  common_env = {
    ENV_STAGE              = "${lower(var.environment)}"
  }
}

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