【问题标题】:Terraform complaining about list being used in lambdaTerraform 抱怨 lambda 中使用了列表
【发布时间】: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_listvar.db_name_list 的定义。如果您想将 Terraform 列表转换为单个字符串,您可能需要使用 Terraform join 函数 terraform.io/docs/language/functions/join.html
  • 所以我需要将我的列表转换为单个字符串:ENV_LIST = join("," , "${var.env_list}") @MarkB
  • Lambda 函数仅采用字符串形式的环境变量。你的最终目标是什么?您想将每个值作为单独的环境变量传递给 Lambda 函数,还是要将它们全部作为单个字符串传递,然后将该字符串解析回 Lambda 函数内的列表?您应该在最初的问题中包含所需的结果。

标签: python amazon-web-services aws-lambda terraform


【解决方案1】:
variable "db_names" {
  type        = list(string)
  description = "db_names"
}

resource "aws_lambda_function" "function" {
  function_name    = "${var.name_prefix}-function${local.name_suffix}"
  description      = "Function"
  filename         = var.filename
  source_code_hash = var.source_code_hash
  runtime          = "nodejs14.x"
  handler          = "index.handler"
  timeout          = var.timeout
  memory_size      = var.memory_size
  role             = var.lambda_role_arn
  environment {
    variables = {
      DB_NAMES       = join(",", var.db_names)
    }
  }
}

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 2013-01-16
    • 2019-05-17
    • 1970-01-01
    • 2020-04-28
    • 2022-01-10
    • 2012-01-28
    • 2011-11-14
    相关资源
    最近更新 更多