この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS CloudFormation(CFn) StackSetを使っていて、 「特定のAWSアカウントには、このリソースを作りたくない」要件がでてきました。
Conditions を使って、これを解決してみます。
CFnで使える条件(Conditions
)
CFnの Conditions
セクションを使ってリソースの作成有無を決定することができます。
シンプルな例を紹介します。
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
Env:
Type: String
AllowedValues:
- prod
- dev
Conditions:
CreateProdResources: !Equals
- !Ref Env
- prod
Resources:
# This topic is only needed in production workloads.
SNSTopic:
Type: AWS::SNS::Topic
Condition: CreateProdResources
Properties:
TopicName: !Sub ${Env}-topic
Parameters
セクションで指定したパラメータ Env
の値によって、
リソースである SNSTopic
の作成有無を決定する例です。
Env=prod
のとき、SNSTopic
は作成されますEnv=dev(prod以外)
のとき、SNSTopic
は作成されません
Conditions
では条件関数を使って、真偽の決定プロセスを定めます。
今回は Fn::Equals を使っています。
詳しい使い方や他の条件関数については以下参照ください。
アカウントごとにリソース作成有無を分ける
以下のようなテンプレートで実現できます。
AWSTemplateFormatVersion: '2010-09-09'
Mappings:
AccountParams:
"111111111111": { CreateResources: yes }
"222222222222": { CreateResources: yes }
"333333333333": { CreateResources: no }
Conditions:
CreateResources: !Equals
- !FindInMap [AccountParams, !Ref "AWS::AccountId", CreateResources]
- yes
Resources:
SNSTopic:
Type: AWS::SNS::Topic
Condition: CreateResources
Properties:
TopicName: hoge-topic
Mappings を活用しました。
Mappings
を使うことで AWSアカウントごとに異なるパラメータを
指定することができます。
※ Mappings
, FindInMap
などの使い方については以下に記載しているので参照ください。