AWS CLIを使ってEC2のインスタンス一覧を取得したり起動したりする

awsコマンドを使ってEC2インスタンス一覧を取得したり、インスタンスを起動したりして遊んでみました。

実行環境は、macOS Catalina 10.15.7です。

# 1. awsコマンドのインストール

Mac版 AWS CLI version.2を以下のリンクから、最新バージョンのpkgファイルをダウンロードします。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html

# 2. コマンド起動確認

```
$ which aws
/usr/local/bin/aws
```

```
$ aws --version
aws-cli/2.2.10 Python/3.8.8 Darwin/19.6.0 exe/x86_64 prompt/off
```

バージョン情報が表示されれば、インストール成功です。

# 3. config

以下のコマンドでコンフィギュレーションします。

```
$ cd
$ aws configure
```

任意のAccess Key ID、Secret Access Keyおよびリージョン名を指定します。output formatはJSONにしておきます。

```
Access Key ID=<YOUR ACCESS KEY ID>
Secret Access Key=<YOUR SECRET ACCESS KEY>
region name=<YOUR REGION; 例えば、ap-northeast-1>
output format=json
```

コンフィグファイルは以下のコマンドで確認できます。

```
$ less ~/.aws/config
$ less ~/.aws/credentials
```

# 4. EC2インスタンスの一覧表示

以下のコマンドで全件取得できます。

```
$ aws ec2 describe-instances
```

上記コマンドでは結果の全項目が取得できます。結果の項目をフィルタリングしたいときは、queryオプションを使います。
例えば、InstanceIdとStateだけを取得したい場合は、queryオプションで以下のように指定します。

```
$ aws ec2 describe-instances --query "Reservations[].Instances[].[InstanceId,State]"

[
    [
        "<INSTANCE ID1>",
        {
            "Code": 80,
            "Name": "stopped"
        }
    ],
    [
        "<INSTANCE ID2>",
        {
            "Code": 16,
            "Name": "running"
        }
    ]
]
```

参考:
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-ec2-instances.html

# 5. EC2インスタンスの起動

以下のコマンドでインスタンスを起動できます。`<INSTANCE ID>`のところは起動したいインスタンスIDを指定します。

```
$ aws ec2 start-instances --instance-id <INSTANCE ID>

{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "<INSTANCE ID>",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}
```

参考:
https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html

# 6. EC2インスタンスの停止

起動と同様に、以下のコマンドでインスタンスの停止もできます。`<INSTANCE ID>`のところは停止したいインスタンスIDを指定します。

```
$ aws ec2 stop-instances --instance-id <INSTANCE ID>

{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "<INSTANCE ID>",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
```

参考:
https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html

# 7. EC2インスタンスの終了

以下のコマンドでインスタンスの終了もできます。`<INSTANCE ID>`のところは終了したいインスタンスIDを指定します。

**★終了すると再度起動はできなくなるので注意してください。**

```
$ aws ec2 terminate-instances --instance-id <INSTANCE ID>

{
    "TerminatingInstances": [
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "<INSTANCE ID>",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
```

ちなみに、終了したインスタンスはAWSのダッシュボードからは時間が経つと自動的に消えるようです。

# 8. インスタンスのライフサイクル

インスタンスのライフサイクル（State遷移）は以下のページが参考になります。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html