【AWS基本の”キ”:vol5】AWS CLIでEC2を起動・停止する方法

AWS CLI (Command Line Interface) を使えば、コマンドを実行するだけで簡単にEC2インスタンスの起動や停止ができます。この記事では、AWS CLIを使ってEC2インスタンスを操作する方法を解説します。

AWS CLIとは?

AWS CLIは、AWSサービスをコマンドラインで操作できるツールです。GUIを使わずに、AWSリソースの管理や自動化スクリプトの作成が可能になります。

事前準備

1. AWS CLIのインストール

AWS CLIがインストールされていない場合は、公式ドキュメントに従ってインストールしてください。

2. AWS CLIの設定

以下のコマンドでAWS CLIの設定を行います。

aws configure

プロンプトに従って以下を入力します。

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region name (例: ap-northeast-1)
  • Default output format (例: json)

3. 必要なIAM権限

操作を実行するためには、以下のIAMポリシーが必要です。

  • ec2:StartInstances
  • ec2:StopInstances
  • ec2:DescribeInstances

これらのポリシーが使用するアカウントで許可されていることを確認してください。

4. EC2インスタンスの作成

SampleCLIOperationInstanceというEC2インスタンスを作成しました。インスタンスの設定値は全てデフォルトです。

EC2インスタンスの操作

1. インスタンスのIDを確認

インスタンスの操作には、インスタンスIDが必要です。以下のコマンドでインスタンスIDを確認できます。

aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value]' \
  --output table

先ほど作成したインスタンスのインスタンスIDが表示されました。現在は”running”(起動中)となっていることがわかります。

% aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value]' \
  --output table
--------------------------------
|       DescribeInstances      |
+------------------------------+
|  i-0326d313f16b4f31f         |
|  running                     |
|  SampleCLIOperationInstance  |
+------------------------------+

2. インスタンスを停止する

稼働中のインスタンスを停止するには、以下のコマンドを実行します。
i-xxxxxxxxxxxxxxxxxは停止したいインスタンスのIDです。

aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx

実行するとCurrentStateがStopping(停止中)に変化しました。この段階ではまだインスタンスは完全に停止していません。

% aws ec2 stop-instances --instance-ids i-0326d313f16b4f31f
{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-0326d313f16b4f31f",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}

しばらく経ってからaws ec2 describe-instancesコマンドを再度実行します。するとステータスがstopped(停止済み)となったことが確認できました。この状態の時、インスタンスは完全に停止しています。

% aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value]' \
  --output table
--------------------------------
|       DescribeInstances      |
+------------------------------+
|  i-0326d313f16b4f31f         |
|  stopped                     |
|  SampleCLIOperationInstance  |
+------------------------------+

3. インスタンスを起動する

停止中のインスタンスを起動するには、以下のコマンドを実行します。

aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx

実行するとCurrentStateがpending(保留中)に変化しました。この段階ではまだインスタンスは完全に起動していません。

% aws ec2 start-instances --instance-ids i-0326d313f16b4f31f
{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "i-0326d313f16b4f31f",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}

しばらく経ってからaws ec2 describe-instancesコマンドを再度実行します。するとステータスがrunning(起動中)となったことが確認できました。

% aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value]' \
  --output table
--------------------------------
|       DescribeInstances      |
+------------------------------+
|  i-0326d313f16b4f31f         |
|  running                     |
|  SampleCLIOperationInstance  |
+------------------------------+

CLIコマンドでEC2インスタンスの停止・起動を実行することができました。

自動化スクリプトの例

CLIコマンドを使用してEC2インスタンスの操作を実行できることがわかりました。これらのコマンドを組み合わせたシェルスクリプトを作成することで、インスタンスの起動や停止を自動化することもできます。

EC2インスタンスの起動・停止を行うシェルスクリプトのサンプルです。startもしくはstopを指定することでEC2インスタンスの起動・停止を簡単に行うことができます。

#!/bin/bash
INSTANCE_ID="i-xxxxxxxxxxxxxxxxx"

if [ "$1" == "start" ]; then
  aws ec2 start-instances --instance-ids $INSTANCE_ID
  echo "Instance $INSTANCE_ID is starting..."
elif [ "$1" == "stop" ]; then
  aws ec2 stop-instances --instance-ids $INSTANCE_ID
  echo "Instance $INSTANCE_ID is stopping..."
else
  echo "Usage: $0 {start|stop}"
fi

実際に動かしてみましょう。このシェルスクリプトをEC2CLIOperation.shとして保存し、stopを指定して実行してみます。

% ./EC2CLIOperation.sh stop
{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-0326d313f16b4f31f",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
Instance i-0326d313f16b4f31f is stopping...

期待通り、停止が始まりました。停止が完了したことを確認してから、今度はstartを指定して実行してみます。

% ./EC2CLIOperation.sh start  
{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "i-0326d313f16b4f31f",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}
Instance i-0326d313f16b4f31f is starting...

インスタンスの起動が開始しました。
今回はとても簡単なシェルスクリプトで実験しましたが、コマンド実行だけで簡単にAWSリソースが操作できることがわかりますね。

まとめ

AWS CLIを使えば、EC2インスタンスの操作を効率的に行うことができます。コマンドライン操作に慣れることで、日々の運用を簡略化し、自動化の基盤を構築することが可能です。ぜひ試してみてください!

コメント

タイトルとURLをコピーしました