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

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 CLI コマンド リファレンスの「aws cloudformation 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"
      }
    }
  }
}

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

パッケージコマンド

aws cloudformation package \ --template /path_to_template/template.json \ --s3-bucket mybucket \ --output-template-file packaged-template.json \ --use-json

このコマンドは、生成したテンプレートを --output オプションで指定されたパスに保存します。このコマンドは、次に示す例のように、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://mybucket/<md5 checksum>"
      }
    }
  }
}