收到错误:创建 Lambda 函数时出错 (1):ValidationException 状态代码:400

rai*_*pak 5 amazon-web-services aws-lambda terraform

我正在尝试 Udacity 的 AWS 云架构师纳米学位项目中的一个项目。我正在编写代码以使用 Terraform 部署 AWS Lambda 函数。我相信我应该用作greet_lambda.py通过 terraform 部署的 lambda 函数。文件如下所述,到目前为止已执行以下步骤:

问候_lambda.py

import os
def lambda_handler(event, context):
    return "{} from Lambda!".format(os.environ['greeting'])
Run Code Online (Sandbox Code Playgroud)

压缩 lambda 文件:

$zip ../greet_lambda.zip greet_lambda.py
Run Code Online (Sandbox Code Playgroud)

在S3中创建了一个bucket:

$aws s3api create-bucket --bucket=dirai-terraform-lambda --region=us-east-1
Run Code Online (Sandbox Code Playgroud)

将 zip 文件上传到 S3:

$aws s3 cp greet_lambda.zip s3://dirai-terraform-lambda/v1.0.0/greet_lambda.zip
Run Code Online (Sandbox Code Playgroud)

main.tf 文件:

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}

provider "aws" {
   region = "us-east-1"
}


resource "aws_iam_role" "lambda_role" {
    name = "lambda_role"
    assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

resource "aws_lambda_function" "test_lambda" {
   function_name = "greet_lambda"
   s3_bucket = "dirai-terraform-lambda"
   s3_key    = "v1.0.0/greet_lambda.zip"
   handler = "greet_lambda.lambda_handler"
   runtime = "python3.7"
   role = "aws_iam_role.lambda_role.arn" 
}
Run Code Online (Sandbox Code Playgroud)

我在 $terraform apply 上收到以下错误:

Error: error creating Lambda Function (1): ValidationException: 
    status code: 400, request id: e6289eb7-40f5-4cf2-ba0a-e8b5ae656466

  on main.tf line 33, in resource "aws_lambda_function" "test_lambda":
  33: resource "aws_lambda_function" "test_lambda" {
Run Code Online (Sandbox Code Playgroud)

请帮助我,我可能做错了什么。lambda 已成功导出到 S3。但 terraform 应用失败。

Mar*_*cin 9

你的role将是文字字符串 "aws_iam_role.greet_lambda.arn"。应该是(没有引号):

role = aws_iam_role.greet_lambda.arn 
Run Code Online (Sandbox Code Playgroud)