AWS CLIのパラメータをJSONファイルで記述する

2014.11.04

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

ども、大瀧です。
AWSのコマンドラインツール AWS CLIがバージョン1.5.5よりJSONファイルからのパラメータ入力をサポートしました。どんな感じで使えるものか、レポートします。

スケルトンJSONの作成

従来、AWS CLIでは--<オプション名>で指定していたパラメータを、あらかじめJSONファイルにまとめて書き実行時に読み込むことができるようになりました。といっても、どのようなJSONファイルを用意すればいいのかわからないので、そのためにJSONのひな形(スケルトン)を作成するためのオプションが用意されています。

パラメータ入力で実行したいコマンドに--generate-cli-skeletonオプションを指定すると、標準出力にJSONが出力されるのでファイルにリダイレクトしましょう。今回はELBを作成するaws elb create-load-balancerコマンドで試してみます。

ikkomon:~ ryuta$ aws elb create-load-balancer --generate-cli-skeleton > skel_elb_create-load-balancer.json
ikkomon:~ ryuta$

以下のように、中身が空ないしデフォルト値の入ったひな形ファイルができました。

skel_elb_create-load-balancer.json

{
    "LoadBalancerName": "",
    "Listeners": [
        {
            "Protocol": "",
            "LoadBalancerPort": 0,
            "InstanceProtocol": "",
            "InstancePort": 0,
            "SSLCertificateId": ""
        }
    ],
    "AvailabilityZones": [
        ""
    ],
    "Subnets": [
        ""
    ],
    "SecurityGroups": [
        ""
    ],
    "Scheme": "",
    "Tags": [
        {
            "Key": "",
            "Value": ""
        }
    ]
}

使い回しできるよう、適当にコピーしました。

ikkomon:~ ryuta$ cp skel_elb_create-load-balancer.json testlb_elb_create-load-balancer.json
ikkomon:~ ryuta$

JSONパラメータによるAWS CLIの実行

パラメータをざくざく追加していきますが、ひな形には設定できる全パラメータがダンプされているので、A or Bなど排他関係にあるパラメータは片方消さなければならない、デフォルト値がManagement Consoleのものと同一なわけではないなどいい感じにアレンジする必要があります(ニュアンス、伝わったでしょうか(苦笑))。

testlb_elb_create-load-balancer.json

{
    "LoadBalancerName": "testlb",
    "Listeners": [
        {
            "Protocol": "HTTP",
            "LoadBalancerPort": 80,
            "InstanceProtocol": "HTTP",
            "InstancePort": 80,
            "SSLCertificateId": ""
        }
    ],
    "AvailabilityZones": [
    ],
    "Subnets": [
        "subnet-XXXXXXXX"
    ],
    "SecurityGroups": [
        "sg-XXXXXXXX"
    ],
    "Scheme": ""
}

では、実行してみましょう。--cli-input-jsonオプションにfile://をつけてJSONファイルを指定します。

ikkomon:~ ryuta$ aws elb create-load-balancer --cli-input-json file://testlb_elb_create-load-balancer.json
testlb-XXXXXXXX.ap-northeast-1.elb.amazonaws.com
ikkomon:~ ryuta$

ELBが作成されました!

まとめ

長いパラメータを指定するためにシェルスクリプトで書いて頑張っていたAWS CLIの実行を代用できるのではないでしょうか。ユーザーデータの指定など、便利そうですよね。
AWS CLIをバンバン活用していきましょう!