PowerVS IBM i 日記(21): IBM Cloud CLI で インスタンスを作成する・変更・削除する

# IBM Cloud CLI で インスタンスを作成する・変更・削除する
 
前回の「[IBM Cloud CLI で PowerVS に アクセスする](https://qiita.com/6onoda/items/01f0edd723316fcfa637)」では、IBM Cloud CLI を導入し、既存の PowerVS 資源にアクセスしました。

今回は、一歩進んで CLI でインスタンスの作成や変更、削除を試したいと思います。


今回は、プライベートのブートイメージから プロセッサー 0.25、メモリー 2GB のインスタンスを作成し、操作します。

## 情報の確認

コマンドとオプションを確認します。

### Docs での確認

IBM Cloud の Web サイト [https://cloud.ibm.com/docs] (https://cloud.ibm.com/docs) での資料のことを「Docs」と呼ぶのだそうです。

では、Docs で IBM Cloud CLI で PowerVS を操作する情報を確認しましょう。
日本語表示を選択するとドイツ語の資料が表示されるので、英語表示にします。

* [IBM® Power Systems™ Virtual Server CLI Reference](https://cloud.ibm.com/docs/power-iaas-cli-plugin?topic=power-iaas-cli-plugin-power-iaas-cli-reference&locale=en)

Docs でのインスタンス作成方法の場所はこちら。

* [Create a server instance](https://cloud.ibm.com/docs/power-iaas-cli-plugin?topic=power-iaas-cli-plugin-power-iaas-cli-reference&locale=en#-ibmcloud-pi-instance-create-)

「ibmcloud pi instance-create」で作成するのが分かります。
あとは、ポータルで指定したのと同様の内容をオプションで指定します。

> ibmcloud pi instance-create INSTANCE_NAME --image IMAGE [--memory MEMORY] <--network \"NETWORK1 [IP1]\">   [--processors PROCESSORS] [--processor-type PROC_TYPE] [--volumes \"VOLUME1 VOLUME2\"] [--key-name NAME] [--sys-type TYPE] [--replicants NUMBER] [--replicant-scheme SCHEME] [--replicant-affinity-policy AFFINITY_POLICY] [--IBMiCSS-license] [--IBMiDBQ-license] [--IBMiPHA-license] [--IBMiRDS-users NUMBER-USERS] [--json]


### CLI の help コマンドでの確認

ヘルプを見てみます。

PowerVS を操作する power-iaas 全体へのヘルプ「ibmcloud pi help」の結果は[前回のこちら](https://qiita.com/6onoda/items/01f0edd723316fcfa637)で確認しました。

今回は、インスタンス作成の詳細ヘルプを確認します。
各コマンドの詳細ヘルプは「ibmcloud pi help [command]」のため、インスタンス作成の詳細ヘルプは下記で確認できます。

```
ibmcloud pi help instance-create
```

日本語で表示されるので、こちらの方が優しいですね。

```
C:\Users\YASUHIROOnoda>ibmcloud pi help instance-create
名前:
  instance-create, inc - サーバー・インスタンスを作成します

使用法:
  ibmcloud pi instance-create INSTANCE_NAME --image IMAGE [--memory MEMORY] <--network \"NETWORK1 [IP1]\"> ...
    [--processors PROCESSORS] [--processor-type PROC_TYPE] [--volumes \"VOLUME1 VOLUME2\"] [--key-name NAME] [--sys-type TYPE]
     [--replicants NUMBER] [--replicant-scheme SCHEME] [--replicant-affinity-policy AFFINITY_POLICY]
     [--IBMiCSS-license] [--IBMiDBQ-license] [--IBMiPHA-license] [--IBMiRDS-users NUMBER-USERS] [--json]

   INSTANCE_NAME: インスタンスの名前

オプション:
  --image value                      オペレーティング・システムのイメージ ID または名前
  --memory value                     インスタンスに割り振るメモリー量 (GB)。 デフォルトは 2GB
  --networks value                   (非推奨 - 「network」で置き換え) このインスタンスに関連付けるネットワークの ID または 名前のスペース区切りリスト。
  --network value                    ネットワークのスペース区切りの ID/名前、およびインスタンスに関連付けるオプション IP アドレス
  --processors value                 インスタンスに割り振るプロセッサー量。 デフォルトは 1 コア
  --processor-type value             プロセッサーのタイプ: 「共有」、「専用」、または「上限あり」
  --volumes value                    このインスタンスに関連付けるボリュームの ID または名前のスペース区切りリスト
  --key-name value                   SSH 鍵の名前
  --sys-type value                   システム・タイプの名前 (「s922」、「e880」、「e980」)。 デフォルトは「s922」
  --storage-type value               スタック・イメージをデプロイするときのサーバー・デプロイメントのストレージ・タイプ
  --replicants value                 この要求で作成する重複インスタンス数
  --replicant-scheme value           重複 VM に使用する命名方式 (「suffix」、「prefix」)
  --replicant-affinity-policy value  multicreate の使用時に使用するアフィニティー・ポリシー (「affinity」、「anti-affinity 」)
  --IBMiCSS-license                  このインスタンスに関連付けられている IBMi CSS ソフトウェア・ライセンス
  --IBMiDBQ-license                  このインスタンスに関連付けられている IBMi DBQ ソフトウェア・ライセンス
  --IBMiPHA-license                  このインスタンスに関連付けられている IBMi PHA ソフトウェア・ライセンス
  --IBMiRDS-users value              このインスタンスに関連付けられている IBMi RDS ユーザー・ソフトウェア・ライセンスの数。デフォルトは IBMiRDSUsers=0 (ライセンスなし)
  --json                             出力を JSON でフォーマットします
```

## オプションの調査と指定

たくさんのオプションがあるようです。
オプションには、作成するインスタンスの名前以外は、事前に決定されている値を指定します。

値には、IBM Cloud で決定済みのものと、自分で作成したリソースの様に、ユーザー固有のものがあります。
ユーザー固有のものは、定義した名前や ID を調べる必要があります。

### ターゲットサービスの指定

まず、インスタンスを作成する場所のPowerVSサービスをリストし、ターゲットとして設定します。
この部分は捜査対象の「切り替え」であり、インスタンス作成のオプションの一部ではありません。

```
ibmcloud pi service-list
ibmcloud pi service-target サービスID
```

「SYD04」と「DAL」の二つのPowerVSサービスサービスが確認できました。
「SYD04」のサービスIDを指定して、「SYD04」をターゲットにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/243998e7-de23-2937-56fa-d21f878593cd.png)

### イメージ名

「--image value」にはイメージの名前を指定します。

IBM で提供しているイメージは「image-list-catalog(imglc)」でプライベートのイメージは「images(imgs)」で確認できます。

```
ibmcloud pi image-list-catalog
ibmcloud pi images
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/0acf0eb6-8038-b46c-7063-de0133691c46.png)

今回はプライベートの「V7R3-20201013」を使いましょう。

### メモリー量

メモリー量は「--memory value」で指定します。デフォルトは 2GB とヘルプあります。
指定せずに、デフォルトを使いましょう。

### ネットワーク

ネットワークの設定は「--network value」で行います。
「--networks value」は非推奨です。

現在のネットワーク一覧は「networks(nets)」で確認できます。

```
ibmcloud pi networks
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/3f3c3837-96db-416f-3885-f3696aa25538.png)

今回はパブリックネットワークの「public-192_168_154_192-29-VLAN_2020」を使います。

### プロセッサー量

プロセッサー量は「--processors value」で指定します。

デフォルト値は 1 コアですが、最低の 0.25 にします。

### プロセッサーのタイプ

プロセッサーのタイプは「--processor-type value」で指定します。
日本語のヘルプには「共有」「専用」「上限あり」とありますが、翻訳のし過ぎすね。
実際使えるのは「shared」「dedicated」「capped」です。

「shared」を使います。

### ボリューム

追加ボリュームを「--volumes value」で指定できますが、今回は 80GB のロードソースデバイスだけでいいので指定しません。

### SSH 鍵

IBM i へのアクセスには Cloud に保持した SSH 鍵は使いません。「--key-name value」は指定しません。

### システム・タイプ

デプロイ先のサーバーのタイプを、「--sys-type value」で指定します。

デフォルトで「s922」が選択されますので、今回は指定しません。

### サーバー・デプロイメントのストレージ・タイプ

IBM 提供のイメージからデプロイする時は、ストレージ・タイプが選べます、
「層1」「層3」というやつですね。

今回はプライベートイメージを、利用するので選べません。
自動的に、プライベートイメージと同じ「層」が使われます。
そのため、指定しません。

### 複数台の作成－インスタンスの作成数、命名方式とアフィニティー・ポリシー

Power HA を構成した[こちら](https://qiita.com/6onoda/items/1b98c28db3942a1c3a79)では、まとめて 2 台、インスタンスを作成しました。
そのような場合は「--replicants value」で台数を「-replicant-scheme value」で命名方式を指定します。
また「--replicant-affinity-policy value」でアフィニティー・ポリシー(同じサーバーにデプロイしたいのか別のサーバーにデプロイしたいのか)を指定します。

今回は 1 台のみを作成しますので、複数台用のこれらのオプションは指定しません。

### IBM i 用の追加ライセンス

IBM i 用の 4 つの追加ライセンスを指定するオプションです。
「--IBMiCSS-license」「--IBMiDBQ-license」「--IBMiPHA-license」「--IBMiRDS-users value」で指定できます。

今回は追加しませんので、指定しません。

### 出力結果のフォーマット方式

「--json」を指定すると、出力が JSON フォーマットになります。

今回は指定しません

### オプションの確認

資料を見ると、多くのオプションがありましたが、ひとつずつ見ていけば、今回は、下記の 4つを指定すればよいようです。

```
--image V7R3-20201013
--network public-192_168_154_192-29-VLAN_2020
--processors 0.25
--processor-type shared
```

## インスタンスの作成

インスタンスを作成しましょう。
「instance-create」に今まで確認したオプションを指定します。
「IBMi-from-CLI」という名前のインスタンスを作成します。

```
ibmcloud pi instance-create IBMi-from-CLI ^
--image V7R3-20201013 ^
--network public-192_168_154_192-29-VLAN_2020 ^
--processors 0.25 ^
--processor-type shared
```

私の環境は Windows です。
「^」は、Windows のコマンドプロンプトでの継続行を指定する記号です。
コマンドが長い場合に複数行に分割するために指定します。
Linux や Mac なら「\」で継続行を表します。

作成が開始されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/507de15c-9beb-7b03-6bdd-dda1ac7c8967.png)

コンソールにも「作成」のメッセージが表示されインスタンスが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/83dda31c-c933-efe2-1b5e-f18c6258d277.png)

インスタンスの詳細は、下記で確認できます。

```
ibmcloud pi instance [インスタンスID]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/bc9c8762-a690-71ff-e360-ab95a01df37e.png)

「--json」を付けて表示させると、結果が JSON 形式で得られます。
出力内容をプログラムで処理する場合は、こちらの方が便利でしょう。

```
ibmcloud pi instance [インスタンスID] --json
```

```
C:\Users\YASUHIROOnoda>ibmcloud pi instance 40aeb455-a7b8-4d4c-8b1e-d8ce4ff9aec6 --json
{
    "addresses": [
        {
            "externalIP": "xxx.xxx.xxx.xxx",
            "href": "/pcloud/v1/cloud-instances/b1f0b27fee8b43658e8148321f4cfef4/pvm-instances/40aeb455-a7b8-4d4c-8b1e-d8ce4ff9aec6/networks/e8710754-393c-4178-8bf6-a8f9871bb28e",
            "ip": "192.168.154.197",
            "ipAddress": "192.168.154.197",
            "macAddress": "fa:03:c5:a8:e8:20",
            "networkID": "e8710754-393c-4178-8bf6-a8f9871bb28e",
            "networkName": "public-192_168_154_192-29-VLAN_2020",
            "type": "fixed",
            "version": 4
        }
    ],
    "creationDate": "2020-10-26T06:32:46.000Z",
    "diskSize": 80,
    "health": {
        "lastUpdate": "2020-10-26T06:47:56.737419",
        "status": "OK"
    },
    "imageID": "2ecc2326-0600-47ea-ad7d-42d031034846",
    "maxmem": 4,
    "maxproc": 0.5,
    "memory": 2,
    "migratable": false,
    "minmem": 2,
    "minproc": 0.25,
    "networkIDs": [
        "e8710754-393c-4178-8bf6-a8f9871bb28e"
    ],
    "networks": [
        {
            "externalIP": "xxx.xxx.xxx.xxx",
            "href": "/pcloud/v1/cloud-instances/b1f0b27fee8b43658e8148321f4cfef4/pvm-instances/40aeb455-a7b8-4d4c-8b1e-d8ce4ff9aec6/networks/e8710754-393c-4178-8bf6-a8f9871bb28e",
            "ip": "192.168.154.197",
            "ipAddress": "192.168.154.197",
            "macAddress": "fa:03:c5:a8:e8:20",
            "networkID": "e8710754-393c-4178-8bf6-a8f9871bb28e",
            "networkName": "public-192_168_154_192-29-VLAN_2020",
            "type": "fixed",
            "version": 4
        }
    ],
    "operatingSystem": "V7R3M0 410 7",
    "osType": "ibmi",
    "pinPolicy": "none",
    "procType": "shared",
    "processors": 0.25,
    "pvmInstanceID": "40aeb455-a7b8-4d4c-8b1e-d8ce4ff9aec6",
    "serverName": "IBMi-from-CLI",
    "softwareLicenses": {
        "ibmiCSS": false,
        "ibmiDBQ": false,
        "ibmiPHA": false,
        "ibmiRDS": false
    },
    "srcs": [
        [
            {
                "src": "00000000",
                "timestamp": "2020-10-26T06:45:21Z"
            }
        ]
    ],
    "status": "ACTIVE",
    "storageType": "tier3",
    "sysType": "s922",
    "updatedDate": "2020-10-26T06:32:46.000Z",
    "volumeIDs": [
        "70d9bc41-d507-444e-9c13-ab202c99f253"
    ]
}
```

## コンソール URL の取得

「instance-get-console」でコンソールの URL が取得できます。

```
ibmcloud pi instance-get-console [インスタンスID]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/f97117d0-b232-0689-ced9-5c2dac58d651.png)


URL を開くとコンソールが表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/6445b3cb-2bf2-5838-a56e-3d1e0406ad65.png)

