amazon-web-services - map 变量中的局部变量

标签 amazon-web-services terraform terraform-provider-aws local-variables

我正在尝试使用映射变量(具有 2 个 lambda 名称)。另外,我想在键值内传递一个局部变量,如下例所示。但是,我收到一个错误,因为此处不允许使用变量。有什么建议/建议吗?

变量.tf:

variable "lambdas" {
type = map(string)
default = {
"lambda1_name-${local.global_suffix}"   = "lambda_function1",
"lambda2_name-${local.global_suffix}" = "lambda_function2"
}
}

locals{
global_suffix   = "${var.env}-${var.project}${var.branch_hash}"
}

ma​​in.tf:

resource "aws_lambda_function" "main" {
for_each         = var.lambdas
function_name    = each.key
handler          = "${each.value}.${var.handler}"
filename         = "${path.module}/modules/lambda-main/${each.value}.zip"
source_code_hash = data.archive_file.init[each.key].output_base64sha256
role             = module.lambda_iam_role.arn
runtime          = "python3.6"
memory_size      = "2048"
timeout          = "900"
tags             = local.tags
description      = "${var.project} Lambda Function"
}

我正在尝试使用一个 lambda 资源 block 来创建 2 个 lambda 函数(因此使用 map 变量)

最佳答案

您的变量默认值不能动态。它们必须是静态值。因此,在您的情况下,与其使用 var.lambdas,不如使用 locals:

variable "lambdas" {
  type = map(string)
    default = {
    "lambda1_name" = "lambda_function1",
    "lambda2_name" = "lambda_function2"
  }
}

locals {
  lambdas = {for key, value in var.lambdas: "${key}-${local.global_suffix}" => value}
}

他们你会:'

resource "aws_lambda_function" "main" {
    for_each         = local.lambdas
    ....
}

关于amazon-web-services - map 变量中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71804994/

相关文章:

amazon-web-services - Terraform aws_s3_bucket_object 未由 archive_file 触发

amazon-web-services - terraform 中的字符串列表/元组在 IAM 策略资源中不起作用

VNET 中的 Azure 容器实例如何获取 FQDN

amazon-web-services - 使用 Terraform 设置 AWS Cognito 用户池的账户恢复首选项

rest - AWS API 网关 : API Key Limit

Terraform - 如何将 tfvars 与模块一起使用

amazon-web-services - Terraform中的相对路径

node.js - 在 AWS EC2 上安装 NPM

amazon-web-services - 有什么方法可以配置 Minio 服务器接受的签名版本吗?

amazon-web-services - 如何处理 CF 堆栈之外的参数更改?