🦔

[CloudFormation] Metadata セクションで入力パラメータを見やすく設定する

2021/08/05に公開

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:
     → パラメータグループに含めるパラメータとその表示順を指定

参考:https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-interface.html

Discussion