[CloudFormation] Metadata セクションで入力パラメータを見やすく設定する
Metadata セクションとは
オプションの Metadata セクションを使用して、テンプレートの詳細を提供する任意の JSON または YAML オブジェクトを含めることができます。
一部の AWS CloudFormation 機能は、Metadata セクションで定義した設定または設定情報を取得します。
下記公式ドキュメントより引用
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html
簡単に言うとテンプレートに対する追加情報を記載するセクションです
Metadata セクションキー
現在は下記3つがあります
AWS::CloudFormation::Interface
→ 今回使用するもの、入力パラメータのグループ化と順序が指定できます
AWS::CloudFormation::Init
→ cfn-init ヘルパースクリプトを EC2 インスタンスで使用する際に定義します
AWS::CloudFormation::Designer
→ AWS CloudFormation デザイナーを使用すると自動追加されます
どんな時使用するか
パラメータが多いときや、GUI コンソール上からスタックを作成する場合、下記のように必須パラメータとオプションパラメータが存在する場合等ではこのオプションを使うことがオススメです
Parameters:
# Required parameters
AllowIP:
Description: Enter the global IP of the terminal to be tested.
Type: String
AllowedPattern: "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})"
ConstraintDescription: "Must be a valid IP range of the form x.x.x.x/x"
SplunkDeploy:
Description: "If enabled, Splunk Server will be deployed."
Type: String
AllowedValues: [true, false]
Default: false
# If you set the DeploySplunk parameter to true, the following parameters are required
PortforSplunk:
Description: Port number used by Splunk Server
Type: String
PasswordforSplunk:
Description: Password used by Splunk Server
Type: String
NoEcho: true
上記テンプレートだとスタック作成時に順番が論理 ID のアルファベット順にソートされます
これだと各パラメータが順不同になってしまい使用者に優しくないです
Metadata セクションを設定
上記のような場合、Metadata セクションで AWS::CloudFormation::Interface を記載して入力パラメータのグループ化や順序を指定しましょう
具体的には下記のように定義します
+Metadata:
+ AWS::CloudFormation::Interface:
+ ParameterGroups:
+ -
+ Label:
+ default: Required parameters
+ Parameters:
+ - AllowIP
+ - SplunkDeploy
+ -
+ Label:
+ default: If you set the Splunkdeploy parameter to true, the following parameters are required
+ Parameters:
+ - PortforSplunk
+ - PasswordforSplunk
Parameters:
# Required parameters
AllowIP:
Description: Enter the global IP of the terminal to be tested.
Type: String
AllowedPattern: "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})"
ConstraintDescription: "Must be a valid IP range of the form x.x.x.x/x"
SplunkDeploy:
Description: "If enabled, Splunk Server will be deployed."
Type: String
AllowedValues: [true, false]
Default: false
# If you set the DeploySplunk parameter to true, the following parameters are required
PortforSplunk:
Description: Port number used by Splunk Server
Type: String
PasswordforSplunk:
Description: Password used by Splunk Server
Type: String
NoEcho: true
上記テンプレートを使用することにより、各パラメータがグループ化され順序も指定したとおりに表示されます
AWS::CloudFormation::Interface 内プロパティの詳細
ParameterGroups:
→ パラメータグループの宣言
- Label:
→ パラメータグループのグループ名を指定 - Parameters:
→ パラメータグループに含めるパラメータとその表示順を指定
Discussion