[Amazon][EC2] コマンドラインでEC2インスタンスを起動停止する


最近、今更ながらにawsで遊んでいる(っ´∀`)っ ゃーですこんにちは。Amazon EC2のAPIを手持ちのノートPCにインストールして遊んでいます。前回、ec2-api-tools をインストールしましたが、実際に動いているEC2インスタンスを起動したり停止したりしてみましょう。

■ 起動しているインスタンスを停止する

起動しているインスタンスをコマンドラインから停止します。まずはブラウザで起動状態を見てみましょう。

001-running

State 列が「running」になっていること、Elastic IP列にIPアドレスが振られていることに注目です。(Elastic IP は自分で割り当てる必要があります) 次に、コマンドラインで起動状態を確認してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances <インスタンス名>

実際にコマンドを叩いてみるとわかりますが、結構な量の情報が出てきます。そこで、awkでフィールドを区切って、インスタンス名と起動状態、Elastic IPを見てみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances <インスタンス名> | grep ^INSTANCE | awk '{print $2,$6,$14}'
<インスタンス名> running 176.32.XXX.XXX

それでは起動中のインスタンスを停止してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-stop-instances <インスタンス名>
INSTANCE	<インスタンス名>	running	stopping

インスタンスが停止途中の場合、コマンドラインでは以下のように表示されます。ec2-describe-instancesコマンドで確認してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances <インスタンス名> | grep ^INSTANCE | awk '{print $2,$6,$14}'
<インスタンス名> stopping 176.32.XXX.XXX

ダチョウ倶楽部でいうところの「ストッピング! (っ´∀`)っ (っ´∀`)っ (っ´∀`)っ ゃー」みたいなもんです。少し時間をおいてから、再度ec2-describe-instancesコマンドで確認してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances <インスタンス名> | grep ^INSTANCE | awk '{print $2,$6,$14}'
<インスタンス名> 0 xen

一番右のフィールドが、IPアドレスではなくなっています。ブラウザでも見てみましょう。

002-stopping

完全に停止したときは、こうなっています。Elastic IPがインスタンスから関連付けられなくなったのがわかります。

003-stopped

 

■ 停止したインスタンスを起動する

停止したインスタンスを起動するコマンドは以下の通りです。

[ (っ´∀`)っ@友の会 ~]$ ec2-start-instances <インスタンス名>
INSTANCE	<インスタンス名>	stopped	pending

起動コマンドを実行した直後は、インスタンスがpendingの状態です。少し時間をおいてから、インスタンスの状況をec2-describe-instancesコマンドで確認してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances i-4d7fe84d | grep ^INSTANCE | awk '{print $2,$6,$14}'
i-4d7fe84d running 176.34.YYY.YYY

インスタンスは起動していますが、Elastic IPとは違うIPアドレスになっているのがわかります。EC2のインスタンスは起動と同時にElastic IPが設定されてされないので、起動後に設定してあげる必要があります。ブラウザでは「Elastic IPs」から設定しますが、これもコマンドラインでやってみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-associate-address 176.32.87.136 -i <インスタンス名>
ADDRESS	176.32.XXX.XXX	<インスタンス名>

それではもう一度ec2-describe-instancesコマンドで確認してみましょう。

[ (っ´∀`)っ@友の会 ~]$ ec2-describe-instances <インスタンス名> | grep ^INSTANCE | awk '{print $2,$6,$14}'
<インスタンス名> running 176.32.87.136

ご覧のように、Elastic IPが設定されたことがわかります。

 

※ まとめ

  • インスタンスの停止は「ec2-stop-instances <インスタンス名>」で行う
  • インスタンスの起動は「ec2-start-instances <インスタンス名>」で行う
  • インスタンスを停止するとElastic IPが関連付けられなくなるので、インスタンス起動後にElastic IPを設定する必要がある
  • インスタンスのElastic IPを設定するには「ec2-associate-address -i <インスタンス名>」で行う
  • インスタンスの状態確認は「ec2-describe-instances <インスタンス名>」で行う

ね、簡単でしょ?