
AWS CDK でデプロイした Lambda 関数を以前のコードに戻したいです。以前のアセットはどこに残っていますか
困っていること
AWS Cloud Development Kit(AWS CDK)で、Lambda 関数を管理しています。Lambda 関数のコードは、手元のフォルダをアセットとして渡しています(Code.fromAsset)。
新しいコードをデプロイした後に不具合が見つかったので、1 つ前のコードに戻したいです。
どう対応すればいいの?
以前のコードのアセットは、ブートストラップで作られた Amazon Simple Storage Service(Amazon S3)のバケットに、中身のハッシュを名前にして残ります。ブートストラップは、cdk bootstrap でデプロイに使う S3 バケットなどを先に作る作業です。
ただし cdk gc --unstable=gc を既定のオプションのまま実行し、確認のプロンプトで削除を承認すると、アセットは消えます。消えるのは、同じ環境のテンプレートから参照されておらず、作成から 1 日を超えたものです。
AWS CDK CLI はまずアセットを準備し、Amazon S3 バケットまたは Amazon ECR リポジトリに公開します。(S3 バケットまたはリポジトリはブートストラップ中に作成されます)。
なお、既定のブートストラップでは、S3 バケットの名前は cdk-hnb659fds-assets-<アカウント ID>-<リージョン> です。
S3 バケットにアセットが残っているかに関わらず戻すには、Git などで以前のソースに戻して cdk deploy し直してください。すぐに切り戻したい場合に備えるなら、Lambda のバージョンとエイリアスを使ってください。
確認してみた
2026 年 10 月 22 日に検証用 AWS アカウントの東京リージョンで確認しました。コード v1 をデプロイし、v2 に変えてもう一度デプロイすると、S3 バケットには v1 と v2 の 2 つの .zip が残りました。名前は、手元の cdk.out フォルダの asset.<ハッシュ> と同じハッシュでした。

2 つの .zip のうち、最終更新日時が 05:24:37 のものが v1 のアセットです。v2 をデプロイした後も残っています。
以前のコードのアセットも、cdk gc の対象になります。
For Amazon Simple Storage Service (Amazon S3) assets, the CDK CLI will check existing AWS CloudFormation templates in the same environment to see if they are referenced. If not referenced, they will be considered unused and eligible for garbage collection actions.
既定のブートストラップテンプレートのバケットは、バージョニングが有効です。
新しい cdk gc コマンドではブートストラップバケット内のオブジェクトを削除する機能が導入されるため、この新しい動作により、削除されたオブジェクトは 365 日ではなく 30 日間ブートストラップバケットに残るようになります。
検証に使った S3 バケットは、ブートストラップテンプレートのバージョン 32 で作られていました。上の引用は、バージョン 24 で入った変更の説明で、バージョン 32 にも入っています。
このバケットには、CleanupOldVersions というライフサイクルルールがありました。古くなったバージョン(非現行バージョン)を、30 日後に完全に削除するルールです(NoncurrentVersionExpiration の NoncurrentDays が 30)。下の画面の一覧には、この 30 日は表示されません。

「最新バージョン…」の列は「-」なので、今あるアセットはこのルールでは消えません。
戻し方
次の順で戻します。
- Git で、Lambda 関数のコードを以前のコミットの状態に戻します(
git revertなど)。 cdk deployで、戻したソースから作ったアセットで関数を更新します。
戻した後は、Lambda 関数を呼び出し、以前のコードの結果が返ることを確認してください。
次から早く切り戻せるように、Lambda 関数のバージョンとエイリアスを CDK で作り、呼び出し元はエイリアスを使う形にしてください。バージョンは、発行したときのコードとほとんどの設定を固定したものです。エイリアスは、どのバージョンを指すかを付け替えられる名前です。
以前のバージョンを残すため、currentVersionOptions に removalPolicy: RemovalPolicy.RETAIN を指定します。問題が出たら、エイリアスを以前のバージョンに向け直し、エイリアスを呼び出して確認します。
removalPolicy の既定は RemovalPolicy.DESTROY です。下記 VersionOptions についての参考資料には、次のように記述がございます。
Whether to retain old versions of this function when a new version is created.
注意点
- 2026 年 10 月 23 日時点の資料では、
cdk gcには--unstable=gcの指定が要ります。戻す可能性があるうちは、--rollback-buffer-days=30のように日数を指定してください。未使用と判定されたアセットにはまず日付のタグが付き、タグ付けから指定した日数を過ぎたものだけが削除されます。 - エイリアスを AWS CLI やコンソールで付け替えると、CDK のテンプレートとずれます。切り戻しが済んだら CDK のコードも合わせてください。
currentVersionで作るバージョンのremovalPolicyは、指定しないと既定のRemovalPolicy.DESTROYになります。この場合、コードを変えてデプロイすると以前のバージョンは削除されます。cdk synthで出したテンプレートでも、AWS::Lambda::VersionにDeletionPolicyとUpdateReplacePolicyは付いていませんでした。








