首页 > 解决方案 > 部署后通过 terraform 调用 lambda 时出错。在 Cloudwatch 中找不到任何日志

问题描述

我在 python 中的 lambda 文件如下所示: greet_lambda.py

import os

def lambda_handler(event, context):
    return "{} from Lambda!".format(os.environ['greeting'])

我的main.tf 文件已成功部署terraform apply,如下所示:

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
}

在通过以下命令调用 lambda greet_lambda.py 时,我在output.txt文件中收到一个错误,并且在 cloudwatch 中没有生成日志

$aws lambda invoke --region=us-east-1 --function-name=greet_lambda output.txt

错误output.txt

{"errorMessage": "'greeting'", "errorType": "KeyError", "stackTrace": ["  File \"/var/task/greet_lambda.py\", line 4, in lambda_handler\n    return \"{} from Lambda!\".format(os.environ['greeting'])\n", "  File \"/var/lang/lib/python3.7/os.py\", line 681, in __getitem__\n    raise KeyError(key) from None\n"]}

请告知我哪里出错了。

标签: pythonamazon-web-servicesaws-lambdaterraformterraform-provider-aws

解决方案


os.environ['greeting']尝试获取 lambda名为greeting. 您test_lambda没有使用environment定义任何此类变量。

不知道你想用你的 lambda 代码实现什么,但也许你在追求:

import os

def lambda_handler(event, context):
    return "{} from Lambda!".format('greeting')

更新

要添加托管策略,请使用managed_policy_arns

resource "aws_iam_role" "lambda_role" {
    name = "lambda_role"

    managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]

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

推荐阅读