📌
EC2インスタンスをCLIで素早く起動&停止するには
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にしておくと便利だと思います。
Discussion