sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

CloudFormation テンプレートのパラメータは自由に順序決めやグループ分けできるよ

最近CloudFormation(以下CFn)テンプレートばっかり作ってるナスです。

テンプレートの中に自由に値を渡せる「パラメータ」ってのがありますが、このパラメータ数が多ければ多いほど最初のスタック作成時の入力がめんどくさいですよね?
しかもパラメータの項目がきれいに並んでいればまだいいのですが、よくわからない順番で聞かれたりします。 せめてパラメータの順番だけでも思い通りにしたいなーと思ってたら、、ありました。 2011年に初めて同じ願望を抱いてから7年、ようやく願いが叶ったようです。

というわけで今回は、CFnテンプレートでパラメータの順序を決める方法をご紹介します。

 

パラメータの順序を指定しないとどうなる?

とりあえず適当にパラメータを書いてみます。

{
    "Parameters": {
        "DBPort": {
            "Default": "3306",
            "Type": "Number"
        },
        "DBPwd": {
            "NoEcho": "true",
            "Type": "String"
        },
        "InstanceName": {
            "Type": "String"
        },
        "AZ": {
            "Type": "AWS::EC2::AvailabilityZone::Name"
        }
    }
}

これでスタックを作成するとこうなりました。

f:id:nasrinjp1:20180514093719p:plain

んー、なんとなくパラメータ名でソートされる感じですかね?わからんけど。

 

パラメータ順序は簡単に指定できる

例えば、 InstanceType の下に AZ を持ってきたい場合はこんなふうにテンプレートにメタデータを追加します。ついでなので、インスタンス関連と DB 関連をグループ分けしてみました。parameters のリストの順番がそのままスタック作成時に上から順番に並びます。

{
    "Parameters": {
        "DBPort": {
            "Default": "3306",
            "Type": "Number"
        },
        "DBPwd": {
            "NoEcho": "true",
            "Type": "String"
        },
        "InstanceName": {
            "Type": "String"
        },
        "AZ": {
            "Type": "AWS::EC2::AvailabilityZone::Name"
        }
    },
    "Metadata": {
        "AWS::CloudFormation::Interface": {
            "ParameterGroups": [
                {
                    "Label": {
                        "default": "Instance Group"
                    },
                    "Parameters": [
                        "InstanceName","AZ"
                    ]
                },
                {
                    "Label": {
                        "default": "DB Group"
                    },
                    "Parameters": [
                        "DBPwd","DBPort"
                    ]
                }
            ]
        }
    }
}

↑でスタックを作成すると結果はこうなります。

f:id:nasrinjp1:20180514095556p:plain

ドキュメントも↓にちゃんとありました。
docs.aws.amazon.com

 

ふと思ったこと

この内容を知ったのはつい最近ですが、もしかしたら実は何年も前から存在してたんですかね… 自分だけでは気づけないことに気づくためにJAWS-UGの勉強会やハンズオンとかにもっと参加するか。