0

1 个 lambda 函数的工作片段。Terraform 版本 0.14.9。

resource "aws_lambda_function" "main" {
     function_name = var.lambda_name
     role          = aws_iam_role.lambda.arn
     handler       = "index.handler"
     runtime       = "nodejs12.x"
     filename      = "testlambda1.zip"
}
variable "lambda_name" {
  default = "testlambda1"
}

我是 terraform 的新手。我总共有 4 个 zip 格式的 lambda 函数。如何在 1 个资源块中提供所有这些。

resource "aws_lambda_function" "main" {
      function_name = var.lambda_name
      role          = aws_iam_role.lambda.arn
      handler       = "index.handler"
      runtime       = "nodejs12.x"
      filename      = var.filename
}
variable "lambda_name" {
   type    = list(string)
   default = [
             "testlambda1",
             "testlambda2",
             "testlambda3",
             "testlambda4"
             ]
}
variable "filename" {
   type    = list(string)
   default = [
             "testlambda1.zip",
             "testlambda2.zip",
             "testlambda3.zip",
             "testlambda4.zip"
             ]
}

我尝试了这个,但最终出现了错误。


Error: Incorrect attribute value type

  on main-lambda.tf line 6, in resource "aws_lambda_function" "main":
   6:   function_name = var.lambda_name

Inappropriate value for attribute "function_name": string required.


Error: Incorrect attribute value type

  on main-lambda.tf line 10, in resource "aws_lambda_function" "main":
  10:   filename      = var.filename

Inappropriate value for attribute "filename": string required.
4

1 回答 1

0

如果您希望单个资源块创建多个资源,则需要使用 Terraform for_each计算元参数。

例如:

resource "aws_lambda_function" "main" {
      count         = length(var.lambda_name)
      function_name = var.lambda_name[count.index]
      role          = aws_iam_role.lambda.arn
      handler       = "index.handler"
      runtime       = "nodejs12.x"
      filename      = var.filename[count.index]
}

variable "lambda_name" {
   type    = list(string)
   default = [
             "testlambda1",
             "testlambda2",
             "testlambda3",
             "testlambda4"
             ]
}

variable "filename" {
   type    = list(string)
   default = [
             "testlambda1.zip",
             "testlambda2.zip",
             "testlambda3.zip",
             "testlambda4.zip"
             ]
}

或将您的变量转换为地图,并使用for_each

resource "aws_lambda_function" "main" {
      for_each      = var.lambdas
      function_name = each.key
      role          = aws_iam_role.lambda.arn
      handler       = "index.handler"
      runtime       = "nodejs12.x"
      filename      = each.value
}


variable "lambdas" {
   type    = map(string)
   default = {
             "testlambda1" = "testlambda1.zip",
             "testlambda2" = "testlambda2.zip",
             "testlambda3" = "testlambda3.zip",
             "testlambda4" = "testlambda4.zip"
             }
}
于 2021-10-23T13:42:30.903 回答