CloudFormationでCommaDelimitedList型の変数を条件文で使うとき(yaml)
1857 ワード
経緯
- CloudFormationでcreate-stack実行時に、引数として変数
ENV
を取得し、環境毎に変数EC2SGID<ENV>
を使い分ける - 値が複数&同一のテンプレート環境で管理されてないので、CommaDelimitedList型を使用することになった
- 条件分岐でCommaDelimitedList型の変数を使うとき、配列の書き方に迷った
- どう書けば条件文でCommaDelimitedList型の変数を使えるか?
失敗例
Parameters:
ENV:
Type: String
AllowedValues:
- dev
- stg
- prd
EC2SGIDDev:
Type: CommaDelimitedList
Default: sg-hoge, sg-fuga
EC2SGIDStg:
Type: CommaDelimitedList
Default: sg-foo, sg-bar
EC2SGIDPrd:
Type: CommaDelimitedList
Default: sg-piyo, sg-baz
Resources:
HogeLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
# 省略
# この書き方だとエラーになる
SecurityGroupIds: !If [IsDev, !Ref EC2SGIDDev, !If IsStg, !Ref EC2SGIDStg, !Ref EC2SGIDPrd]
結果
- 配列を入れ子状態にして書くことで使用できた
前提
- Templateはyaml形式を使用
内容
AWSTemplateFormatVersion: '2010-09-09'
Description: hoge
Parameters:
ENV:
Type: String
AllowedValues:
- dev
- stg
- prd
EC2SGIDDev:
Type: CommaDelimitedList
Default: sg-hoge, sg-fuga
EC2SGIDStg:
Type: CommaDelimitedList
Default: sg-foo, sg-bar
EC2SGIDPrd:
Type: CommaDelimitedList
Default: sg-piyo, sg-baz
Conditions:
IsDev: !Equals [!Ref ENV, dev]
IsStg: !Equals [!Ref ENV, stg]
IsPrd: !Equals [!Ref ENV, prd]
Resources:
HogeLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
# 省略
# 入れ子で構文エラーを回避
SecurityGroupIds: !If [IsDev, !Ref EC2SGIDDev, !If [IsStg, !Ref EC2SGIDStg, !Ref EC2SGIDPrd]]
Author And Source
この問題について(CloudFormationでCommaDelimitedList型の変数を条件文で使うとき(yaml)), 我々は、より多くの情報をここで見つけました https://zenn.dev/nazniel/articles/ab459e637545ee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol