我的 lambda 函数在调用后没有返回任何响应

问题描述 投票:0回答:1

我正在尝试从在我的计算机上本地运行的应用程序调用 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)
python amazon-web-services aws-lambda boto3 botocore
1个回答
0
投票

您的代码看起来没问题,但唯一可能出现问题的可能是您的有效负载的格式。如果您看到 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"})

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.