## インスタンスのサイズやメモリー量の変更

PowerVS はシステムをシャットダウンしても、課金が続きます。

課金を抑える方法として、日中はサイズを大きくし夜間は小さくするなど、状況によってサイス変更をすることが考えれられます。

しかし、ポータルからプラウザーで手動で行うのは、あまりにも煩雑です。
こんな時こそ CLI を使いましょう。

CLI からヘルプを表示しオプションを確認します。

```
ibmcloud pi help instance-update
```

```
C:\Users\YASUHIROOnoda>ibmcloud pi help  instance-update
名前:
  instance-update, inu - サーバー・インスタンスを更新します

使用法:
  ibmcloud pi instance-update INSTANCE_ID [--memory AMOUNT] [--name NEW_NAME] [--processors NUMBER] [--processor-type TYPE] [--json]

   INSTANCE_ID: インスタンスの固有 ID または名前

オプション:
  --memory value          サーバー・インスタンス用の新規メモリー量
  --name value            サーバー・インスタンスの新しい名前
  --processors value      サーバー・インスタンス用の新規プロセッサー量
  --processor-type value  サーバー・インスタンス用の新規プロセッサー・タイプ
  --json                  出力を JSON でフォーマットします
```

今回のインスタンスのサイズを倍にしましょう。

