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-filepackaged-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-namestack-name
51,200 バイトを超えるテンプレートをデプロイする場合は、次の例のように、--s3-bucket
オプションを指定した状態で deploy コマンドを使用し、テンプレートを S3 にアップロードします。
aws cloudformation deploy \ --template-file
packaged-template.json
\ --stack-namestack-name
\ --s3-bucketamzn-s3-demo-bucket
注記
package コマンドを使用してローカルアーティファクトをアップロードする別の例については、「ネストされたスタックを使用してテンプレートを再利用可能な部分に分割する」を参照してください。