AWS Lambda 无故返回内部服务器错误
AWS Lambda returning internal server error for no reason
我有一个 AWS Lambda 函数,当我 运行 它时会产生 {"message":"Internal Server Error"}
。使用 CloudWatch Logs 和 print 语句,我可以确认代码在执行 returns 之前没有错误。这是我的代码:
def lambda_handler(event, context):
table_name = "<redacted>"
bucket_name = "<redacted>"
session = boto3.Session(
aws_access_key_id="<redacted>",
aws_secret_access_key="<redacted>",
)
if "body" in event and event["body"]:
req_json = json.loads(event["body"])
uuids = process(req_json, table_name, bucket_name,
session, ("127.0.0.1", 8000), "site/")
print("success", uuids) # this code still executes sucessfully
return http_response(200, "Success", uuids)
else:
return http_response(400, "No request body")
也没有超时,因为此代码在 ~10 秒内 运行s,我的超时设置为 2 分钟。我不知道为什么我没有得到正确的 http 响应。如果有人能告诉我原因或知道问题可能是什么,我将不胜感激。
我没有你的http_response
方法。但下面的代码适用于 lambda。
import json
def lambda_handler(event, context):
if "body" in event and event["body"]:
req_json = json.loads(event["body"])
print("success") # this code still executes sucessfully
return {
'statusCode': 200,
'body': json.dumps(req_json)
}
else:
return {
'statusCode': 400,
'body': json.dumps({'message': 'No request body'})
}
我还注意到您直接将 AWS 凭据添加到 lambda 代码中。您可以为 lambda 使用 IAM 角色并将所需的权限分配给该角色。
https://aws.amazon.com/blogs/security/how-to-create-an-aws-iam-policy-to-grant-aws-lambda-access-to-an-amazon-dynamodb-table/
我有一个 AWS Lambda 函数,当我 运行 它时会产生 {"message":"Internal Server Error"}
。使用 CloudWatch Logs 和 print 语句,我可以确认代码在执行 returns 之前没有错误。这是我的代码:
def lambda_handler(event, context):
table_name = "<redacted>"
bucket_name = "<redacted>"
session = boto3.Session(
aws_access_key_id="<redacted>",
aws_secret_access_key="<redacted>",
)
if "body" in event and event["body"]:
req_json = json.loads(event["body"])
uuids = process(req_json, table_name, bucket_name,
session, ("127.0.0.1", 8000), "site/")
print("success", uuids) # this code still executes sucessfully
return http_response(200, "Success", uuids)
else:
return http_response(400, "No request body")
也没有超时,因为此代码在 ~10 秒内 运行s,我的超时设置为 2 分钟。我不知道为什么我没有得到正确的 http 响应。如果有人能告诉我原因或知道问题可能是什么,我将不胜感激。
我没有你的http_response
方法。但下面的代码适用于 lambda。
import json
def lambda_handler(event, context):
if "body" in event and event["body"]:
req_json = json.loads(event["body"])
print("success") # this code still executes sucessfully
return {
'statusCode': 200,
'body': json.dumps(req_json)
}
else:
return {
'statusCode': 400,
'body': json.dumps({'message': 'No request body'})
}
我还注意到您直接将 AWS 凭据添加到 lambda 代码中。您可以为 lambda 使用 IAM 角色并将所需的权限分配给该角色。 https://aws.amazon.com/blogs/security/how-to-create-an-aws-iam-policy-to-grant-aws-lambda-access-to-an-amazon-dynamodb-table/