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