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

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

AWS CLI を使用して、CloudFormation テンプレートで参照されるローカルアーティファクトを Amazon S3 バケットにアップロードできます。ローカルアーティファクトは、テンプレートで参照するファイルです。ファイルを手動で S3 バケットにアップロードしてからテンプレートにその場所を追加する代わりに、ローカルアーティファクトをテンプレート内で指定し、package コマンドを使用してすばやくアップロードできます。

ローカルアーティファクトは、package コマンドが Amazon S3 にアップロードしたファイルまたはフォルダへのパスです。例えば、アーティファクトは AWS Lambda 関数のソースコードへのローカルパスであったり、Amazon API Gateway REST API の OpenAPI ファイルであったりします。

package コマンドを使用する場合:

  • ファイルを指定する場合、コマンドはそれを S3 バケットに直接アップロードします。

  • フォルダを指定すると、コマンドはフォルダの .zip ファイルを作成し、その .zip ファイルをアップロードします。

  • パスを指定しない場合、コマンドは作業ディレクトリの .zip ファイルを作成し、アップロードします。

絶対パスまたは相対パスを指定できます。相対パスはテンプレートの場所からの相対です。

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

注記

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

前提条件

開始する前に、既存の Amazon S3 バケットが必要です。

ローカルアーティファクトを使用してテンプレートをパッケージ化してデプロイする

以下のテンプレートは 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 ファイルを作成し、指定されたバケットのルートにアップロードします。

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 の場所に置き換えます。.zip ファイルは、フォルダ名自体を使用するのではなく、フォルダの内容の MD5 チェックサムを使用して名前が付けられます。

作成されるテンプレート

{ "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" } } } }

テンプレートのアーティファクトをパッケージ化したら、deploy コマンドを使用して処理されたテンプレートをデプロイします。

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name

51,200 バイトを超えるテンプレートをデプロイする場合は、次の例のように、--s3-bucket オプションを指定した状態で deploy コマンドを使用し、テンプレートを S3 にアップロードします。

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name \ --s3-bucket amzn-s3-demo-bucket
注記

package コマンドを使用してローカルアーティファクトをアップロードする別の例については、「ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する」を参照してください。