terraformとか使いたかったけど急いでたのと、インスタンスの数的にGUIぽちぽちがつらくなりそうだったのである程度固定してコマンド一発で起動できるようにする
CLI経由だとjsonを直接かけるがファイルを読み込ませてAPIを叩くのが良さそう
スケルトンの生成
実行したいawsコマンドに対してjsonファイルのスケルトンを生成するオプションがあるのでそれを使う
AWS CLIのことはAWS CLIに聞け – スケルトンでもっと便利に | サーバーワークス エンジニアブログ
aws ec2 run-instances --generate-cli-skeleton > ec2.json
ここで生成されたjsonはcliで与えられるパラメータ全てを列挙するようなので必要なパラメータだけ設定して後は削除していく
必要なものだけ残したのが下記
- ec2.json
{
"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
おまけ
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