概要
CloudFormationのパラメータをSystems Manager パラメータから取得する方法の解説
やってみる
コマンド
従来通り ParameterKey
と ParameterValue
を渡せばOK
この時 ParameterValue
にSystems Manager パラメータのキー名を指定する
$ aws cloudformation update-stack \
--stack-name <スタック名> \
--template-url <テンプレートURL> \
--parameters \
ParameterKey=<CFnパラメーターキー>,ParameterValue=<Systems Manager パラメータキー>\
--capabilities CAPABILITY_IAM
テンプレート
Type
を AWS::SSM::Parameter::Value<String>
型にする。
コマンドとテンプレートを修正するだけでSystems Manager パラメータからの呼び出しが可能に!
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
<CFnパラメーターキー>:
# コマンドの引数で指定した、<Systems Manager パラメータキー>からパラメータを取得してくれる
Type: AWS::SSM::Parameter::Value<String>
試す
MySQLを構築するテンプレートを例にする
Systems Manager パラメータ(EC2 パラメータストア)
以下のキーで、DBユーザー名とパスワードをSystems Manager パラメータに保管してあるとする。
SecureStringだとCloudFormationから呼び出せないので注意。
key | value |
---|---|
MySQLUsername | mysqluser |
MySQLPassword | mypassword |
テンプレート
rds.yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
Username:
NoEcho: true
Type: AWS::SSM::Parameter::Value<String>
Password:
NoEcho: true
Type: AWS::SSM::Parameter::Value<String>
StorageSize:
Type: Number
Resources:
DB:
Type: AWS::RDS::DBInstance
Properties:
DBInstanceClass: "db.t2.medium"
Engine: "MySQL"
EngineVersion: "5.7"
Iops: "1000"
AllocatedStorage: !Ref StorageSize
MasterUsername: !Ref: Username
MasterUserPassword: !Ref Password
コマンド
ParameterValue
を呼び出したいSystems Manager パラメータのキー名にすることで呼び出せる
$ aws cloudformation update-stack \
--stack-name rds-stack \
--template-url file://rds.yaml \
--parameters \
ParameterKey=Username,ParameterValue=MySQLUsername \
ParameterKey=Password,ParameterValue=MySQLPassword \
ParameterKey=StorageSize,ParameterValue=100 \
--capabilities CAPABILITY_IAM
まとめ
機微情報の管理をSystems Manager パラメータで一元管理できるのはとても良いですね
参考
- AWS CloudFormation で StackSets パラメータの上書きと EC2 Systems Manager パラメータストアのパラメータ化設定をサポート
-
Parameters - AWS CloudFormation
-
AWS::SSM::Parameter
型の一覧。執筆時点でドキュメントは 英語のみ
-