Endurane Storage/Performance Storageのサイズ拡張機能およびIOPS変更機能

# 1.はじめに
Endurance Storage/Performance Storageは、非常に色々な用途で利用されていることから、機能拡張も随時行われています。最近では、

- [デフォルトで暗号化](https://qiita.com/testnin2/items/0a470db5ec7b7c9380b4)
- [0.25/2/4 IOPS per GBに加えて、10 IOPS per GBのサポート](https://qiita.com/testnin2/items/0a470db5ec7b7c9380b4)
- snapshot/replicationのサポート
- duplicate LUN機能
- 月額購入だけでなく、時間単位での購入が可能に

と順に機能を増やしています。今回、これらの新機能に加えて2017/12/4頃に

- 購入済みEndurance Storage/Performance Storgeのサイズを動的に増やしたり（Expandable Volumes）、IOPS性能を動的に変更（Adjustable IOPS）できる機能

が加わりました。いままこれにより、「小さなサイズで始めて、後で大きくする」「平時は遅いIOPSのストレージを利用し、繁忙期のみ高速のIOPSにアップグレードする」「災対の待ち受けには遅いIOPSのストレージを利用し、災害が発生して切り替えが起こった時のみ高速のIOPSにアップグレードする」などのシナリオが**ストレージの移行なしに**可能になります。まさに「これぞクラウド！」っていう機能ですね。
なお、今はAPI経由でしか処理できませんが、そのうちCustomer Portalからも変更可能になるようです。

# 2.事前準備
一番簡単なのはslcliコマンドを利用することです。最新のslcliコマンドを導入しておきましょう。

```
# pip install --upgrade SoftLayer
# slcli --version
slcli (SoftLayer Command-line), version 5.3.1
```

# 3.使い方
Block Storageには`slcli block volume-modify`を、File Storageには`slcli file volume-modify`を利用します。

```
# slcli block volume-modify --help
Usage: slcli block volume-modify [OPTIONS] VOLUME_ID

  Modify an existing block storage volume.

Options:
  -c, --new-size INTEGER        New Size of block volume in GB. ***If no size
                                is given, the original size of volume is
                                used.***
                                Potential Sizes: [20, 40, 80, 100,
                                250, 500, 1000, 2000, 4000, 8000, 12000]
                                Minimum: [the original size of the volume]
  -i, --new-iops INTEGER        Performance Storage IOPS, between 100 and 6000
                                in multiples of 100 [only for performance
                                volumes] ***If no IOPS value is specified, the
                                original IOPS value of the volume will be
                                used.***
                                Requirements: [If original IOPS/GB
                                for the volume is less than 0.3, new IOPS/GB
                                must also be less than 0.3. If original
                                IOPS/GB for the volume is greater than or
                                equal to 0.3, new IOPS/GB for the volume must
                                also be greater than or equal to 0.3.]
  -t, --new-tier [0.25|2|4|10]  Endurance Storage Tier (IOPS per GB) [only for
                                endurance volumes] ***If no tier is specified,
                                the original tier of the volume will be
                                used.***
                                Requirements: [If original IOPS/GB
                                for the volume is 0.25, new IOPS/GB for the
                                volume must also be 0.25. If original IOPS/GB
                                for the volume is greater than 0.25, new
                                IOPS/GB for the volume must also be greater
                                than 0.25.]
  -h, --help                    Show this message and exit.
```

```
# slcli file volume-modify --help
Usage: slcli file volume-modify [OPTIONS] VOLUME_ID

  Modify an existing file storage volume.

Options:
  -c, --new-size INTEGER        New Size of file volume in GB. ***If no size
                                is given, the original size of volume is
                                used.***
                                Potential Sizes: [20, 40, 80, 100,
                                250, 500, 1000, 2000, 4000, 8000, 12000]
                                Minimum: [the original size of the volume]
  -i, --new-iops INTEGER        Performance Storage IOPS, between 100 and 6000
                                in multiples of 100 [only for performance
                                volumes] ***If no IOPS value is specified, the
                                original IOPS value of the volume will be
                                used.***
                                Requirements: [If original IOPS/GB
                                for the volume is less than 0.3, new IOPS/GB
                                must also be less than 0.3. If original
                                IOPS/GB for the volume is greater than or
                                equal to 0.3, new IOPS/GB for the volume must
                                also be greater than or equal to 0.3.]
  -t, --new-tier [0.25|2|4|10]  Endurance Storage Tier (IOPS per GB) [only for
                                endurance volumes] ***If no tier is specified,
                                the original tier of the volume will be
                                used.***
                                Requirements: [If original IOPS/GB
                                for the volume is 0.25, new IOPS/GB for the
                                volume must also be 0.25. If original IOPS/GB
                                for the volume is greater than 0.25, new
                                IOPS/GB for the volume must also be greater
                                than 0.25.]
  -h, --help                    Show this message and exit.
```

# 4.実験例

## 4.1 File Storageの確認

```
# slcli file volume-list
:..........:..................:............:..............:.............:............:.......................................:.....................:................................................................:...................:
:    id    :     username     : datacenter : storage_type : capacity_gb : bytes_used :                ip_addr                : active_transactions :                           mount_addr                           : rep_partner_count :
:..........:..................:............:..............:.............:............:.......................................:.....................:................................................................:...................:
: 35170193 : IBM02SEV319556_7 :   tok02    :  ENDURANCE   :      20     :     -      : fsm-tok0201b-fz.service.softlayer.com :          -          : fsm-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_7/data01 :         -         :
: 35185175 : IBM02SEV319556_8 :   tok02    :  ENDURANCE   :      20     :     -      : fsf-tok0201b-fz.service.softlayer.com :          -          : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :         -         :
:..........:..................:............:..............:.............:............:.......................................:.....................:................................................................:...................:
```

## 4.2 ストレージサイズの拡張

20GB -> 100GBに拡張してみます。

```
# slcli file volume-detail 35170193
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35170193                                                       :
:                 Username : IBM02SEV319556_7                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : LOW_INTENSITY_TIER                                             :
:              Data Center : tok02                                                          :
:                Target IP : fsm-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsm-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_7/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 0                                                              :
:..........................:................................................................:

# slcli file volume-modify --new-size 100 35170193
Order #21324119 placed successfully!
 > Storage as a Service
 > 100 GBs
 > 0.25 IOPS per GB
 > 5 GB (Snapshot Space)

# slcli file volume-detail 35170193
:............................:................................................................:
:                       Name : Value                                                          :
:............................:................................................................:
:                         ID : 35170193                                                       :
:                   Username : IBM02SEV319556_7                                               :
:                       Type : ENDURANCE                                                      :
:              Capacity (GB) : 100GB                                                          :
:                 Used Space : 0B                                                             :
:             Endurance Tier : LOW_INTENSITY_TIER                                             :
:                Data Center : tok02                                                          :
:                  Target IP : fsm-tok0201b-fz.service.softlayer.com                          :
:              Mount Address : fsm-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_7/data01 :
:     Snapshot Capacity (GB) : 5                                                              :
:   # of Active Transactions : 0                                                              :
:            Replicant Count : 0                                                              :
: Original Volume Properties : :......................:.......:                               :
:                            : :       Property       : Value :                               :
:                            : :......................:.......:                               :
:                            : : Original Volume Size :   20  :                               :
:                            : :......................:.......:                               :
:............................:................................................................:
```


## 4.3 IOPSの変更

  2 IOPS per GB(READHEAVY_TIER)
→ 4 IOPS per GB(WRITEHEAVY_TIER)
→ 10 IOPS per GB(10_IOPS_PER_GB)
→ 2 IOPS per GB(READHEAVY_TIER)
と順に変更してみます。

```
# slcli file volume-detail 35185175
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35185175                                                       :
:                 Username : IBM02SEV319556_8                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : READHEAVY_TIER                                                 :
:              Data Center : tok02                                                          :
:                Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 0                                                              :
:..........................:................................................................:

# slcli file volume-modify --new-tier 4 35185175
Order #21335937 placed successfully!
 > Storage as a Service
 > 20 GBs
 > 4 IOPS per GB
 > 5 GB (Snapshot Space)

# slcli file volume-detail 35185175
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35185175                                                       :
:                 Username : IBM02SEV319556_8                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : WRITEHEAVY_TIER                                                :
:              Data Center : tok02                                                          :
:                Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 0                                                              :
:..........................:................................................................:

# slcli file volume-modify --new-tier 10 35185175
Order #21335011 placed successfully!
 > Storage as a Service
 > 20 GBs
 > 10 IOPS per GB
 > 5 GB (Snapshot Space)

# slcli file volume-detail 35185175
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35185175                                                       :
:                 Username : IBM02SEV319556_8                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : 10_IOPS_PER_GB                                                 :
:              Data Center : tok02                                                          :
:                Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 0                                                              :
:..........................:................................................................:

# slcli file volume-modify --new-tier 2 35185175
Order #21336901 placed successfully!
 > Storage as a Service
 > 20 GBs
 > 2 IOPS per GB
 > 5 GB (Snapshot Space)

# slcli file volume-detail 35185175
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35185175                                                       :
:                 Username : IBM02SEV319556_8                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : READHEAVY_TIER                                                 :
:              Data Center : tok02                                                          :
:                Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 0                                                              :
:..........................:................................................................:
```

## 4.4 レプリカの自動更新
すでにレプリカが設定されていた場合には、メインサイトのストレージを変更すると、レプリケーション先のストレージも自動的に変更されます。

```
#slcli file volume-detail 35185175
:..........................:................................................................:
:                     Name : Value                                                          :
:..........................:................................................................:
:                       ID : 35185175                                                       :
:                 Username : IBM02SEV319556_8                                               :
:                     Type : ENDURANCE                                                      :
:            Capacity (GB) : 20GB                                                           :
:               Used Space : 0B                                                             :
:           Endurance Tier : WRITEHEAVY_TIER                                                :
:              Data Center : tok02                                                          :
:                Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:            Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:   Snapshot Capacity (GB) : 5                                                              :
: # of Active Transactions : 0                                                              :
:          Replicant Count : 1                                                              :
:       Replication Status : REPLICATION_PROVISIONING_COMPLETED                             :
:        Replicant Volumes : :..............:.......................................:       :
:                          : : Replicant ID :                35235253               :       :
:                          : :..............:.......................................:       :
:                          : : Volume Name  :         IBM02SEV319556_8_REP_1        :       :
:                          : :  Target IP   : fsf-hkg0201b-fz.service.softlayer.com :       :
:                          : : Data Center  :                 hkg02                 :       :
:                          : :   Schedule   :           REPLICATION_DAILY           :       :
:                          : :..............:.......................................:       :
:..........................:................................................................:

# slcli file volume-modify --new-size 21 35185175
Order #21367293 placed successfully!
 > Storage as a Service
 > 21 GBs
 > 21 GBs
 > 4 IOPS per GB
 > 4 IOPS per GB
 > 5 GB (Snapshot Space)
 > 5 GB (Snapshot Space)
 > Replication for tier-based performance. Replicant of: IBM02SEV319556_8

# slcli file volume-detail 35185175
:............................:................................................................:
:                       Name : Value                                                          :
:............................:................................................................:
:                         ID : 35185175                                                       :
:                   Username : IBM02SEV319556_8                                               :
:                       Type : ENDURANCE                                                      :
:              Capacity (GB) : 21GB                                                           :
:                 Used Space : 0B                                                             :
:             Endurance Tier : WRITEHEAVY_TIER                                                :
:                Data Center : tok02                                                          :
:                  Target IP : fsf-tok0201b-fz.service.softlayer.com                          :
:              Mount Address : fsf-tok0201b-fz.service.softlayer.com:/IBM02SEV319556_8/data01 :
:     Snapshot Capacity (GB) : 5                                                              :
:   # of Active Transactions : 0                                                              :
:            Replicant Count : 1                                                              :
:         Replication Status : REPLICATION_PROVISIONING_COMPLETED                             :
:          Replicant Volumes : :..............:.......................................:       :
:                            : : Replicant ID :                35235253               :       :
:                            : :..............:.......................................:       :
:                            : : Volume Name  :         IBM02SEV319556_8_REP_1        :       :
:                            : :  Target IP   : fsf-hkg0201b-fz.service.softlayer.com :       :
:                            : : Data Center  :                 hkg02                 :       :
:                            : :   Schedule   :           REPLICATION_DAILY           :       :
:                            : :..............:.......................................:       :
: Original Volume Properties : :......................:.......:                               :
:                            : :       Property       : Value :                               :
:                            : :......................:.......:                               :
:                            : : Original Volume Size :   20  :                               :
:                            : :......................:.......:                               :
:............................:................................................................:

# slcli file volume-detail 35235253
:..........................:......................................................................:
:                     Name : Value                                                                :
:..........................:......................................................................:
:                       ID : 35235253                                                             :
:                 Username : IBM02SEV319556_8_REP_1                                               :
:                     Type : ENDURANCE                                                            :
:            Capacity (GB) : 21GB                                                                 :
:               Used Space : 0B                                                                   :
:           Endurance Tier : WRITEHEAVY_TIER                                                      :
:              Data Center : hkg02                                                                :
:                Target IP : fsf-hkg0201b-fz.service.softlayer.com                                :
:            Mount Address : fsf-hkg0201b-fz.service.softlayer.com:/IBM02SEV319556_8_REP_1/data01 :
:   Snapshot Capacity (GB) : 5                                                                    :
:    Snapshot Used (Bytes) : 172032                                                               :
: # of Active Transactions : 0                                                                    :
:          Replicant Count : 0                                                                    :
:..........................:......................................................................:
```

## 4.5 ストレージの拡張単位
上記の結果からわかるように、1GB単位でストレージは拡張できます。

# 5. 注意点および制約事項
重複の内容もありますが、改めて記載します。

## 5.1 オンラインで変更されるが即時には反映はされない
Endurance Storageの新規購入に必要な時間と同様の時間が発生します（５-10分程度？）

## 5.2 サイズ拡張は1GB単位から可能
Customer Portalからは指定されたサイズのストレージしか注文できませんが、API経由であればそもそもサイズは1GB単位で自由に指定して注文可能のようです（知らなかった！）。なので、サイズ変更も任意の1GB単位で任意のサイズで拡張できるんでしょうね。以下は新規購入の際の例です。

```
# slcli file volume-order --billing hourly --tier 0.25 --size 38 --storage-type endurance --location tok02
Order #21369919 placed successfully!
 > Storage as a Service
 > File Storage
 > 38 GBs
 > 0.25 IOPS per GB
```

## 5.3 サイズは大きくはできるが、小さくはできない
"Expandable Volumes"という名前だから仕方がないですね。

```
# slcli file volume-modify --new-size 80 35170193
SoftLayerAPIError(SoftLayer_Exception_Order): Ordered size (80 GB) must be greater than the current size of the volume (100 GB).
```

## 5.4 Endurance Storageにおいて、0.25 IOPSのストレージは2 IOPS/4 IOPS/10 IOPSに変更できない。また2 IOPS/4 IOPS/10 IOPSのストレージは0.25IOPSに変更できない。
これはslcliコマンドのヘルプに書いてあります。自由に変更できるのは、2 IOPS/4 IOPS/10 IOPSの間だけのようです。一番安いストレージから徐々に速くしていく構成は、残念ながら今はできません。
以下のマニュアルによると、**「Block Storage and File Storage provisioned with either Endurance or Performance at 2 IOPS per GB or higher with backed by all-flash storage.」**と書かれてあります。0.25 IOPSのDISK構成と2 IOPS以上のDISK構成は異なるのでその間の移行が容易ではないのかもしれません。
https://console.bluemix.net/docs/infrastructure/FileStorage/new-ibm-block-and-file-storage-location-and-features.html#new-locations-and-features-of-block-storage-and-file-storage

```
# slcli file volume-modify --new-tier 2 35170193
SoftLayerAPIError(SoftLayer_Exception_Order): Volume performance tier is not eligible for performance changes.
```
## 5.5 Performance Storageにおいて、0.3 IOPS/GB未満だったストレージは0.3 IOPS/GBより高速なものに変更できない。また、0.3 IOPS/GB以上だったストレージは、0.3 IOPS/GBより低速に変更できない。
これもEundrance Storageの時と同様の制約のようです。

## 5.6 IOPSのTierを小さくできるのは、30日に1回まで。
2回目の減少は、前回より30日を超過する必要があります。30日以内に２回目のTierの縮小を試みると、以下のエラーが発生します。

```
# slcli file volume-modify --new-tier 2 35185175
SoftLayerAPIError(SoftLayer_Exception_Order): You can only decrease the performance of this volume every 30 days. This volume had a performance downgrade 0 days ago.
```

## 5.7 レプリカ構成済みのストレージは、自動的にレプリカ側も変更が反映される
メインサイトとDRサイトは同一のストレージである必要があるためです。いちいちDRサイト分まで変更しなくて良いのは便利ですね。

# 6 最後に
今後も、ますますEndurance Storage/Performance Storageの機能は拡張されていくと聞いています。とても楽しみですね！