CloudFormationのパラメータを配列型にする

前半は復習としてパラメータが文字列の書き方、後半が本記事の本題で配列型にする方法です。

パラメータが文字列の場合

テンプレートファイルに以下のように書くと aws cloudformation deploy 実行時にパラメータを渡すことができます。

# パラメータを受け入れる記述
Parameters:
  Foo:
    Type: String
    Default: defaultValue # --parameter-overrides がない場合のデフォルト値

# Resourcesの中にパラメータの値を埋め込む記述
Resources:
  ...:
  Properties:
    Aaa: !Ref Foo
    # または
    Aaa: !Sub ${Foo}
    # または、文字列の中に値を埋め込むには
    Aaa: !Sub aaa-${Foo}-bbb
    # または
    Aaa: !Sub
      - aaa-${f}-bbb
      - f: !Ref Foo
    # 上記記述が以下の記述と同等になる (--parameter-overrides Foo=fooValue の場合)
    Aaa: fooValue

パラメータを渡すには aws cloudformation deploy--parameter-overrides Foo=fooValue のようにコマンドラインパラメータを加えます。

$ aws cloudformation deploy --template-file template.yaml --stack-name xxxx --parameter-overrides Foo=fooValue

パラメータが配列の場合

CommaDelimitedList というTypeを使ってコンマ区切りで書きます。

# パラメータを受け入れる記述
Parameters:
  Foo:
    Type: CommaDelimitedList
    Default: default1,default2,default3 # --parameter-overrides がない場合のデフォルト値

# Resourcesの中にパラメータの値を埋め込む記述
Resources:
  ...:
  Properties:
    Aaa: !Ref Foo
    # 上記記述が以下の記述と同等になる (--parameter-overrides Foo=foo1,foo2,foo3 の場合)
    Aaa:
      - foo1
      - foo2
      - foo3

パラメータを渡すときもコンマ区切りで書きます。

$ aws cloudformation deploy --template-file template.yaml --stack-name xxxx --parameter-overrides Foo=foo1,foo2,foo3

参考:AWS CloudFormation テンプレートの個々のパラメータに複数の値を使用する