【发布时间】:2022-03-05 02:41:21
【问题描述】:
我有一个 lambda,我在其中传递一个列表以从中获取属性。列表 ENV_LIST 有超过 1 个元素。当我尝试运行一个 terraform 计划时,它似乎在抱怨变量 ENV_LIST。我已将它指定为我的 variables.tf 文件中的一个列表,并在我的 lamnda.tf 中引用它,但它仍然在抱怨。
Error: aws_lambda_function.lambda_function: environment.0.variables (ENV_LIST): '' expected type 'string', got unconvertible type '[]interface {}'
lambda.tf
environment {
variables = {
DB_NAME_LIST = "${var.db_name_list}"
ENV_LIST = "${var.env_list}"
}
}
变量.tf
variable "db_name_list" {
type = "list"
}
variable "env_list" {
type = "list"
}
【问题讨论】:
-
lambda 函数中的环境变量必须是字符串。从您的列表中创建一个逗号分隔的字符串并使用它。
-
env_list 正在引用一个 json 文件,该文件是其中的一个变量。它是一个逗号分隔的列表,如下所示: "env_list": ["pp3", "pp4", "pn1"]
-
您应该在问题中显示所有相关代码,包括
var.env_list和var.db_name_list的定义。如果您想将 Terraform 列表转换为单个字符串,您可能需要使用 Terraformjoin函数 terraform.io/docs/language/functions/join.html -
所以我需要将我的列表转换为单个字符串:ENV_LIST = join("," , "${var.env_list}") @MarkB
-
Lambda 函数仅采用字符串形式的环境变量。你的最终目标是什么?您想将每个值作为单独的环境变量传递给 Lambda 函数,还是要将它们全部作为单个字符串传递,然后将该字符串解析回 Lambda 函数内的列表?您应该在最初的问题中包含所需的结果。
标签: python amazon-web-services aws-lambda terraform