Java Cloud ServiceのインスタンスをPSM CLIで作成してみた


# 概要
Oracle CloudのCLI(PSM CLI)を使えるようにし、利用してDatabase Cloud Serviceを作成する手順を以前投稿しました。

- [Oracle Cloudのコマンドライン・インターフェース(CLI)を使えるようにしてみた](http://qiita.com/shinyay/items/a3773b37fdbb677e52b1)
- [Database Cloud ServiceのインスタンスをPSM CLIで作成してみた](http://qiita.com/shinyay/items/e6e0c038090039dabb18)

このようにブラウザベースGUIで作成するのと同様に、PSM CLIでもOracle Cloudのインスタンスが作成できる事が分かったと思います。

今回は、以前はブラウザから作成したJava Cloud ServiceをPSM CLIを利用して作成してみます。
- [Oracle Java Cloud Serviceインスタンスを作ってみた](http://qiita.com/shinyay/items)

## PSM CLI 使用方法概要
このPSM CLIはマニュアルとして以下に利用方法が記載されています。

- [Oracle Cloud psm CLI Reference](http://docs.oracle.com/cloud/latest/jcs_gs/PSCLI/toc.htm)

基本的なコマンド・シンタックスは以下のようになります。

```bash
psm [クラウド・サービス名] [コマンド] (help)
```

PSM CLIが2016/9/1時点で対応しているクラウド・サービスは以下のものになります。

|コマンド入力名|サービス名|
|---|---|
|dbcs|Database Cloud Service|
|jcs|Java Cloud Service|
|accs|Application Container Cloud Service|
|ggcs|GoldenGate Cloud Service|
|MySQLCS|MySQL Cloud Serivce|

# PSM CLI 使用方法 - Java Cloud Service
Java Cloud ServiceでのPSM CLIで実施できるコマンドは、2016/9/1時点で以下のものがあります。

## インスタンス・ライフサイクル
- Java Cloud Serviceのインスタンスの作成・削除や停止といった、ライフサイクルに関する操作

|コマンド|説明|
|---|---|
|psm jcs services|作成済みインスタンス一覧表示|
|psm jcs service|作成済みインスタンスの詳細情報表示|
|psm jcs create-service|インスタンスの作成|
|psm jcs delete-service|インスタンスの削除|
|psm jcs restart|インスタンスの再起動|
|psm jcs stop|インスタンスの停止|
|psm jcs start|インスタンスの開始|

## スケーリング
- Java Cloud Serviceのインスタンスに割り当てられているシェイプ（CPU/メモリ）のサイズ変更、およびWebLogicクラスタのサイズ変更

|コマンド|説明|
|---|---|
|psm jcs scale-up|スケールアップ<br>- シェイプの追加<br>- ローカルストレージの追加|
|psm jcs scale-down|スケールダウン<br>シェイプの縮小|
|psm jcs scale-out|クラスタ・スケール・アウト<br>クラスタ・メンバーに管理対象サーバの追加|
|psm jcs scale-in|クラスタ・スケール・イン<br>クラスタ・メンバーの削除|

## アクセス・コントロール
- Java Cloud Serviceのインスタンスへのアクセス・ルール（アクセス系経路や開放ポート）の設定構成

|コマンド|説明|
|---|---|
|psm jcs access-rules|アクセス・ルールの一覧表示|
|psm jcs create-access-rule|アクセス・ルールの作成|
|psm jcs delete-access-rule|アクセス・ルールの削除|
|psm jcs disable-access-rule|アクセス・ルールの無効化|
|psm jcs enable-access-rule|アクセス・ルールの有効化|

## バックアップ・リストア
- Java Cloud Serviceのインスタンスのバックアップ取得やバックアップからのリストア操作、またバックアップに関する構成

|コマンド|説明|
|---|---|
|psm jcs update-backup-config|バックアップ構成の更新|
|psm jcs update-backup-config|バックアップ構成の一覧表示|
|psm jcs backup|バックアップの取得<br>即時バックアップ|
|psm jcs delete-backup|バックアップの削除|
|psm jcs view-backups|取得済みのバックアップ表示|
|psm jcs view-backups|取得済みのバックアップ一覧表示|
|psm jcs restore|バックアップからのリストア|
|psm jcs view-restore|リストア操作の表示|
|psm jcs view-restores|リストア操作の一覧表示|

## パッチ適用
- Java Cloud Serviceのインスタンスへのパッチ適用操作

|コマンド|説明|
|---|---|
|psm jcs applied-patches|適用済みパッチの一覧表示|
|psm jcs available-patches|適用可能パッチの一覧表示|
|psm jcs precheck-patch|パッチ適用の事前確認|
|psm jcs patch|パッチ適用|
|psm jcs rollback|適用したパッチのロールバック|

## 操作状況表示
- PSM CLIで実施した操作（ジョブ）の進行状態の表示

|コマンド|説明|
|---|---|
|psm jcs operation-status|ジョブの状態表示|

# PSM CLIによるインスタンス作成 - Java Cloud Service
PSM CLIを利用してJava Cloud Servieのインスタンスを作成します。

作成する際に使用するコマンドは、「**psm jcs create-service**」です。

このコマンドに関するリファレンスは、マニュアルの以下の箇所に記載があります。

- [psm jcs create-service](http://docs.oracle.com/cloud/latest/jcs_gs/PSCLI/GUID-9007B97A-903B-4BBC-B709-63F32AA9CFC5.htm#PSCLI-GUID-9007B97A-903B-4BBC-B709-63F32AA9CFC5)

### psm jcs create-service シンタックス
「**psm jcs create-service**」は、以下のようなシンタックスで利用します。

```bash
psm jcs create-service -c|--config-payload json-file [-of|--output-format json|html]
```

構成するJava CLoud Serviceインスタンスの情報をJSONファイル(インスタンス構成ペイロード)で定義しておき、それをコマンド実施時に指定して作成操作を行います。

### Java Cloud Serviceインスタンス構成ペイロードのサンプル
以下に、「**psm jcs create-service -c**」で指定する構成情報のJSONを用意しました。

- LS12cR2-EE-LB-Simple.json 

```LS12cR2-EE-LB-Simple.json
{
    "serviceName" : "WLS12cR2-EE-LB-Default",
    "level" : "PAAS",
    "subscriptionType" : "HOURLY",
    "enableAdminConsole" : true,
    "description" : "WLS12cR2 Enterprise Edition with Traffic Director, configured with Multitenant",
    "provisionOTD" : true,
    "cloudStorageContainer" : "Storage-<IDENTITY DOMAIN名>/Container_JCS",
    "cloudStorageUser" : "<Storage Cloudユーザ>",
    "cloudStoragePassword" : "<Storage Cloudユーザパスワード>",
    "createStorageContainerIfMissing" : true,
    "sampleAppDeploymentRequested" : true, 
    "parameters" : [
    {
        "type" : "weblogic",
        "version" : "12.2.1",
        "edition" : "EE",
        "managedServerCount" : "2",
        "adminUserName" : "weblogic",
        "adminPassword" : "<WLS管理者パスワード>",
        "dbServiceName" : "DB12cHP",
        "dbaName" : "SYS",
        "dbaPassword" : "<DB管理者パスワード>",
        "shape" : "oc3",
        "VMsPublicKey" : : "<SSH公開鍵テキスト>",
    {
        "type" : "otd",
        "adminUserName" : "weblogic",
        "adminPassword" : "<OTD管理者パスワード>",
        "shape" : "oc3",
        "VMsPublicKey": "<SSH公開鍵テキスト>"
    }
    ]
}
```

上記のJSONは、次のような構成内容となっています。

|構成項目|内容|
|---|---|
|WLSバージョン|12.2.1.0|
|エディション|[Enterprise Edition](https://docs.oracle.com/cd/E60665_01/jcs_gs/JSCUG/GUID-35AC2310-F95C-46F7-AF22-C198C0DBF8A2.htm#GUID-5BEB5C7A-DAEE-40C6-BDE0-819E10D62848)|
|シェイプ|[OC3 (1 OCPU / 7.5 GBメモリ)](https://docs.oracle.com/cd/E60665_01/jcs_gs/JSCUG/GUID-31F00F2C-221F-4069-8E8A-EE48BFEC53A2.htm#GUID-98DD6CE1-480F-4AA9-8131-A1D3D274440F)|
|クラスタ・サイズ|2<br>管理サーバ:1 + 管理対象サーバ:2インスタンス|
|ロードバランサ使用|ロードバランサを構成<br>Oracle Traffic Directorのプロビジョニング|
|管理者ユーザ|WebLogic及びTraffic Directorの管理者ユーザ名|
|管理者ユーザ|WebLogic及びTraffic Directorの管理者パスワード|
|バックアップ環境|ドメイン・バックアップ先としてStorage Cloud Serviceを使用<br>Storage Cloud Serviceのユーザ及びパスワード|

以下のような環境構成のJava Cloud Service インスタンスを生成します。
![wls-domain.png](https://qiita-image-store.s3.amazonaws.com/0/127983/48308ee3-c13a-167b-2153-b0a9d1d6b825.png)

### psm jcs create-service コマンド実施

```bash
$ psm jcs create-service -c ./WLS12cR2-EE-LB-Simple.json 
"Accepted"
Job ID : 2204865
```

「**psm jcs create-service**」を実施すると、バックエンドでインスタンスの作成操作がJob IDが採番され、IDを元に状況確認が行えます。

### インスタンス作成操作状況の確認
インスタンス作成操作状況を確認する際に使用するコマンドは、「**psm jcs create-service -j <JobID>**」です。

実行すると以下のように状況がJSON形式で表示されます。

```bash
$ psm jcs operation-status -j 2204865
{
    "activityLogId":1113173,
    "serviceName":"WLS12cR2-EE-LB-Default",
    "serviceType":"jaas",
    "identityDomain":"iddomain",
    "serviceId":59184,
    "jobId":2204865,
    "startDate":"2016-09-18T12:43:57.387+0000",
    "endDate":"2016-09-18T13:18:32.670+0000",
    "status":"SUCCEED",
    "operationId":59184,
    "operationType":"CREATE_SERVICE",
    "summaryMessage":"CREATE_SERVICE",
    "authDomain":"iddomain",
    "authUser":"shinyay",
    "initiatedBy":"USER",
    "messages":[
        {
            "activityDate":"2016-09-18T12:43:57.387+0000",
            "message":"Activity Submitted"
        },
        {
            "activityDate":"2016-09-18T12:44:03.841+0000",
            "message":"Activity Started"
        },
        {
            "activityDate":"2016-09-18T12:44:14.495+0000",
            "message":"Created Compute resources for WebLogic Server..."
        },
        {
            "activityDate":"2016-09-18T12:44:22.401+0000",
            "message":"Created security resources for the service..."
        },
        {
            "activityDate":"2016-09-18T13:01:20.724+0000",
            "message":"Established SSH connectivity to WebLogic Administration Server... Used private side of a public key for [oracle]"
        },
        {
            "activityDate":"2016-09-18T13:01:23.611+0000",
            "message":"Established SSH connectivity to Host(s) [WLS12cR2_server_2] from Administration Server..."
        },
        {
            "activityDate":"2016-09-18T13:07:30.828+0000",
            "message":"Configured Load Balancer..."
        },
        {
            "activityDate":"2016-09-18T13:07:38.971+0000",
            "message":"Updated Load Balancer metadata..."
        },
        {
            "activityDate":"2016-09-18T13:15:45.121+0000",
            "message":"WebLogic Administration Server Configuration completed..."
        },
        {
            "activityDate":"2016-09-18T13:15:45.490+0000",
            "message":"Configuration check for Host [wls12cr2-ee-lb-default-wls-1] containing WebLogic Managed Server(s) [[WLS12cR2_server_1]] completed..."
        },
        {
            "activityDate":"2016-09-18T13:16:54.748+0000",
            "message":"Configuration check for Host [wls12cr2-ee-lb-default-wls-2] containing WebLogic Managed Server(s) [[WLS12cR2_server_2]] completed..."
        },
        {
            "activityDate":"2016-09-18T13:16:55.095+0000",
            "message":"WebLogic Managed Servers Configuration completed..."
        },
        {
            "activityDate":"2016-09-18T13:17:53.624+0000",
            "message":"Service Reachabilty Check (SRC) of WebLogic Administration Server completed..."
        },
        {
            "activityDate":"2016-09-18T13:18:09.424+0000",
            "message":"Service Reachabilty Check (SRC) of WebLogic Managed Server(s) [WLS12cR2_server_1, WLS12cR2_server_2] completed..."
        },
        {
            "activityDate":"2016-09-18T13:18:09.706+0000",
            "message":"Successfully provisioned WebLogic Administration Server and 2 Managed Servers..."
        },
        {
            "activityDate":"2016-09-18T13:18:32.670+0000",
            "message":"Activity Ended"
        }
    ]
}
```

**"message":"Activity Ended"**と表示されるとインスタンス作成操作は終了です。

### 作成済みインスタンス一覧の表示
作成済みのインスタンス一覧を確認する際に使用するコマンドは、「**psm jcs services**」です。

```bash
$ psm jcs services
{
    "uri":"https://psm.europe.oraclecloud.com/paas/service/jcs/api/v1.1/instances/iddomain",
    "service_type":"jaas",
    "implementation_version":"1.0",
    "services":[
        {
            "service_name":"WLS12cR2-EE-LB-Default",
            "version":"12cRelease2",
            "wlsVersion":"12.2.1.0.160419",
            "status":"Running",
            "error_status_desc":"",
            "compliance_status":"",
            "compliance_status_desc":"",
            "auto_update":"true",
            "description":"WLS12cR2 Enterprise Edition with Traffic Director, configured with Multitenant",
            "identity_domain":"iddomain",
            "creation_time":"2016-09-18T12:43:56.659+0000",
            "last_modified_time":"2016-09-18T12:43:54.017+0000",
            "created_by":"shinyay",
            "service_uri":"https://psm.europe.oraclecloud.com/paas/service/jcs/api/v1.1/instances/iddomain/WLS12cR2-EE-LB-Default"
        }
    ]
}
```

このように、**psm jcs create-service**コマンドで作成したJava Cloud Serviceインスタンスが表示されています。

# まとめ
PSM CLIで作成したDatabase Cloud Service同様に、Java Cloud Servieもコマンドラインでインスタンスの作成ができました。
このように、作成するクラウドサービスのインスタンス情報をテンプレートとしてJSONファイルにしておけば作成したい構成状態を簡単に作成する事が可能となります。
また、JSONファイルのパラメータを差し替えるだけで、様々なテンプレートが用意できるので環境構築の手間が随分と省かれます。

今回のJSONファイルは非常にシンプルな内容でしたが、様々な設定要素はあるので目的に応じた構成テンプレートを用意しておくと便利です。