EBSボリュームのサイズ変更をやってみる

## 環境
| 項目 | 設定 |
|:-- |:-- |
| OS | AmazonLinux (version 2017.03)|
| インスタンスタイプ | t2.micro |
| ボリュームタイプ | gp2 |
| pythonバージョン | Python 3.5.3 (pyenv) |
| AWS CLIバージョン | aws-cli/1.11.82 |

### その他詳細

``` JSON:a.拡張対象ディスクの初期状態
{
    "Volumes": [
        {
            "VolumeType": "gp2",
            "VolumeId": "vol-05c927a2a0afec131",
            "Iops": 100,
            "CreateTime": "2017-05-04T01:17:37.368Z",
            "State": "in-use",
            "Size": 10,
            "Encrypted": false,
            "AvailabilityZone": "ap-northeast-1a",
            "Attachments": [
                {
                    "VolumeId": "vol-05c927a2a0afec131",
                    "DeleteOnTermination": false,
                    "State": "attached",
                    "AttachTime": "2017-05-04T01:17:37.000Z",
                    "Device": "/dev/sdb",
                    "InstanceId": "i-074b8466302e6dc1a"
                }
            ],
            "SnapshotId": ""
        }
    ]
}
```

```b.拡張対象ディスクの変更情報は無し
[root@ip-172-30-0-5 work]# aws ec2 describe-volumes-modifications --volume-id vol-05c927a2a0afec131 --region ap-northeast-1

An error occurred (InvalidVolumeModification.NotFound) when calling the DescribeVolumesModifications operation: Modification for volume 'vol-05c927a2a0afec131' does not exist.
```


``` shell:c.OSから見た初期状態
[root@ip-172-30-0-5 ~]# lsblk /dev/xvdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvdb 202:16   0  10G  0 disk /mnt
[root@ip-172-30-0-5 ~]# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb       9.8G   23M  9.2G   1% /mnt
```

## 手順
1.拡張対象のディスクを10GiB→11GiBに拡張する

``` bash:コマンド
aws ec2 modify-volume --volume-id vol-05c927a2a0afec131 --size 11 --region ap-northeast-1
```

```json:レスポンス
{
    "VolumeModification": {
        "TargetVolumeType": "gp2",
        "OriginalSize": 10,
        "StartTime": "2017-05-04T05:32:52.500Z",
        "TargetIops": 100,
        "TargetSize": 11,
        "OriginalVolumeType": "gp2",
        "OriginalIops": 100,
        "VolumeId": "vol-05c927a2a0afec131",
        "ModificationState": "modifying",
        "Progress": 0
    }
}
```


2.変更の進行状況をチェック

```bash:コマンド
aws ec2 describe-volumes-modifications --volume-id vol-05c927a2a0afec131 --region ap-northeast-1
```

```json:変更リクエスト発行から間髪入れずに発行した時のレスポンス
{
    "VolumesModifications": [
        {
            "OriginalSize": 10,
            "OriginalVolumeType": "gp2",
            "TargetIops": 100,
            "TargetSize": 11,
            "StartTime": "2017-05-04T05:32:52.500Z",
            "OriginalIops": 100,
            "ModificationState": "modifying",
            "TargetVolumeType": "gp2",
            "Progress": 0,
            "VolumeId": "vol-05c927a2a0afec131"
        }
    ]
}
```

```json:変更リクエスト発行からちょっと経ってから発行した時のレスポンス
{
    "VolumesModifications": [
        {
            "TargetSize": 11,
            "TargetVolumeType": "gp2",
            "Progress": 2,
            "OriginalVolumeType": "gp2",
            "VolumeId": "vol-05c927a2a0afec131",
            "OriginalSize": 10,
            "StartTime": "2017-05-04T05:32:52.500Z",
            "ModificationState": "optimizing",
            "OriginalIops": 100,
            "TargetIops": 100
        }
    ]
}
```

状態がoptimizingに進行。```{"Progress":"2"}``` の部分が進捗状況。完了するとこうなる。

```json:拡張完了後
{
    "VolumesModifications": [
        {
            "EndTime": "2017-05-04T05:38:04.434Z",
            "TargetSize": 11,
            "TargetIops": 100,
            "ModificationState": "completed",
            "StartTime": "2017-05-04T05:32:52.500Z",
            "TargetVolumeType": "gp2",
            "OriginalVolumeType": "gp2",
            "VolumeId": "vol-05c927a2a0afec131",
            "Progress": 100,
            "OriginalSize": 10,
            "OriginalIops": 100
        }
    ]
}
```

1GiB増やすのに05:12って結構かかるのね。
進捗状況は直前まで2%だったので、相変わらず適当なパーセントな模様。

3.OSから見た状態をチェック

```bash:コマンド
lsblk /dev/xvdb
```

```
[root@ip-172-30-0-5 work]# lsblk /dev/xvdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvdb 202:16   0  11G  0 disk /mnt
```

ちゃんと拡張されました。

回数制限があった気がするので、何回かやってみようとしたところ…

```
[root@ip-172-30-0-5 work]# aws ec2 modify-volume --volume-id vol-05c927a2a0afec131 --size 12 --region ap-northeast-1

An error occurred (VolumeModificationRateExceeded) when calling the ModifyVolume operation: You've reached the maximum modification rate per volume limit. Wait at least 6 hours between modifications per EBS volume.
```

あ、そういう制限だったのか。ドキュメントにもあった。

[APIReference ModifyVolume](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVolume.html)

```
If you reach the maximum volume modification rate per volume limit, you will need to wait at least six hours before applying further modifications to the affected EBS volume.
```

今度気が向いたら拡張中の性能を測ってみよう。