はじめに
Cloudformationでカスタムリソースを使用していた時に、エラーが発生しました。
調査をしていると、LambdaをVPCLambdaに変更したことが影響しているとわかり、
AWS公式ドキュメント等を見ながら対処しました。
その時のエラーや対処法を残します。
発生したエラー
カスタムリソースから呼び出したLambdaでは、
応答を返却する為のcfn-responseモジュールから403エラーが返却。
また、Cloudformationの画面では、
CloudformationスタックのステータスがUPDATE_IN_PROGRESSのまま一時間スタック。
これは、CloudformationがLambdaからの応答をタイムアウトまで待機しつづける為に起こります。
一時間経過すると、ステータスがUPDATE_ROLLBACK_FAILLEDとなります。
原因
VPCLambdaからS3へアクセスする道が無かった為。
Cloudformationのカスタムリソースでは、応答をモニタリングするために
S3バケットが各リージョンに用意されており、S3バケットを介してやり取りしています。
その為、VPCLambdaがCloudformationにレスポンスを返却する際にS3を介するわけなのですが、
VPCからS3への道が無かった為に応答が届きませんでした。
対処法
S3用VPCエンドポイントのポリシーに、カスタムリソース用のS3バケットを追加し許可する。
"arn:aws:s3:::cloudformation-custom-resource-response-region"
regionは使用しているリージョンに変更します。
補足
Lambdaの変数eventの内容を確認すると、
Cloudformationから渡されたパラメータが格納されています。
この中には、ResponseURLというパラメータが含まれておりここにS3の情報が入っています。
おわりに
エラーが出て初めて、カスタムリソースがS3を使用していることを認識。
カスタムリソースの何とかして動かしてます感すごい。