```
ibmcloud pi instance-update [インスタンスID] ^
--memory 4 ^
--processors 0.5
```

変更されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/217b71de-0282-3dd8-61c3-0f31126b973b.png)

さらに倍にしてみましょう。

```
ibmcloud pi instance-update [インスタンスID] ^
--memory 4 ^
--processors 0.5
```

「the requested changes would require the pvm-instance 40aeb455-a7b8-4d4c-8b1e-d8ce4ff9aec6 to be in a 'shutdown' state」としてエラーになりました。

システムが起動している場合は、起動時の 1/2 ～ 2 倍の範囲のキャパシティ変更しかできません。
その範囲を超えたので、エラーになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/c145e87a-d53f-8b8e-9d84-91a0c9d458dc.png)

大きく変更したい場合は、OS のシャットダウンのスケジュールとうまく合わせましょう。

## インスタンスの削除

インスタンスのの削除は「instance-delete」で行います。

```
ibmcloud pi instance-delete [インスタンスID] 
```

しばらくコマンド実行後、しばらく「ibmcloud pi instances」で表示されていましたが、やがて、削除が完了し表示から消えました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/534c9454-df70-e833-827a-de06875ea217.png)

---
当日記のIndexは[こちら](https://qiita.com/6onoda/items/f146c78c0c1bbe905a42)です。

---
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。