我正在尝试从在我的计算机上本地运行的应用程序调用 lambda 函数。这个 lambda 函数(docker 镜像容器)通常需要几分钟来执行(5-6 分钟),这是正常的,当我从 aws 控制台测试它并获得有效负载响应时,它运行得非常好。然而,当我尝试从本地应用程序调用它时,我没有收到任何响应,尽管在 cloudwatch 日志中看到 lambda 函数已完美执行,状态代码为 200。
我不知道为什么我的本地应用程序无法获取有效负载响应。每次都会超时。我将 aws lambda 函数的超时设置为 15 分钟,所以这已经足够了,无论如何,这不是超时问题,因为我的函数执行得很好,它只是不向我的本地应用程序发送响应。
Read timeout on endpoint URL: "https://lambda.eu-west-1.amazonaws.com/xxxxxx/functions/xxxxxxxxxxxx/invocations"
我创建了另一个用于测试目的的基本 lambda 函数,我的本地应用程序可以毫无问题地获取有效负载响应。
我做错了什么吗?
def handler(event=None, context=None):
try:
config = botocore.config.Config(read_timeout=900, connect_timeout=900, retries={'max_attempts': 0})
client = boto3.client('lambda', config=config)
print("let's go")
response = client.invoke(
FunctionName='my_lambda_function',
InvocationType='RequestResponse',
Payload='{ "test": "true" }'
)
payload = json.loads(response['Payload'].read())
print(payload)
return {
"statusCode": 200,
"body": json.dumps(
{
"message": "ok",
}
),
}
except Exception as e:
print(e)
您的代码看起来没问题,但唯一可能出现问题的可能是您的有效负载的格式。如果您看到 boto3 文档,它会显示
response = client.invoke(
FunctionName='string',
InvocationType='Event'|'RequestResponse'|'DryRun',
LogType='None'|'Tail',
ClientContext='string',
Payload=b'bytes'|file,
Qualifier='string'
)
所以我认为你应该将你的有效负载传递为
Payload=json.dumps({"test": "true"})
希望这有帮助。