ApiGateway has 500 error when Lambda is updating

0

I am seeing a rare race condition. Sometimes, if I update my image-based Lambda to have a new image, the ApiGateway api that is triggering the Lambda returns the following error:

(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

Here is how I'm updating the Lambda which causes the race condition to occur:

# publish the new docker image to the function
aws lambda update-function-code --publish --function-name "$name" --image-uri "$image"
# update my alias to the new published version
aws lambda update-alias --name "$stage" --function-name "$name" --function-version "$version"

I must be doing something wrong, because if a Lambda image or alias can't be updated atomically, that is a deal-breaker for reliable deployments.

1 回答
2
已接受的回答

Lambda functions can be in one of several states. This happens during function creation and update.

I assume your API is configured to invoke a specific lambda alias. It seems you are moving your alias before the new lambda version is in the Active state. You should be update the alias only after the function gets into the Active state.

profile pictureAWS
专家
Uri
已回答 2 年前
  • Yes, that would make sense. I have added the following commands before I update the alias pointer, and it seems to clear up the issue:

    aws lambda wait function-updated --function-name "$name"
    aws lambda wait function-active --function-name "$name"
    

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

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

回答问题的准则