ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【AWS】EC2をコマンドで起動したり停止したりする方法

スポンサードリンク

photo by Sean MacEntee

以前自動化の記事書いたけど、その前にやったこと。

aipacommander.hatenablog.jp

aws管理画面にてIAMアクセスキーを作成

awscliをインストール

macなので、Homebrewで。すんなり入りました。

$ brew install awscli
$ aws --version
aws-cli/1.9.7 Python/2.7.10 Darwin/14.5.0 botocore/1.3.7

設定ファイル(?)を作成

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXX     # アクセスキー
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXX # シークレットキー
Default region name [None]: ap-northeast-1                 # 東京リージョン
Default output format [None]:                              # 何も入力していない

こんな感じでファイルが作られる。

$ ls -la ~/.aws/
total 16
drwxr-xr-x   4 user  staff   136 11 27 14:30 .
drwxr-xr-x+ 50 user  staff  1700 11 27 14:30 ..
-rw-------   1 user  staff    85 11 27 14:38 config
-rw-------   1 user  staff   241 11 27 14:38 credentials

コマンドを実行

$ aws ec2 describe-instances 

A client error (UnauthorizedOperation) occurred when calling the DescribeInstances operation: You are not authorized to perform this operation.

なんかエラーが。。。どうして?

どうやら、色々許可しないといけないらしい。

ポリシーを設定しにいく。

いっぱいある。Fullっぽい「AmazonEC2FullAccess」を設定。

$ aws ec2 describe-instances 

おお!

ポリシー「AmazonEC2FullAccess」をアタッチしたら通るようになった。なるほど。

起動・停止

起動しているインスタンスのstatusを確認してみる

$ aws ec2 describe-instance-status --region=ap-northeast-1 --instance-ids=i-xxxxxxxx
{
    "InstanceStatuses": [
        {
            "InstanceId": "i-xxxxxxxx", 
            "InstanceState": {
                "Code": 16, 
                "Name": "running"
            }, 
            "AvailabilityZone": "ap-northeast-1a", 
            "SystemStatus": {
                "Status": "ok", 
                "Details": [
                    {
                        "Status": "passed", 
                        "Name": "reachability"
                    }
                ]
            }, 
            "InstanceStatus": {
                "Status": "ok", 
                "Details": [
                    {
                        "Status": "passed", 
                        "Name": "reachability"
                    }
                ]
            }
        }
    ]
}

SystemStatusInstanceStatusの違いはなに・・・?

  • 仮想マシンレベルで疎通がとれているかチェックしている「System Status Checks」
  • OSレベルで疎通がとれているかチェックする「Instance Status Checks」

なるほど。わからん。

  • System Status Checks 物理層のエラーチェック
  • Instance Status Checks OS以上のエラーチェック

らしい。これだったらなんとなく。

とりあえず、OKじゃなかったら何かしら障害発生中ってことね。

ということで、単純にサーバのOnとOffはInstanceStatusをチェックすればいいのね。

それではサーバを止めてみます。

$ aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=i-XXXXXXXX 
{
    "StoppingInstances": [
        {
            "InstanceId": "i-XXXXXXXX", 
            "CurrentState": {
                "Code": 64, 
                "Name": "stopping"
            }, 
            "PreviousState": {
                "Code": 16, 
                "Name": "running"
            }
        }
    ]
}

おおお!

止まった!

次は起動してみる

$ aws ec2 start-instances --region=ap-northeast-1 --instance-ids=i-XXXXXXXX 
{
    "StartingInstances": [
        {
            "InstanceId": "i-XXXXXXXX", 
            "CurrentState": {
                "Code": 0, 
                "Name": "pending"
            }, 
            "PreviousState": {
                "Code": 80, 
                "Name": "stopped"
            }
        }
    ]
}

ん? pendingとな・・・?

でもコンソール上では動きがある。多分大丈夫。

ね。起動しました。

雑感

大変いいね!