【问题标题】:Handle API Gateway Timeout when the Lamda function requires more than 30 seconds to complete当 Lambda 函数需要超过 30 秒才能完成时处理 API Gateway Timeout
【发布时间】:2020-12-05 17:54:44
【问题描述】:

需要你的帮助!从 API Gateway,我试图触发 Lambda 函数。这个 Lambda 函数将创建一个 CloudFormation 堆栈,而该堆栈又将部署一个 EC2 实例。下面是启动堆栈创建并等待堆栈创建状态设置完成的部分代码,然后才能返回响应。问题是 API Gateway 的硬编码超时值为 30 秒,并且堆栈创建在 30 秒之前未完成。在这种情况下,API 请求只是超时返回一个内部服务器错误。我该如何处理?

# Create the CloudFormation Stack
StackID = cf_client.create_stack(
    StackName=stackname,
    TemplateURL='https://s3-bucket/template1.template',
    Capabilities=['CAPABILITY_NAMED_IAM']
)
waiter = cf_client.get_waiter('stack_create_complete')
waiter.wait(
    StackName=stackname,
    WaiterConfig={
        'Delay' : 5,
        'MaxAttempts' : 50
    }
)

【问题讨论】:

    标签: python amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    也许代替 Lambda 直接创建 CloudFormation 堆栈,它可以触发一个 step function,其中包含一个仅用于创建 CloudFormation 堆栈的 Lambda 函数。原函数在运行start_execution函数后返回时可以返回执行id。

    这有 2 个好处,第一个是它会更快(一旦开始执行 step 函数,SDK 就会返回响应,所以这会更快),以及对失败的弹性(你有重试或通知错误的选项)。

    或者,如果您希望请求本身在来自客户端的 HTTP 请求中执行此操作,则需要查看为 traffic to your Lambda 提供服务的 ALB 而不是 API 网关(具有最大截止值)。 ALB 可以支持longer timeout of upto 4000 seconds

    【讨论】:

    • 谢谢!我决定使用两个 Lambda 函数,从 API 网关调用一个,然后调用另一个实际完成工作的函数。
    • 没问题,很高兴我能帮上忙 :)
    猜你喜欢
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2012-02-01
    • 2017-03-12
    • 2023-03-27
    • 2011-03-25
    相关资源
    最近更新 更多