読者です 読者をやめる 読者になる 読者になる

【AWS】CLIのコマンドパラメータをJSONファイルで記述する (--cli-input-json)

AWS CLI
スポンサーリンク

AWS CLIのパラメータは--instance-idの形式で指定する必要があります。しかし一部はJSON形式で指定しなければいけない箇所もあって、全部JSONファイルでまとめて渡せないのかなと調べてみたら新しくサポートされていましたので使ってみました。

JSONファイルからのパラメータ入力が可能に

AWS CLI 1.5.5からコマンドのパラメータ全てをJSONファイルで指定することが出来るようになりました。今まで一部はJSON形式で書かないといけない箇所もありましたが、全て可能になったという事で使いやすくなりそうです。

追加されたパラメータは以下の2つです。

パラメータ 機能
--generate-cli-skeleton コマンドに対応するJSONのひな形を出力
--cli-input-json 入力のパラメータにJSONファイルを指定

CLIスケルトンの作成 (--generate-cli-skeleton)

まずJSONでパラメータを全て渡せるといってもどのように記述すればいいのかわからないので、スケルトン(ひな形)を作成します。ここで新しく追加されたパラメータ--generate-cli-skeletonを使用します。実行したいコマンドのパラメータに指定してください。(以下、run-instancesで説明)

$ aws ec2 run-instances --generate-cli-skeleton
{
    "DryRun": true, 
    "ImageId": "", 
    "MinCount": 0, 
    "MaxCount": 0, 
    "KeyName": "", 
    "SecurityGroups": [
        ""
    ], 
    "SecurityGroupIds": [
        ""
    ], 
    "UserData": "", 
    "InstanceType": "", 
    "Placement": {
        "AvailabilityZone": "", 
        "GroupName": "", 
        "Tenancy": ""
    },
...
}

標準出力にJSONが出力されますので、これを元にパラメータを作成します。コマンド実行時にファイルにリダイレクトしましょう。

$ aws ec2 run-instances --generate-cli-skeleton > ec2-run-instances.json

JSONファイルを使用してCLIを実行する (--cli-input-json)

先程作成したファイルに必要なパラメータを設定していきます。スケルトンで作成したJSONには全てのパラメータが書かれてますが、全て使う必要はありませんので、必要なもの以外は削ります。括弧の関連やカンマの消し忘れに気をつけてください。色々削って以下のようなJSONファイルになりました。

{
    "ImageId": "ami-4985b048", 
    "KeyName": "ec2_test_keypair",
    "SecurityGroups": [
        "launch-wizard-1"
    ],  
    "InstanceType": "t2.micro",
    "BlockDeviceMappings": [
        {
            "DeviceName": "/dev/sdb",
            "Ebs": {
                "VolumeSize": 10
            }   
        }   
    ]   
}

JSONでパラメータを指定するには--cli-input-jsonを使用します。file://を付けてJSONファイルを指定しましょう。

$ aws ec2 run-instances --cli-input-json file://~/aws/ec2-run-instances.json
{
    "OwnerId": "620401962252", 
    "ReservationId": "r-aedc15b9", 
    "Groups": [], 
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            },
...
}

これでインスタンスが作成されました。コマンドによってはパラメータをいっぱい繋げて書くよりかはこっちの方が便利かもしれません。


参考
AWS CLIのパラメータをJSONファイルで記述する | Developers.IO Release: AWS CLI 1.5.5 : Release Notes : Amazon Web Services