传递列表(字符串)作为地形变量



在定义我的模块时,我这样做:

module "activate_alarms" {
source = "../_modules/aws/.."
config = module.config
alarm_arns = ["arn:aws:cloudwatch:eu-central-123:test-alarm"]
}
variable "alarm_arns" {
type = list(string)
}
resource "aws_lambda_function" "processing_lambda" {
filename         = data.archive_file.lambda_zip.output_path
function_name    = local.processing_lambda_name
handler          = "enable_disable_alarms.lambda_handler"
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
role             = aws_iam_role.lambda_role.arn
runtime = "python3.9"
tags = var.config.tags
environment {
variables = {
alarm_arns = local.alarm_arns
}
}
}

但是,我得到一个错误:

Error: Incorrect attribute value type
│ 
│   on ../_modules/aws/enable_disable_alarms/processing_lambda.tf line 20, in resource "aws_lambda_function" "processing_lambda":
│   20:     variables = {
│   23:       alarm_arns = local.alarm_arns
│   30:     }
│     ├────────────────
│     │ local.alarm_arns is a list of string, known only after apply
│ 
│ Inappropriate value for attribute "variables": element "alarm_arns": string required.

传递字符串列表的正确方法是什么?

编辑:

locals {
config = var.config
alarm_arns = "${var.alarm_arns}"
}

不能将list(string)直接作为environment传递给lambda。你必须先把它变成字符串,例如:

environment {
variables = {
alarm_arns = jsonencode(var.alarm_arns)
}
}

然后在你的lambda中,你必须根据你的编程语言将它转换回字符串列表。

最新更新