AWS CLIのCloudformationのParametersの値に外部ファイルを与える方法

AWS CLIのCloudformationのParametersの値に外部ファイルを与える方法
目次

AWSリソースのコード管理を行うために、AWS Cloudformationを使うことがしばしばあります。 特にAWS AmplifyではAWSリソースの管理をCloudformationに強制されるため、Amplifyの利用を機にCloudformationを触る機会が増えた人も多いのではないでしょうか。私もそうでした。 今回はAWS CLIの aws cloudformation コマンドを使う時の小ネタを紹介します。

Parametersが肥大化しCLIの実行がつらくなる

  • デプロイするステージを変えたい
  • 一つのCloudformation Templateを雛形にして複数のAWSリソース群を生成したい

等、Cloudformation Templateが成長するにつれ、Parametersブロックの定義が増えていきます。

具体的には、以下のようにCloudformation TemplateにParameter定義を追加することになり、

 1AWSTemplateFormatVersion: "2010-09-09"
 2Description : "Cloudformation template example"
 3
 4Parameters:
 5  ParamA:
 6    Type: String
 7  ParamB:
 8    Type: String
 9  ParamC:
10    Type: String
11
12Resources:
13(以下略)

Cloudformation TemplateをAWS CLIから以下のようにデプロイします。

1aws cloudformation deploy \
2  --template-file ${Templateファイル名} \
3  --stack-name ${スタック名} \
4  --parameter-overrides ParamA=foo ParamB=bar ParamC=baz

この --parameter-overrides オプションは Key=Value 形式で指定する必要があります。 全てのParameterのペアを直接書いてコマンドを実行することは現実的ではありません。

パラメータを外部ファイルに定義する

そのため、このParamtersのペアを外部ファイルに定義しましょう。 以下のような parameters.properties ファイルを作成し、Key-Valueペアを定義していきます。

1ParamA=foo
2ParamB=bar
3ParamC=baz

--parameter-overrides オプション部分は parameters.properties ファイルの定義を流し込むように書き換えてあげれば良いです。

1aws cloudformation deploy \
2  --template-file ${Templateファイル名} \
3  --stack-name ${スタック名} \
4  --parameter-overrides `cat parameters.properties`

参考にさせていただいたサイト