説明
Application Container Cloud Service は、Java アプリケーション、Node.js アプリケーション、PHP アプリケーションをデプロイし、稼働する軽量かつスケーラブルな実行環境を提供するクラウド・サービスです。
インターフェースとしてブラウザからアクセスするサービス・コンソールの他に、REST API による操作が可能です。
以下のドキュメントは、オラクル公式の Application Container Cloud Service が提供する REST API のマニュアルです:
この REST API を使用したデプロイやスケーリングを実施してみます。
REST API による操作実施前提
- RESTクライアント: ここでは cURL を使用したコマンドライン操作を行います。
- アプリケーション: 構成情報 (manifest.json) を含むアーカイブ形式にします。ここでは次のサンプル・アプリケーションを使用します:
実施手順
REST API を用いたアプリケーション・デプロイ
REST API を用いてアプリケーションをデプロイする場合は、まず Storage Cloud Service にアプリケーション・アーカイブ・ファイルをアップロードします。そして、アップロードしたファイルを指定して Application Container Cloud Service にデプロイを行います。
Storage Cloud Service へのアプリケーション・アップロード
Storage Cloud Service 上に、アプリケーション・アーカイブ・ファイルを配置するコンテナを作成します。
$ curl -i -X PUT -u <CLOUD_USER>:<CLOUD_PWD> https://<IDDOMAIN>.storage.oraclecloud.com/v1/Storage-<IDDOMAIN>/<CONTAINER_NAME>
- CLOUD_USER: Storage Cloud Service の権限を持つアカウント名
- CLOUD_PWD: 上記アカウントのパスワード
- IDDOMAIN: 使用しているアイデンティティ・ドメイン名
- CONTAINER_NAME: 作成するコンテナ名 (例: employees-web-app)
次に作成したコンテナにアプリケーション・アーカイブ・ファイルをアップロードします。
$ curl -i -X PUT -u <CLOUD_USER>:<CLOUD_PWD> https://<IDDOMAIN>.storage.oraclecloud.com/v1/Storage-<IDDOMAIN>/<CONTAINER_NAME>/<APPLICATION_FILE> -T <PATH_TO_FILE>/<APPLICATION_FILE>
- PATH_TO_FILE: ローカルのパス
- APPLICATION_FILE: アップロードするアプリケーション・アーカイブ・ファイル名 (例: employees-web-app.zip)
Application Container Cloud Service へのアプリケーション・デプロイ
$ curl -i -X POST -u <CLOUD_USER>:<CLOUD_PWD> \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-H 'X-ID-TENANT-NAME: <IDDOMAIN>' \
-F 'name=<APPLICATION_NAME>' \
-F 'runtime=java' \
-F 'subscription=hourly' \
-F 'archiveURL=<CONTAINER_NAME>/<APPLICATION_FILE>' \
-F 'deployment=@deployment.json' \
https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/<IDDOMAIN>
- deployment.json: インスタンス数やメモリ容量などの環境構成情報を記述したJSONファイル
- 以下、サンプルのdeployment.json
{
"memory": "2G",
"instances": "1",
"environment": {
"NO_OF_CONNECTIONS":"25",
"TWITTER_ID":"JAVA"
},
"services": [{
"identifier": "ProdService",
"type": "JAAS",
"name": "Jaas Service",
"username": "username",
"password": "password"
},
{
"identifier": "DBService",
"type": "DBAAS",
"name": "MyDB",
"username": "username",
"password": "password"
}]
}
- memory: メモリ容量 (1GB から 20GB)
- instances: インスタンス数
- environment: 環境変数 (KEYとVALUEの組み合わせで設定)
- services: バインドする他の Oracle Cloud Service
- identifier: 識別子
- type: サービス・タイプ
- JCSの場合: JAAS
- DBCSの場合: DBAAS
- MySQLCSの場合: MYSQLCS
- name: サービス・インスタンス名
- username: 該当のサービスにアクセスするユーザ名
- password: 上記ユーザのパスワード
ここでは、次の deployment.json を使用します。
{
"memory": "2G",
"instances": "1",
"environment":{
"TEST_ENV_VAR": "TestValue"
}
}
以下、実行例です:
$ curl -i -X POST -u <CLOUD_USER>:<CLOUD_PWD> \
> -H 'Content-Type: multipart/form-data' \
> -H 'Accept: application/json' \
> -H 'X-ID-TENANT-NAME: IDDOMAIN' \
> -F 'name=SAMPLE-APP' \
> -F 'runtime=java' \
> -F 'subscription=hourly' \
> -F 'archiveURL=employees-web-app/employees-web-app.zip' \
> -F 'deployment=@deployment.json' \
> https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN
HTTP/1.1 100 Continue
HTTP/1.1 202 Accepted
Server: Oracle-Application-Server-11g
Location: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/opStatus/3226058
X-ORACLE-DMS-ECID: 005GsFBLgGa3z015Rvl3id0003KE0002ro
X-ORACLE-DMS-ECID: 005GsFBLgGa3z015Rvl3id0003KE0002ro
X-Frame-Options: DENY
Service-URI: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP
Retry-After: 5
Content-Language: en
Content-Type: application/json
Vary: user-agent
Date: Tue, 13 Dec 2016 05:50:18 GMT
Connection: close
{
"identityDomain": "IDDOMAIN",
"appId": "e33c04e9-b65a-4d4f-957e-cf8d4d2328b8",
"name": "SAMPLE-APP",
"status": "NEW",
"createdBy": "shinyay",
"creationTime": "2016-12-13T05:50:18.105+0000",
"lastModifiedTime": "2016-12-13T05:50:18.072+0000",
"subscriptionType": "HOURLY",
"isClustered": false,
"requiresAntiAffinity": false,
"computeSite": "EM003_Z18",
"instances": [],
"lastestDeployment": {
"deploymentId": "230d8ca8-2b51-46e8-ab1f-842a880bdccb",
"deploymentStatus": "READY",
"deploymentURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/deployments/230d8ca8-2b51-46e8-ab1f-842a880bdccb"
},
"currentOngoingActivity": "Creating Application",
"appURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP",
"message": []
}
Application Container Cloud Service のサービス・コンソールを確認すると、以下のようにインスタンスが作成されています。
deployment.json を用いた構成変更
今の状態は、以下のように インスタンス数: 1、メモリ容量: 2GB になっています。この構成を deployment.json を変更し、REST API で反映させます。
以下のように、memory と instance の値を倍増させます。
{
"memory": "4G",
"instances": "2",
"environment":{
"TEST_ENV_VAR": "TestValue"
}
}
変更した deployment.json を指定し、以下のように実行します:
$ curl -i -X PUT -u shinyay:yanaYANA0928 \
> -H 'Content-Type: multipart/form-data' \
> -H 'Accept: application/json' \
> -H 'X-ID-TENANT-NAME: IDDOMAIN' \
> -F 'deployment=@deployment.json' \
> -F 'notes=update with deployment.json' \
https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP
HTTP/1.1 100 Continue
HTTP/1.1 202 Accepted
Server: Oracle-Application-Server-11g
Location: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/opStatus/3233760
X-ORACLE-DMS-ECID: 005GsGR^qh83z015Rvl3id0003KE0003Go
X-ORACLE-DMS-ECID: 005GsGR^qh83z015Rvl3id0003KE0003Go
X-Frame-Options: DENY
Service-URI: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP
Retry-After: 5
Content-Language: en
Content-Type: application/json
Vary: user-agent
Date: Tue, 13 Dec 2016 06:12:42 GMT
Connection: close
{
"identityDomain": "IDDOMAIN",
"appId": "e33c04e9-b65a-4d4f-957e-cf8d4d2328b8",
"name": "SAMPLE-APP",
"status": "RUNNING",
"createdBy": "shinyay",
"creationTime": "2016-12-13T05:50:18.105+0000",
"lastModifiedTime": "2016-12-13T06:12:41.819+0000",
"subscriptionType": "HOURLY",
"isClustered": false,
"requiresAntiAffinity": false,
"computeSite": "EM003_Z18",
"instances": [
{
"name": "web.1",
"status": "RUNNING",
"memory": "2G",
"instanceURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/instances/web.1"
}
],
"runningDeployment": {
"deploymentId": "230d8ca8-2b51-46e8-ab1f-842a880bdccb",
"deploymentStatus": "READY",
"deploymentURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/deployments/230d8ca8-2b51-46e8-ab1f-842a880bdccb"
},
"lastestDeployment": {
"deploymentId": "f9dab6d1-2f6a-43e4-91a5-b7b67cc2762c",
"deploymentStatus": "READY",
"deploymentURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/deployments/f9dab6d1-2f6a-43e4-91a5-b7b67cc2762c"
},
"currentOngoingActivity": "Deploying Release",
"appURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP",
"webURL": "https://SAMPLE-APP-IDDOMAIN.apaas.em3.oraclecloud.com",
"message": []
}
インスタンス詳細画面に移動すると、構成が変更されている事が確認できます。
インスタンス数: 2、メモリ容量: 4GB になっています。また、Notes も更新されてります。
REST API によるアプリケーション再デプロイメント
REST API を用いて、アプリケーションの再デプロイを行います。
employees-web-app.zip に含まれている manifest.json を以下のように version と notes を変更します:
{
"runtime": {
"majorVersion": "8"
},
"command": "java -jar employees-app-1.0-SNAPSHOT-jar-with-dependencies.jar",
"release": {
"build": "2016-12",
"commit": "updateApp",
"version": "v2.2"
},
"notes": "Redeploy application with using REST API"
}
上記「Storage Cloud Service へのアプリケーション・アップロード」で実施した手順に従って、Storage Cloud Service へアーカイブ・ファイルをアップロードします。
$ curl -X PUT -u <CLOUD_USER>:<CLOUD_PWD> \ https://<IDDOMAIN>.storage.oraclecloud.com/v1/Storage-<IDDOMAIN>/employees-web-app/employees-web-app.zip -T . /employees-web-app.zip
次に、REST API で再デプロイを行います。エンドポイントにアプリケーション名が含まれている点が初回デプロイ時と異なります:
$ curl -i -X PUT -u <CLOUD_USER>:<CLOUD_PWD> \
> -H 'Content-Type: multipart/form-data' \
> -H 'Accept: application/json' \
> -H 'X-ID-TENANT-NAME: IDDOMAIN' \
> -F 'archiveURL=employees-web-app/employees-web-app.zip' \
> -F 'deployment=@deployment.json' \
> https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP
HTTP/1.1 100 Continue
HTTP/1.1 202 Accepted
Server: Oracle-Application-Server-11g
Location: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/opStatus/3226106
X-ORACLE-DMS-ECID: 005GsI4XnU13z015Rvl3id0003KE0003TA
X-ORACLE-DMS-ECID: 005GsI4XnU13z015Rvl3id0003KE0003TA
X-Frame-Options: DENY
Service-URI: https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP
Retry-After: 5
Content-Language: en
Content-Type: application/json
Vary: user-agent
Date: Tue, 13 Dec 2016 06:42:06 GMT
Connection: close
{
"identityDomain": "IDDOMAIN",
"appId": "e33c04e9-b65a-4d4f-957e-cf8d4d2328b8",
"name": "SAMPLE-APP",
"status": "RUNNING",
"createdBy": "shinyay",
"creationTime": "2016-12-13T05:50:18.105+0000",
"lastModifiedTime": "2016-12-13T06:42:05.608+0000",
"subscriptionType": "HOURLY",
"isClustered": false,
"requiresAntiAffinity": false,
"computeSite": "EM003_Z18",
"instances": [
{
"name": "web.1",
"status": "RUNNING",
"memory": "4G",
"instanceURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/instances/web.1"
},
{
"name": "web.2",
"status": "RUNNING",
"memory": "4G",
"instanceURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/instances/web.2"
}
],
"runningDeployment": {
"deploymentId": "f9dab6d1-2f6a-43e4-91a5-b7b67cc2762c",
"deploymentStatus": "READY",
"deploymentURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/deployments/f9dab6d1-2f6a-43e4-91a5-b7b67cc2762c"
},
"lastestDeployment": {
"deploymentId": "abc3a795-2897-4a31-9ff0-5b2cc1b0c257",
"deploymentStatus": "READY",
"deploymentURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP/deployments/abc3a795-2897-4a31-9ff0-5b2cc1b0c257"
},
"currentOngoingActivity": "Deploying Release",
"appURL": "https://psm.europe.oraclecloud.com/paas/service/apaas/api/v1.1/apps/IDDOMAIN/SAMPLE-APP",
"webURL": "https://SAMPLE-APP-IDDOMAIN.apaas.em3.oraclecloud.com",
"message": []
}
インスタンス詳細画面のデプロイメント画面を開くと、manifest.json の更新内容が反映されている事が確認でき、再デプロイメントが実施できた事が確認できます。
まとめ
REST API によるデプロイや構成変更、またライフサイクル管理が行えました。GUI 操作だけではないので、CIツール等と組み合わせた自動化が行えそうです。