[小ネタ] JSON/YAML ファイルから入力した AWS CLI のパラメータは個別に「上書き」可能です

(できそうだなと思ってやってみたところ)スケルトンテンプレートに記入した AWS CLI パラメータの「上書き」ができました。
2020.07.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

哈喽大家好、コンサルティング部の西野です。

AWS CLI において --cli-input-json もしくは --cli-input-yaml パラメータを使用すると、ファイルから各種リソースの作成に必要なパラメータを読み込むことができます。
当該機能の詳細については下記のドキュメントやブログなどをご参照ください。

JSON または YAML 入力ファイルからの AWS CLI スケルトンと入力パラメータの生成
AWS CLIのパラメータをJSONファイルで記述する

パラメータの「上書き」とは

たとえば下記のようなパラメータのファイルを用意します。
EC2 インスタンス (i-XXXXXXXXXXXXXXXXXX) の CPU Utilization を監視し、閾値を超えた場合に SNS トピックにパブリッシュするアラームの設定が書かれています。

sample-cli-input.json

{
    "AlarmName": "alarm_name",
    "ActionsEnabled": true,
    "AlarmActions": [
        "arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:SYSTEM-NOTIFICATION"
    ],
    "MetricName": "CPUUtilization",
    "Namespace": "AWS/EC2",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "InstanceId",
            "Value": "i-XXXXXXXXXXXXXXXXXX"
        }
    ],
    "Period": 300,
    "EvaluationPeriods": 2,
    "Threshold": 85.0,
    "ComparisonOperator": "GreaterThanThreshold"
}

このパラメータを使用してアラームを作る際には下記のコマンドを入力します。

$ aws cloudwatch put-metric-alarm --cli-input-json file://sample-cli-input.json

sample-cli-input.json どおりのアラームができあがりますね。

ところで、この sample-cli-input.json から一部のパラメータのみを変更したアラームを作成したい場合はどのようにするのが良いでしょうか。 このときに使えるのが「上書き」です。
(公式ドキュメントを参照してもこの操作の呼称が特に発見できなかったため、便宜上「上書き」と呼びます。)

「上書き」の方法

方法は簡単です。 変更したいパラメータを --cli-input-json もしくは --cli-input-yaml と同時に指定してあげるだけで「上書き」できます。

例として、下の表のようにアラーム名と対象インスタンス(インスタンス ID)のみ変更したアラームを追加で2つ作成します。

アラーム名 インスタンス ID
WebServerCPUUtilization i-AAAAAAAAAAAAAAAAAA
BatchServerCPUUtilization i-BBBBBBBBBBBBBBBBBB

コマンドは下記のとおりです。

$ aws cloudwatch put-metric-alarm \
--alarm-name WebServerCPUUtilization \
--dimensions "Name=InstanceId,Value=i-AAAAAAAAAAAAAAAAAA" \
--cli-input-json file://sample-cli-input.json

$ aws cloudwatch put-metric-alarm \
--alarm-name BatchServerCPUUtilization \
--dimensions "Name=InstanceId,Value=i-BBBBBBBBBBBBBBBBBB" \
--cli-input-json file://sample-cli-input.json

--alarm-name オプションでアラーム名を、 --dimensions オプションでインスタンスIDを指定「上書き」します。
その他のパラメータはすべて sample-cli-input.json から読み込まれます。

想定通り、アラーム名と対象インスタンスのみが変更されたアラームを作ることができました。

終わりに

このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野 (@xiyegen) がお送りしました。