Serverless Frameworkを使ってLambda関数をAWS上に展開している環境。
ある検証のためにAWS管理画面上からLambda関数を消したのだが、再度デプロイを試みようとすると、
$ sls deploy --stage dev -v
...(snipped)...
Serverless Error ---------------------------------------
An error occurred: MyLambdaFunction - Function not found: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:my-lambda-function-myLambdaFunction.
といった具合に、エラーが出て該当のLambdaのデプロイができなくなった。
困った。
原因
Serverless Framework は Cloud Formation を使って対象リソースの管理をしているのだが、手動で消してしまったために同期などの不整合が起きていると思われる。
解決方法
似たような症状での議論が、 https://github.com/serverless/serverless/issues/3050 で展開されており、参考になった。
なお、実施するとAPI Gateway のエンドポイントが変わるので、注意。
方法1:Cloud Formation のスタックを作り直す
Serverless フレームワークが作った既存のCloudFormationスタックを削除し、デプロイし直して作り直す方法。こちらの方が言っている内容である。
- API Gatewayの「カスタムドメイン名」設定で、対象のLambdaがベースパスマッピングされているならば、そのパスを削除する。(編集→🗑 )
- S3のデプロイ用のS3バケットも削除する。
- Cloud Formation で、対象のスタックを削除する。
- コンソールから
sls deploy
を実行してデプロイしなおす。 - 1.でマッピングされていたならば、新しい API でマッピングしなおす。
方法2:sls remove する。
こちらの方が言っている方法だが、先に上の方法を試していたので、残念検証していない。参考掲載まで。