Edited at

CloudFormationを使ってSystems Managerのパラメータストアの値を登録し、取得する


はじめに

本記事では、AWS CloudFormationを使って、Systems Managerのパラメータストアの値を登録し、取得する手順を説明しています。(初心者向け)

本記事で掲載しているテンプレートの最新版は、下記に置いてます。

https://github.com/okubo-t/aws-cloudformation


Systems Manager パラメータストアとは

Key/Value形式のパラメータを、AWSで集中管理する機能です。


参考

AWS Systems Manager パラメータストア


Systems Managerのパラメータストアに値を登録する


Stringタイプのパラメータを登録する


参考

Using AWS Systems Manager Parameter Store Secure String parameters in AWS CloudFormation templates

CloudFormationを使ってSystems ManagerのパラメータストアのStringタイプのパラメータを登録する場合のスタックのサンプルテンプレート


ssm-sample-parm-01.yml

AWSTemplateFormatVersion: "2010-09-09"

Description:
SSM Parameter Create

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#
Parameters:
MasterUserName:
Type: String
NoEcho: true
MinLength: 1
MaxLength: 16
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*"
ConstraintDescription: "must begin with a letter and contain only alphanumeric characters."

# ------------------------------------------------------------#
# SSM Parameter
# ------------------------------------------------------------#
Resources:
Parameter:
Type: "AWS::SSM::Parameter"
Properties:
Name: "MasterUsername"
Type: "String"
Value: !Ref MasterUserName
Description: "MasterUsername for RDS"


AWS CLIを使って登録する場合のサンプルコマンド

aws ssm put-parameter --name MasterUsername --type String --value "MasterUsername"


Secure Stringタイプのパラメータを登録する

CloudFormationを使ってSystems ManagerのパラメータストアのSecure Stringタイプのパラメータの登録は、まだサポートされていません。(2018/10/6時点)

AWS CLIを使って登録する場合のサンプルコマンド

aws ssm put-parameter --name MasterUserPassword --type SecureString --value "MasterUserPassword"


Systems Managerのパラメータストアの値を取得する

ここでは、動的参照の機能を使用して、パラメータストアの値を取得します。

参考:

Using Dynamic References to Specify Template Values

スタックテンプレートに指定するパラメータの動的参照は、次のパターンに従って設定します。


ssm動的参照の場合

{{resolve:ssm:parameter-name:version}}


ssm-secure動的参照の場合

{{resolve:ssm-secure:parameter-name:version}}

※パラメータ名では大文字と小文字は区別されます。

スタックテンプレートには、下記のように組み込みます。

Resources:

DBInstance:
Type: "AWS::RDS::DBInstance"
Properties:

MasterUsername: "{{resolve:ssm:MasterUsername:1}}"
MasterUserPassword: "{{resolve:ssm-secure:MasterUserPassword:1}}"

DBInstanceIdentifier: !Ref DBInstanceIdentifier
Engine: MySQL
EngineVersion: 5.7
DBInstanceClass: !Ref DBInstanceClass
AllocatedStorage: 100
StorageType: gp2
DBName: !Ref DBName

## 以下 省略