AWS CLIでEC2インスタンスを起動・停止する

## 概要
AWS CloudShell から コマンドライン(AWS CLI)で EC2 インスタンスを起動・停止します  

### [AWS CloudShell](https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html)
AWS が提供するブラウザベースのシェル環境です

### [AWS Command Line Interface (aws-cli)](https://aws.amazon.com/jp/cli/)
コマンドラインシェルを使用して AWS サービスとやり取りするためのオープンソースツールです  
https://github.com/aws/aws-cli/tree/v2  

## 環境
- AWS CloudShell
- aws-cli 2.13.3

## 手順の流れ
1. [EC2 インスタンスのステータス確認](#1-ec2-インスタンスのステータス確認)
2. [EC2 インスタンスの起動](#2-ec2-インスタンスの起動)
3. [EC2 インスタンスの停止](#3-ec2-インスタンスの停止)
4. [エイリアスの作成](#4-エイリアスの作成)

## 手順
### 1. EC2 インスタンスのステータス確認
[AWS マネジメントコンソール](https://console.aws.amazon.com/console/)から 
[AWS CloudShell](https://ap-northeast-1.console.aws.amazon.com/cloudshell/) を起動し、 EC2 インスタンスのステータスを確認します

#### コマンド
```shell_session
$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, Tags[?Key==`Name`].Value | [0]]' --output text
```

#### 実行結果
```text
# ヘッダーは出力されません
InstanceId           State.Name Tags.Value
-------------------- ---------- -------------
i-1234567890abcdef1     stopped ec2-instance1
i-1234567890abcdef2     running ec2-instance2
```

### 2. EC2 インスタンスの起動
1で取得したインスタンスIDを指定して、EC2 インスタンスを起動します

#### コマンド
```shell_session
$ aws ec2 start-instances --instance-ids i-1234567890abcdef1
```

#### 実行結果
```shell_session
{
    "StartingInstances": [
        {
            "InstanceId": "i-1234567890abcdef1",
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}
```

### 3. EC2 インスタンスの停止
1で取得したインスタンスIDを指定して、EC2 インスタンスを停止します

#### コマンド
```shell_session
$ aws ec2 stop-instances --instance-ids i-1234567890abcdef1
```

#### 実行結果
```shell_session
{
    "StoppingInstances": [
        {
            "InstanceId": "i-1234567890abcdef1",
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
```

### 4. エイリアスの作成
コマンドのエイリアスを作成します

#### コマンド
```shell_session
$ mkdir -p ~/.aws/cli
$ echo '[toplevel]' > ~/.aws/cli/alias
$ vi ~/.aws/cli/alias
```
#### 入力内容
```ini
# ~/.aws/cli/alias
[toplevel]
[command ec2]
status = describe-instances \
           --query 'Reservations[*].Instances[*].[InstanceId, State.Name, Tags[?Key==`Name`].Value | [0]]' \
           --output text
start = start-instances --instance-ids
stop = stop-instances --instance-ids
```

エイリアスを作成することで、以下のようにコマンドを短縮して実行することができます
```shell_session
$ aws ec2 status
$ aws ec2 start <instance_id>
$ aws ec2 stop <instance_id>
```

## 参考
https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/welcome.html

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html

https://github.com/aws/aws-cli/tree/v2

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

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-output-format.html

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-alias.html