notebook

都内でWEB系エンジニアやってます。

CLIからEC2を起動する

terraformとか使いたかったけど急いでたのと、インスタンスの数的にGUIぽちぽちがつらくなりそうだったのである程度固定してコマンド一発で起動できるようにする

CLI経由だとjsonを直接かけるがファイルを読み込ませてAPIを叩くのが良さそう

ケルトンの生成

実行したいawsコマンドに対してjsonファイルのスケルトンを生成するオプションがあるのでそれを使う

AWS CLIのことはAWS CLIに聞け – スケルトンでもっと便利に | サーバーワークス エンジニアブログ

blog.serverworks.co.jp

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

ここで生成されたjsoncliで与えられるパラメータ全てを列挙するようなので必要なパラメータだけ設定して後は削除していく

必要なものだけ残したのが下記

{
    "ImageId": "ami-5d1e4d4a",
    "KeyName": "sample",
    "SecurityGroupIds": [
        "sg-931315e9"
    ],
    "InstanceType": "t2.micro",
    "Placement": {
        "AvailabilityZone": "us-east-1a"
    },
    "SubnetId": "subnet-8a24eda7",
    "DisableApiTermination": true,
    "PrivateIpAddress": "10.0.12.85",
    "IamInstanceProfile": {
        "Arn": "",
        "Name": ""
    }
}

起動

コマンドを叩く

aws ec2 run-instances --cli-input-json file://ec2.json
{
  "Instances": [
    {
      ...
       "InstanceId": "i-018b588f4c77bac26"
      ...
    }
  ]
}

といった感じでjsonが返ってくる

マネジメントコンソールから確認したが無事インスタンスが起動できた

タグ

タグに関してはrun-instancesではつけられないようなのでInstanceIDを取得してcreate-tagsを実行する

aws ec2 create-tags --resources i-018b588f4c77bac26 --tags Key=Name,Value=CLITest Key=Project,Value=Sample

CLIから起動できたほうが再現性があるし何より楽ですね

おまけ

xargs + jqで1コマンドでタグまでついたEC2を作成!

aws ec2 run-instances --cli-input-json file://ec2.json | jq -r '.Instances|.[].InstanceId' | xargs -i aws ec2 create-tags --resources {} --tags Key=Name,Value=CLITest Key=Project,Value=Sample