AWS CLI を使用してローカルアーティファクトを S3 バケットにアップロードする - AWS CloudFormation

AWS CLI を使用してローカルアーティファクトを S3 バケットにアップロードする

Amazon S3 の場所 (バケット名およびファイル名) を必要とする一部のリソースプロパティに、代わりにローカルのリファレンスを指定できます。例えば、AWS Lambda 関数のソースコードの S3 の場所や Amazon API Gateway REST API の OpenAPI (以前の Swagger) ファイルを指定できます。ファイルを手動で S3 バケットにアップロードし、テンプレートに場所を追加する代わりに、ローカルアーティファクトと呼ばれるローカルリファレンスをテンプレート内で指定し、package CLI コマンドを使用してすばやくアップロードできます。ローカルアーティファクトは、package コマンドが Amazon S3 にアップロードしたファイルまたはフォルダへのパスです。例えば、アーティファクトは AWS Lambda 関数のソースコードへのローカルパスであったり、Amazon API Gateway REST API の OpenAPI ファイルであったりします。

ファイルを指定する場合、コマンドはそれを S3 バケットに直接アップロードします。アーティファクトをアップロードしたら、コマンドはテンプレートのコピーを返します。その中で、ローカルアーティファクトへの参照は、コマンドがアーティファクトをアップロードした S3 の場所に置き換えられます。その後、返されたテンプレートを使用してスタックを作成または更新できます。

フォルダを指定すると、コマンドはフォルダの .zip ファイルを作成し、その .zip ファイルをアップロードします。パスを指定しない場合、コマンドは作業ディレクトリの .zip ファイルを作成し、アップロードします。絶対パスまたは相対パスを指定できます。相対パスはテンプレートの場所からの相対です。

ローカルアーティファクトは、package コマンドがサポートするリソースプロパティにのみ使用できます。このコマンドとサポートされているリソースプロパティのリストの詳細については、「AWS CLI コマンド リファレンス」の「package ドキュメント」を参照してください。

以下のテンプレートは Lambda 関数のソースコードのローカルアーティファクトを指定します。ソースコードはユーザーの /home/user/code/lambdafunction フォルダに保存されています。

元のテンプレート

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "/home/user/code/lambdafunction" } } } }

次の package コマンドは、まず関数のソースコードフォルダを記載した .zip ファイルを作成し、次に amzn-s3-demo-bucket バケットのルートフォルダにその .zip ファイルをアップロードします。

package コマンド

aws cloudformation package --s3-bucket amzn-s3-demo-bucket \ --template /path_to_template/template.json \ --output-template-file packaged-template.json \ --output json

このコマンドは、生成したテンプレートを --output-template-file オプションで指定されたパスに保存します。このコマンドは、次に示す例のように、Amazon S3 の場所であるアーティファクトを置き換えます。

作成されるテンプレート

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "s3://amzn-s3-demo-bucket/<md5 checksum>" } } } }