python - 部署后通过 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"]}
请告知我哪里出错了。
解决方案
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
}
推荐阅读
- javascript - 如何为多个 HTML 文件调用一个 JavaScript 文件?
- swift - Xcode Swift - WKWebView 实现
- typescript - 访问私有构造函数
- signals - 带 LimeSDR IQ 分路器相移的 GnuRadio
- vba - VBA中变量名的变量值
- javascript - 刷新计时器在达到 0 时显示文本,而不是继续负倒计时
- .net-core - Visual Studio 2019 中的 .NET Core - 桌面部署选项
- python - 如何在 Python 中创建范围列表?
- reactjs - 如何在 Muidialog 中禁用 MuiBackdrop(材料 UI 反应)
- java - 如何创建独立的 TestNG Maven 可执行文件