JSONのテンプレからEC2のインスタンス起動する
EC2のインスタンスをCLIから起動するのに、aws ec2 run-instances コマンドがあるのだけど、指定しないといけないオプションがやたら多くて、毎回指定するのダルいなーと思ったら、--cli-input-jsonオプションでJSONテンプレート渡せるようなので、やってみた。
ちなみに--cli-input-jsonオプションは古いawscliだとないっぽいので、なさそうだったらawscliアップデートしてください。
$ sudo pip install -U awscli $ aws --version aws-cli/1.7.12 Python/2.7.6 Darwin/14.1.0 $ complete -C aws_completer aws
まずJSONファイルのひな形を生成する。
$ aws ec2 run-instances --generate-cli-skeleton > ec2-commitm-ap.json
指定できる内容は基本的にrun-instancesの引数に渡せるものなので、run-instancesのhelp見つつ、
$ aws ec2 run-instances help
あとはdescribeなんたらで既存のインスタンスとかから必要そうな情報を集める。
作ったJSONテンプレこんなかんじ。
$ cat ec2-commitm-ap.json { "ImageId": "ami-18869819", "KeyName": "aws-login", "SecurityGroupIds": [ "sg-48b7002d" ], "InstanceType": "t2.micro", "Placement": { "AvailabilityZone": "ap-northeast-1a" }, "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "VolumeSize": 8, "DeleteOnTermination": true, "VolumeType": "gp2" } } ], "Monitoring": { "Enabled": false }, "DisableApiTermination": false, "NetworkInterfaces": [ { "DeviceIndex": 0, "SubnetId": "subnet-6b55851c", "DeleteOnTermination": true, "AssociatePublicIpAddress": true } ], "EbsOptimized": false }
これを--cli-input-jsonに食わせると指定したオプションでインスタンスできる。
$ aws ec2 run-instances --cli-input-json file://ec2-commitm-ap.json
標準出力にいろいろ情報が出るけど、インスタンスIDだけ分かれば十分。
できたインスタンスのIP確認。ちゃんと取るならjqだけどIP見たいだけなのでgrepで手抜き。
$ aws ec2 describe-instances --instance-ids i-a2d024ba | grep PublicIpAddress
あと、run-instancesでタグを設定するオプションが見当たらなかったので、タグつけたい場合は、自分で後から付ければよいんじゃないかと。
$ aws ec2 create-tags --resources i-a2d024ba --tags Key=Name,Value=commitm-ap02
あとインスタンス廃棄したい場合はterminationプロテクトかかってる場合は一旦解除して、
$ aws ec2 modify-instance-attribute --instance-id xxxxxxx --no-disable-api-termination --region ap-northeast-1
terminate-instancesで廃棄する。
$ aws ec2 terminate-instances --instance-ids xxxxxxxx --region ap-northeast-1
参考