AWS EC2(4)AWS CLIからEC2インスタンスを起動する

JSONファイルから起動する

EC2をAWS CLIから起動する際、JSONファイルに設定情報を記述しておくと、複雑なオプションコマンドを書き連ねる必要がなく、設定の管理もラクである。JSON形式の設定ファイルの雛形は、

<br>
aws ec2 run-instances --generate-cli-skeleton &gt; /tmp/ec2_settings.json<br>

で取得することが可能であるが、不要な設定も多く含まれているので、どの設定を有効とするかは精査が必要である。AWSマネージメントコンソールで設定可能な項目と同程度の設定であれば、以下の設定で起動することが可能である。

<br>
{<br>
    "DryRun": false,<br>
    "ImageId": "ami-XXXXXXXX",<br>
    "KeyName": "XXXXXXXX",<br>
    "SecurityGroups": [<br>
        "XXXXXXXX"<br>
    ],<br>
    "InstanceType": "t2.micro",<br>
    "BlockDeviceMappings": [<br>
        {<br>
            "DeviceName": "/dev/xvda",<br>
            "Ebs": {<br>
                "VolumeSize": 8,<br>
                "DeleteOnTermination": true,<br>
                "VolumeType": "gp2"<br>
            }<br>
        }<br>
    ],<br>
    "Monitoring": {<br>
        "Enabled": true<br>
    },<br>
    "DisableApiTermination": true,<br>
    "InstanceInitiatedShutdownBehavior": "stop",<br>
    "IamInstanceProfile": {<br>
        "Name": "XXXXXXXX"<br>
    }<br>
}<br>

それぞれの設定項目と、AWSマネージメントコンソール上の表示との対応は、以下の通り。

JSON項目名 AWSマネージメントコンソール上の名称 内容
DryRun 設定ファイル作成時は、DryRunで確認する
ImageId Amazon マシンイメージ AMIのID
KeyName キーペアの選択 キーペア
SecurityGroups セキュリティグループの設定 セキュリティグループ名
InstanceType インスタンスタイプの選択 インスタンスタイプ
BlockDeviceMappings/DeviceName デバイス AWSマネージメントコンソールは、通常/dev/xvdaが指定される
BlockDeviceMappings/EBS/VolumeSize サイズ(GiB) ボリュームサイズ
BlockDeviceMappings/EBS/DeleteOnTermination 合わせて削除 インスタンス削除時にボリュームも削除するか否か
BlockDeviceMappings/EBS/VolumeType ボリュームタイプ
Monitoring モニタリング CloudWatch 詳細モニタリングを有効化
DisableApiTermination 削除保護の有効化 誤った削除からの保護
InstanceInitiatedShutdownBehavior シャットダウン動作 シャットダウン時にインスタンスを削除するか停止するか
IamInstanceProfile IAM ロール IAM インスタンスプロファイル

なお、Tagはインスタンスを起動しないと指定できない
この設定ファイルを用いてEC2インスタンスを起動する場合は、以下のコマンドを実行する。

<br>
aws ec2 run-instances --cli-input-json file:///tmp/ec2_settings.json<br>

この際、設定ファイルに誤りがある場合には、

<br>
Parameter validation failed:<br>
Invalid type for parameter SecurityGroups, value: XXXXXXXX, type: &lt;type 'unicode'&gt;, valid types: &lt;type 'list'&gt;, &lt;type 'tuple'&gt;<br>

などのように、エラーメッセージが返される。