Java Cloud ServiceにWebLogic マルチテナント・インスタンスをPSM CLIで作成してみた


# 概要
Oracle CloudのCLI(PSM CLI)を利用して、Java Cloud Serviceインスタンスを作成する手順を以前投稿しました。

- [Java Cloud ServiceのインスタンスをPSM CLIで作成してみた](http://qiita.com/shinyay/items/f106463d656401ced368)

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

前回、PSM CLIで作成したJava Cloud Serviceインスタンスは、以下のようなシンプルな構成でした。

![wls-domain.png](https://qiita-image-store.s3.amazonaws.com/0/127983/48308ee3-c13a-167b-2153-b0a9d1d6b825.png)

以前、ブラウザからJava Cloud Serviceインスタンスを作成した際にWebLogic Server 12cR2の新しく導入された構成の**ドメイン・パーティション**を使ったマルチテナント環境を作りました。
- [Oracle Java Cloud Serviceインスタンスを作ってみた（WebLogic Server 12cR2 Enterprise Edition）](http://qiita.com/shinyay/items/a984c4a959a13553661a)

今回は、同様にマルチテナント環境をPSM CLIを使って作成してみます。
また、前回は指定しなかった構成オプションも合わせて利用してみます。

## 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 使用方法 - Java Cloud Service](http://qiita.com/shinyay/items/f106463d656401ced368#psm-cli-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95---java-cloud-service)

# Java Cloud Serviceインスタンス構成ペイロードの作成
以下のようなWebLogicマルチテナント環境を構成するように次のようなペイロードを作成してみました。

- クラスタメンバ数:2ノード のクラスタ構成
- ドメイン・パーティション数:2 のマルチテナント構成
- Traffic Directorを使用するロードバランサ構成

![wls-domain-partition.png](https://qiita-image-store.s3.amazonaws.com/0/127983/f05fb8dc-b4a2-e739-bdcf-95aba988dadb.png)

- WLS12cR2-EE-LB.json

```WLS12cR2-EE-LB.json
{
    "serviceName" : "WLS12cR2-EE-LB",
    "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.0.160419",
        "edition" : "EE",
        "domainMode" : "PRODUCTION",
        "managedServerCount" : "2",
        "msInitialHeapMB" : "512",
        "msMaxHeapMB" : "2048",
        "msJvmArgs" : "-XX:+UnlockCommercialFeatures -XX:+ResourceManagement -XX:+UseG1GC",
        "overwriteMsJvmArgs" : false,
        "adminPort" : "7001",
        "deploymentChannelPort" : "9001",
        "securedAdminPort" : "7002",
        "contentPort" : "8001",
        "securedContentPort" : "8002",        
        "domainName" : "WLS12cR2-EE-LB-Domain",
        "clusterName" : "WLS12cR2-EE-LB-Cluster",
        "adminUserName" : "weblogic",
        "adminPassword" : "<WLS管理者パスワード>",
        "nodeManagerPort" : "5556",
        "nodeManagerUserName" : "weblogic",
        "nodeManagerPassword" : "<NodeManager管理者パスワード>",
        "domainPartitionCount" : "4",
        "dbServiceName" : "DB12cHP",
        "dbaName" : "SYS",
        "dbaPassword" : "<DB管理者パスワード>",
        "appDBs": [
        {
            "dbServiceName" : "DB12cHP",
            "dbaName" : "SYS",
            "dbaPassword" : "<DB管理者パスワード>"
        }
        ],
        "shape" : "oc3",
        "domainVolumeSize" : "10G",
        "backupVolumeSize" : "50G",
        "VMsPublicKey" : "<SSH公開鍵テキスト>"
    },
    {
        "type" : "otd",
        "adminUserName" : "weblogic",
        "adminPassword" : "<OTD管理者パスワード>",
        "listenerPortsEnabled" : true,
        "listenerPort" : "8080",
        "listenerType" : "http",
        "loadBalancingPolicy" : "least_connection_count",
        "securedListenerPort" : "8081",
        "adminPort" : "8989",
        "shape" : "oc3",
        "VMsPublicKey" : "<SSH公開鍵テキスト>"
    }
    ]
}
```

マルチテナント環境（**ドメイン・パーティション**）の構成定義を行ったのは以下の部分です。
1つのWebLogicドメイン上に、4つのドメイン・パーティションを構成しています。

> **"domainPartitionCount" : "4"**

それ以外は、必須要素ではなくオプション要素です。
設定していない場合は、デフォルト値で置き換えられて構成されます。

以前のJSONの中では、ほとんどのオプション要素は設定していませんでした。
- [Java Cloud ServiceのインスタンスをPSM CLIで作成してみた](http://qiita.com/shinyay/items/f106463d656401ced368#java-cloud-service%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E6%A7%8B%E6%88%90%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB)

## Java Cloud Serviceインスタンス構成ペイロードの説明
今回作成したペイロードで使用しているパラメータについて説明します。

|パラメータ名|内容|必須|デフォルト値|
|---|---|:---:|---|
|serviceName|Java Cloud Serviceのインスタンス名<br>同一IdentityDomein内でユニークになる名称|○|-|
|level|サービスレベル<br>- PAAS: プロダクション・レベル<br>  -> ドメイン・パーティション利用時は必須<br>- BASIC: 開発レベル<br>  -> 運用ツールなし|-|PAAS|
|subscriptionType|請求タイプ<br>- HOURLY: 時間課金<br>- MONTHLY: 月次課金|-|HOURLY|
|shape|CPU/メモリのタイプ<br>- oc3: 1 OCPU, 7.5 GB memory<br>- oc4: 2 OCPUs, 15 GB memory<br>- oc5: 4 OCPUs, 30 GB memory<br>- oc6: 8 OCPUs, 15 GB memory<br>- oc1m: 1 OCPU, 15 GB memory<br>- oc2m: 2 OCPUs, 30 GB memory<br>- oc3m: 4 OCPUs, 60 GB memory<br>- oc4m: 8 OCPUs, 120 GB memory|○|-|
|cloudStorageContainer|サービスインスタンスのバックアップ先<br>Stroage Cloud Serviceを利用<br>Storage-[IDENTITY-DOMAIN名]/[コンテナ名]|○|-|
|cloudStorageUser|Storage Cloud Serviceのユーザ名|○|-|
|cloudStoragePassword|Storage Cloud Serviceのパスワード|○|-|
|createStorageContainerIfMissing|Storage Cloud Service上にコンテナが存在しない場合に作成|-|false|
|type|コンポーネント・タイプ<br>- weblogic<br>- datagrid<br>- otd|○|-|
|version|製品バージョン<br>10.3.6<br>12.1.3<br>12.2.1<br>10.3.6ではCohrence構成不可|○|-|
|edition|製品エディション<br>- SE<br>- EE<br>- SUITE|-|EE|
|domainMode|ドメイン・モード<br>- PRODUCTION: 本番モード<br>- DEVELOPMENT: 開発モード|-|PRODUCTION|
|managedServerCount|ドメイン内の管理対象サーバの数|-|1|
|domainPartitionCount|ドメイン・パーティションの数|-|0|
|msInitialHeapMB|初期ヒープサイズ|-|-|
|msMaxHeapMB|最大ヒープサイズ|-|-|
|msJvmArgs|JVM引数|-|-|
|overwriteMsJvmArgs|- true: 既存JVM引数を上書き<br>- false: 既存JVM引数に追加|-|-|
|domainName|WebLogicドメイン名|-|[serviceName]_domain|
|clusterName|WebLogicクラスタ名|-|[serviceName]_cluster|
|dbServiceName|接続するDatabaseCloudServiceのインスタンス名|○|-|
|appDBs|アプリケーション用スキーマを定義するDatabase指定|-|-|
|domainVolumeSize|ドメイン用ボリュームのストレージ・サイズ|-|-|
|backupVolumeSize|バックアップ用ボリュームのストレージ・サイズ|-|-|
|loadBalancingPolicy|ロードバランサのルーティング・ポリシー<br>-least_connection_count: 最少接続数<br>- least_response_time: 最少応答時間<br>- ラウンド・ロビン|-|least_connection_count|

## psm jcs create-service コマンド実施
- シンタックス
    - **psm jcs create-service -c <インスタンス構成ペイロードJSONファイル>**

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

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

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

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

```bash
$ psm jcs operation-status -j 2201418
{
    "activityLogId":1106433,
    "serviceName":"WLS12cR2-EE-LB",
    "serviceType":"jaas",
    "identityDomain":"IDENTITY-DOMAIN",
    "serviceId":59401,
    "jobId":2201418,
    "startDate":"2016-09-18T20:24:42.219+0000",
    "endDate":"2016-09-18T20:50:43.467+0000",
    "status":"SUCCEED",
    "operationId":59401,
    "operationType":"CREATE_SERVICE",
    "summaryMessage":"CREATE_SERVICE",
    "authDomain":"IDENTITY-DOMAIN",
    "authUser":"shinyay",
    "initiatedBy":"USER",
    "messages":[
        {
            "activityDate":"2016-09-18T20:24:42.219+0000",
            "message":"Activity Submitted"
        },
        {
            "activityDate":"2016-09-18T20:24:43.474+0000",
            "message":"Activity Started"
        },
        {
            "activityDate":"2016-09-18T20:24:54.630+0000",
            "message":"Created Compute resources for WebLogic Server..."
        },
        {
            "activityDate":"2016-09-18T20:25:03.766+0000",
            "message":"Created security resources for the service..."
        },
        {
            "activityDate":"2016-09-18T20:34:02.942+0000",
            "message":"Established SSH connectivity to WebLogic Administration Server... Used private side of a public key for [oracle]"
        },
        {
            "activityDate":"2016-09-18T20:34:02.965+0000",
            "message":"Established SSH connectivity to Host(s) [WLS12cR2_server_2] from Administration Server..."
        },
        {
            "activityDate":"2016-09-18T20:39:10.164+0000",
            "message":"Configured Load Balancer..."
        },
        {
            "activityDate":"2016-09-18T20:39:18.335+0000",
            "message":"Updated Load Balancer metadata..."
        },
        {
            "activityDate":"2016-09-18T20:46:23.184+0000",
            "message":"WebLogic Administration Server Configuration completed..."
        },
        {
            "activityDate":"2016-09-18T20:46:23.555+0000",
            "message":"Configuration check for Host [wls12cr2-ee-lb-wls-1] containing WebLogic Managed Server(s) [[WLS12cR2_server_1]] completed..."
        },
        {
            "activityDate":"2016-09-18T20:49:40.696+0000",
            "message":"Configuration check for Host [wls12cr2-ee-lb-wls-2] containing WebLogic Managed Server(s) [[WLS12cR2_server_2]] completed..."
        },
        {
            "activityDate":"2016-09-18T20:49:41.037+0000",
            "message":"WebLogic Managed Servers Configuration completed..."
        },
        {
            "activityDate":"2016-09-18T20:50:12.123+0000",
            "message":"Service Reachabilty Check (SRC) of WebLogic Administration Server completed..."
        },
        {
            "activityDate":"2016-09-18T20:50:20.477+0000",
            "message":"Service Reachabilty Check (SRC) of WebLogic Managed Server(s) [WLS12cR2_server_1, WLS12cR2_server_2] completed..."
        },
        {
            "activityDate":"2016-09-18T20:50:20.774+0000",
            "message":"Successfully provisioned WebLogic Administration Server and 2 Managed Servers..."
        },
        {
            "activityDate":"2016-09-18T20:50:43.467+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/IDENTITY-DOMAIN",
    "service_type":"jaas",
    "implementation_version":"1.0",
    "services":[
        {
            "service_name":"WLS12cR2-EE-LB",
            "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":"IDENTITY-DOMAIN",
            "creation_time":"2016-09-18T20:24:41.464+0000",
            "last_modified_time":"2016-09-18T20:24:40.004+0000",
            "created_by":"shinyay",
            "service_uri":"https://psm.europe.oraclecloud.com/paas/service/jcs/api/v1.1/instances/IDENTITY-DOMAIN/WLS12cR2-EE-LB"
        }
    ]
}
```

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

# まとめ
マルチテナント構成もブラウザUI同様にPSM CLIから作成する事ができました。
また、今回はJVM引数のようなブラウザUIからのインスタンス作成時には設定できないパラメータもPSM CLIで設定を行いました。

このようにPSM CLIでインスタンスを作成するためのインスタンス構成ペイロードを複数用意しておくと、同じ環境を作り直すことも簡単に行えるし、またパラメータ変更によるカスタマイズも手間なくできます。

状況や要件に応じてPSM CLIとブラウザUIを使い分けてJava Cloud ServiceやDatabase Cloud Serviceのインスタンスを作成するとよさそうです。