概要
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型の一覧。執筆時点でドキュメントは 英語のみ
-