今回起きたこと
cdkバージョンアップ対応のため「aws-cdk」と「aws-cdk-lib」を更新しました。
その後、cdk diffで差分を取ったところ下記のような差分が出ておりました。
初見の差分だったため、今回は「s3key」と「asset:path」について調べてみました。
Resources
[~] AWS::Lambda::Function Custom::ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
├─ [~] Code
│ └─ [~] .S3Key:
│ ├─ [-] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.zip
│ └─ [+] YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY.zip
└─ [~] Metadata
└─ [~] .aws:asset:path:
├─ [-] asset.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
└─ [+] asset.YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
結論
CDKではビルド時にLambda のコード(アセット)のハッシュ値を計算して、差分の有無を判断している。
CDKのバージョンを変更すると、一部パッケージでアセットのハッシュ値計算方法が変わるため、差分が出てしまっていた。
調べてわかったこと
.S3keyとは
Cloudformation(CDKも)からLambdaを作成する際にソースコードをテンプレート外に置く場合に使用。
zip形式であらかじめ、S3バケットに配置しておく。
- S3Bucket:S3のバケット名
- S3key:S3バケット内でのオブジェクトのパス(暗号化鍵だと思っていた。。。)
asset:pathとは
assetとは、「本体のソースコードとは別にアプリで必要なもの」のこと。
assetpathとは、そのまま「アセットが格納されている場所のパス」のこと。
AWS CDK のアセットは以下の2種類がある
- ファイルアセット
- JSONファイルやLambdaコード一式を含むディレクトリなど
- イメージアセット
- DockerfileやDockerイメージのビルドに必要なファイル一式を含むディレクトリ
assetが格納される場所を「アセットストア」という。
- ファイルアセット
- S3
- イメージアセット
- ECR
参考
[DevAx::connect番外編] CDK実践勉強会の資料およびQ&A公開
S3Key of bundled lambda asset changes on every run in Github Actions workflow
CloudFormationでAWS Lambdaを作成・更新する際のベストプラクティス
もっとじっくり AWS CDK のコンセプト