当 Lambda 更新时,ApiGateway 会出现500错误。

0

【以下的问题经过翻译处理】 我发现一个罕见的竞态条件。有时,如果我更新基于镜像的 Lambda 以具有新的镜像,则触发 Lambda 的 API Gateway api 将返回以下错误:

(f654758f-d377-4222-a4c3-766325f0de32) Lambda invocation failed with status: 409. Lambda request id: 1e69c921-26ce-4c4d-81ad-183264a08c59
(f654758f-d377-4222-a4c3-766325f0de32) Execution failed due to configuration error: The operation cannot be performed at this time. The function is currently in the following state: Pending
(f654758f-d377-4222-a4c3-766325f0de32) Method completed with status: 500

这是导致竞态条件发生的更新 Lambda 的方法:

# 将新的 Docker 镜像发布到函数
aws lambda update-function-code --publish --function-name "$name" --image-uri "$image"
# 将别名更新为新发布的版本
aws lambda update-alias --name "$stage" --function-name "$name" --function-version "$version"

我一定是做错了什么,因为如果无法原子性地更新 Lambda 镜像或别名,则无法可靠地部署。

profile picture
专家
已提问 6 个月前25 查看次数
1 回答
0

【以下的回答经过翻译处理】 Lambda函数可以处于多种状态之一(https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html)。这种情况发生在函数创建和更新期间。 我假设您的API已配置为调用特定的Lambda别名。似乎您正在移动别名,但新的Lambda版本尚未处于Active状态。您应该在函数进入Active状态后才更新别名。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则