ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【AWS CDK】Assetでつまずいたこと

この記事を共有する

目次

はじめに

こんにちは、パーソル&サーバーワークスのEndoです。
AWS CDK で AWS Lambda(以下、Lambda)を作成・更新する際に、Lambda のコードサイズが大きくなりすぎて cdk deploy 時にエラーとなりました。
この場合、Amazon S3(以下、S3)にソースコードを zip 化して配置することでエラー回避ができるのですが、実装の際につまずいたポイントがあったため、本記事に内容をまとめたいと思います。

Asset について

AWS CDK には Asset と呼ばれる機能が存在します。

アセットは、AWS CDK ライブラリやアプリケーションにバンドルできるローカルファイル、ディレクトリ、または Docker イメージです。例えば、アセットは、AWS Lambda 関数のハンドラーコードを含むディレクトリである場合があります。アセットは、アプリが動作するために必要なアーティファクトを表すことができます。

アセットと AWS CDK より引用

まとめると、Asset は、AWS CDK で使用するファイル( Lambda 関数コードや Dockerファイルなど)を AWS にアップロードして使う仕組み です。
Asset には以下のタイプが存在します。

  • Amazon S3 Asset:S3にアップロードするファイルやディレクトリ
  • Docker Image:Amazon ECR にアップロードする Docker イメージ

今回は S3 Asset を使用して Lambda 関数コードをアップロードしようと考えました。

つまずいたこと

前述の Asset の仕組みを使って Lambda のデプロイエラーを回避しようと考え、任意の S3 バケットを指定する形で cdk deploy を試みましたが、次のような仕様があり実現できませんでした。

Asset 先に指定できるバケットは cdk bootstrap で作成したバケットのみ

cdk bootstrap とは、AWS CDK が AWS 環境へリソースをデプロイするために必要なリソースを準備する処理のことです。
Asset で使用される S3 バケットは この cdk bootstrap で作成されたバケット(デフォルト値:cdk-{Qualifier}-assets-{Account-ID}-{Region})となります。

CDK アプリケーションを適切にデプロイするには、合成中に生成される CloudFormation テンプレートが、ブートストラップ中に作成されるリソースを正しく指定している必要があります。これらのリソースは、一般的にブートストラップリソースと呼ばれます。ブートストラップは、デプロイの実行とアプリケーションアセットの管理に AWS CDK が使用するリソースを AWS 環境に作成します。

AWS CDK ブートストラップをカスタマイズする より引用

公式ドキュメントにはきちんと記載されており、私が見落としてしまっていたため、デプロイエラーとなっていました。
任意の S3 バケット指定をやめることで、エラーが発生せず、正常にデプロイできました。

Custom Resource による回避が可能

Asset を使えない/使いたくない場合、今回の例では Lambda 関数用の zip ファイルを任意のバケットへ格納することが可能です。
この場合は、手動管理する、または独自に Custom Resource を作成し、ファイル更新時にアップロードするような自動更新の仕組みを実装する必要があります。

今回の例では、以下の処理を Custom Resource に組み込む必要があります。

  1. ソースコードの zip 化
  2. ファイルの変更検知(ハッシュ作成)
  3. S3 へのアップロード

Asset を使用する場合は、ソースコードが変更されたら次回デプロイ時に自動でファイルを更新してくれるため、手動での管理は別途開発などの手間がかかることをご留意ください。

おわりに

AWS CDK の仕様について、まだ理解できていないことが多いため、日々学習しながら使っていきたいと思います。
本記事がどなたかのご参考になれば幸いです。

関連記事

この記事は私が書きました

S.Endo

記事一覧

コーヒーインストラクター検定2級を所持しているエンジニアです。コーヒーを飲みながら仕事をしています。

S.Endo

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。