メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

S3 バケットへのローカルアーティファクトのアップロード

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

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

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

ローカルアーティファクトは、package コマンドがサポートするリソースプロパティにのみ使用できます。このコマンドおよびサポートされるリソースプロパティの詳細については、AWS Command Line Interface Referenceaws cloudformation package コマンドを参照してください。

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

元のテンプレート

Copy
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs4.3 CodeUri: /home/user/code/lambdafunction

次のコマンドは、関数のソースコードフォルダを含む .zip ファイルを作成してから、my-bucket バケットのルートフォルダにその .zip ファイルをアップロードします。

パッケージコマンド

Copy
aws cloudformation package --template /path_to_template/template.json --s3-bucket mybucket --output json > packaged-template.json

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

作成されるテンプレート

Copy
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: MyFunction: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs4.3 CodeUri: s3://mybucket/lambdafunction.zip