AWS CLIでEC2インスタンスを起動するには aws ec2 start-instances --instance-ids i-XXXXX
とします。
$ aws ec2 start-instances --instance-ids i-XXXXX
{ "StartingInstances": [ { "CurrentState": { "Code": 16, "Name": "pending" }, "InstanceId": "i-XXXXX", "PreviousState": { "Code": 16, "Name": "stopped" } } ] }
ただ、これだと「起動する命令を送った」だけなので、正しく起動が完了したことや、割り当てられたIPアドレスなどが分かりません。
そこで次のように、起動命令->起動待ち->インスタンス情報を表示。というのを順番に実行します。これで起動したインスタンスのグローバルIPアドレスなどをすぐに確認することができます。
$ aws ec2 start-instances --instance-ids i-XXXXX \ && aws ec2 wait instance-running --instance-ids i-XXXXX; \ aws ec2 describe-instances --instance-ids i-XXXXX \ | jq '.Reservations[].Instances[] | \ {InstanceId, InstanceState: .State.Name, PublicDnsName, PublicIpAddress}'
{ "StartingInstances": [ { "CurrentState": { "Code": 16, "Name": "stopping" }, "InstanceId": "i-XXXXX", "PreviousState": { "Code": 16, "Name": "running" } } ] } { "InstanceId": "i-XXXXX", "InstanceState": "running", "PublicDnsName": "ec2-99-99-99-99.ap-northeast-1.compute.amazonaws.com", "PublicIpAddress": "99.99.99.99" }
次に停止です。EC2インスタンスを停止するには aws ec2 stop-instances --instance-ids i-XXXXX
とします。
$ aws ec2 stop-instances --instance-ids i-XXXXX
{ "StoppingInstances": [ { "CurrentState": { "Code": 64, "Name": "stopping" }, "InstanceId": "i-XXXXX", "PreviousState": { "Code": 16, "Name": "running" } } ] }
これも停止命令を送るだけなので、これだけだと実際に止まったことが確認できません。止めたつもりなのに止まってないと結構辛いので、これも停止待ちを入れてみます。
$ aws ec2 stop-instances --instance-ids i-XXXXX \ && aws ec2 wait instance-stopped --instance-ids i-XXXXX; \ aws ec2 describe-instances --instance-ids i-XXXXX \ | jq '.Reservations[].Instances[] | {InstanceId, InstanceState: .State.Name}'
{ "StoppingInstances": [ { "CurrentState": { "Code": 64, "Name": "stopping" }, "InstanceId": "i-XXXXX", "PreviousState": { "Code": 16, "Name": "running" } } ] } { "InstanceId": "i-XXXXX", "InstanceState": "stopped" }
これで確実に止まったことが確認できます。
コマンドが長いのでALIASにしておくと便利だと思います。