AWS
CloudFormation
SSM

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

## 以下 省略