非同期作業リクエスト
このトピックでは、Oracle Cloud Infrastructureサービスで長時間実行している操作への非同期作業リクエストについて説明します。また、リクエスト・ステータスを取得する方法や、リクエストのレスポンスを調査して影響を受けるリソースのフィルタリングを有効にする方法についてのガイダンスも提供します。
概要
Oracle Cloud Infrastructureサービスに対するAPIコールによって、長時間実行操作が起動されることがあり、レスポンスが返される前にクライアントのリクエストが完了しない場合があります。このようなケースでは、非同期作業リクエストがサービスによって生成され、長時間実行されている非同期操作の進行状況を確認できます。REST APIコールに対するレスポンスのopc-work-request-id
ヘッダーに作業リクエストIDが含まれており、これによって進行状況とステータスをモニターできます。作業リクエスト自体は、操作が完了するまでキューに残ります。
作業リクエストのステータスは、GetWorkRequest
をコールして作業リクエストIDを渡すことで、いつでもモニターできます。
一部のOracle Cloud Infrastructureサービス(コンピュートやデータベースなど)では、GetWorkRequest
操作を含む作業リクエストAPIを使用した作業リクエストがサポートされています。
一部のサービスには、このトピックで説明する作業リクエストAPIではなく、サービスAPIでサポートされている作業リクエストが用意されています。これらのサービスのAPIには、作業リクエストAPIで使用されるGetWorkRequest
操作と同様に動作する操作が含まれます。
詳細は、各サービスの作業リクエストAPIのリファレンス・ドキュメントを参照してください。それぞれのリンクは詳細情報の項に記載されています。
リクエスト・レスポンスの特に重要な2つの要素は、作業リクエストのステータスと、作業リクエストによって影響を受けるリソースのリストです。ステータスが重要なのは、非同期作業リクエストは、操作が完了したか、実行中か、または完全に失敗したかを把握する必要があるためです。
作業リクエストの失敗またはエラーに関する情報を取得できるように、各サービスによって、エラーに関する情報をフェッチするためのAPIとログが提供されます。各サービスのAPIリファレンス・ドキュメントへのリンクは、詳細情報の項を参照してください。
また、作業リクエストが複数のリソースに影響する場合に重要になるのは、作業リクエストが影響を与えるリソースのリストを、それぞれのentityType
属性とactionType
属性と一緒に得ることです。
作業リクエストのステータス
非同期作業リクエストを使用すると、WorkRequest
オブジェクトに対してステータス属性を指定して、進行状況をモニターできます。サポートされているサービスそれぞれが、この後の項で説明するように、ステータスを取得するために独自のAPIを用意しています。
forWorkRequest
メソッドを使用してコールバックを作成するためのContainerEngineWaitersクラスがあります。このAPIを使用して、操作のステータスが変わったとき(たとえば、IN_PROGRESS
からCOMPLETED
)に通知を転送します。次の表に、各サービスのWorkRequest
オブジェクトでサポートされるステータス属性を示します。
サービス | ステータス属性 |
---|---|
アプリケーション・パフォーマンス・モニタリング |
|
自動リカバリ・サービス |
|
ビッグ・データ・サービス |
|
Blockchain Platform |
|
クラスタ配置グループ |
|
コンピュート |
|
コネクタ・ハブ |
|
コンテンツ管理 |
|
データベース管理 |
|
OCI Database with PostgreSQL |
|
Data Catalog |
|
Data Integration |
|
データ・ラベリング |
|
Data Science |
|
データベース |
|
データベース移行 |
|
DevOps |
|
ファイル・ストレージ |
|
フリート・アプリケーション管理 |
|
フル・スタック・ディザスタ・リカバリ |
|
グローバルに分散したAutonomous Database |
|
GoldenGate |
|
IAM |
|
統合 |
|
Java管理 |
|
Kubernetesエンジン |
|
ロード・バランサ |
|
LogAnalyticsQueryJobWorkRequest のログ・アナリティクス |
|
LogAnalyticsStorageWorkRequest のログ・アナリティクス |
|
LogAnalyticsConfigWorkRequest のログ・アナリティクス |
|
Management Agent |
|
ネットワーク・ファイアウォール |
|
オブジェクト・ストレージ |
|
Oracle Cloud Bridge |
|
Oracle Cloud Migrations |
|
OS管理ハブ |
|
プロセス自動化 |
|
キュー |
|
リソース・マネージャ |
|
セキュア・デスクトップ |
|
サービス・メッシュ |
|
リクエスト・レスポンスのフィルタリング
場合によっては、特定の非同期作業リクエストによってどのリソースが影響を受けるかを知る必要があります。リクエスト・レスポンスに影響を受けるリソースが1つか2つしか含まれていない場合、リクエスト・レスポンスの本文で十分かもしれません。ただし、リクエスト・レスポンスが多数のリソースに影響する場合は、目的のリソースを識別するためにレスポンスをフィルタ処理する必要があります。
作業リクエスト・レスポンスにリストされるリソースのフィルタリングでは、WorkRequestResource
タイプのentityType
とactionType
の2つの属性を利用します。
- entityType: 作業リクエストが影響するリソース・タイプを表します。これはオプションの属性ですが、各リソースに指定できる
entityType
は1つのみです。 - actionType: 指定したリソースが作業リクエストに関連付けられた操作によってどのような影響を受けるかを表します。サービスごとに、許容される
actionType
値の固定リストが指定されます(後続の項を参照)。
作業リクエストのリソース情報を取得するには、GetWorkRequest
をコールして作業リクエストIDを渡します。このコールによって、JSONフォーマットのレスポンスが返されます。オブジェクト・ストレージ・サービスに対してGetWorkRequest
をコールする例を次に示します。
{
operationType: "COPY_OBJECT",
status: "IN_PROGRESS",
id: "f54527d6-029b-4221-9046-a811b7686202",
resources: [
{
entityType: "object",
actionType: "READ",
entityUri: "/n/mynamespace/b/backups/o/myobject"
},
{
entityType: "object",
actionType: "WRITTEN",
entityUri: "/n/mynamespace/b/backups/o/copyofmyobject"
},
],
timeAccepted: 2017-10-13T17:23:46.000Z,
timeStarted: 2017-10-13T17:23:52.198Z,
percentComplete: 10.0
}
次の表に、Oracle Cloud Infrastructureサービスでサポートされるエンティティ・タイプとアクション・タイプを示します。
サービス名 | 操作 | entityType | actionType |
---|---|---|---|
アプリケーション・パフォーマンス・モニタリング | apm-domains |
|
|
自動リカバリ・サービス |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Blockchain Platform | instance
|
|
|
クラスタ配置グループ |
|
|
|
コンテンツ管理 | oceInstance |
|
|
データベース管理 |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
データベース移行 |
|
|
|
OCI Database with PostgreSQL | |||
Data Catalog | catalog
|
|
|
Data Integration | disworkspace
|
|
|
データ・ラベリング | datalabelingdataset |
|
|
Data Science |
|
|
|
DevOps |
|
|
|
フル・スタック・ディザスタ・リカバリ |
|
|
|
グローバルに分散したAutonomous Database |
ChangeShardedDatabaseCompartment |
|
|
GoldenGate |
|
|
|
統合 |
ノート: |
instance |
|
Kubernetesエンジン |
|
|
|
ロード・バランサ | LoadBalancer
|
|
|
Management Agent | DeployPlugins | managementAgent |
|
ネットワーク・ファイアウォール |
|
|
|
オブジェクト・ストレージ | CopyObject | object
|
|
Oracle Cloud Bridge | ocbworkrequest |
|
|
Oracle Cloud Migrations |
ChangeReplicationScheduleCompartment |
ocmworkrequest |
|
OS管理ハブ |
AttachManagedInstancesToLifecycleStage AttachManagedInstancesToManagedInstanceGroup AttachSoftwareSourcesToManagedInstance AttachSoftwareSourcesToManagedInstanceGroup DetachManagedInstancesFromLifecycleStage DetachManagedInstancesFromManagedInstanceGroup DetachSoftwareSourcesFromManagedInstance DisableModuleStreamOnManagedInstance DisableModuleStreamOnManagedInstanceGroup EnableModuleStreamOnManagedInstance EnableModuleStreamOnManagedInstanceGroup InstallModuleStreamProfileOnManagedInstance InstallModuleStreamProfileOnManagedInstanceGroup InstallPackagesOnManagedInstance InstallPackagesOnManagedInstanceGroup InstallWindowsUpdatesOnManagedInstance InstallAllWindowsUpdatesOnManagedInstancesInCompartment InstallWindowsUpdatesOnManagedInstanceGroup ManageModuleStreamsOnManagedInstance ManageModuleStreamsOnManagedInstanceGroup PromoteSoftwareSourceToLifecycleStage RefreshSoftwareOnManagedInstance RemoveModuleStreamProfileFromManagedInstance RemoveModuleStreamProfileFromManagedInstanceGroup RemovePackagesFromManagedInstance RemovePackagesFromManagedInstanceGroup SwitchModuleStreamOnManagedInstance UpdateAllPackagesOnManagedInstanceGroup UpdateAllPackagesOnManagedInstancesInCompartment |
|
|
プロセス自動化 | instance |
|
|
キュー | |||
リソース・マネージャ |
|
|
|
セキュア・デスクトップ |
|
|
|
サービス・メッシュ |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
リクエスト/レスポンスのサンプル
次に、クラスタを作成するための一連のREST APIコールを示します。これは一般的に長時間実行される操作です。コール元は、最初のPOST
コールのレスポンスから作業リクエストIDを取得し、その後、定期的にWorkRequest
をポーリングして操作のステータスを確認します。その後のリクエスト/レスポンス・シーケンスを、次のワークフローとして示します:
- ユーザーが、
CreateCluster
APIコールを発行します。 - サービスは、ステータス・コード202で応答して、リクエストが受け入れられたことを示し、
opc-work-request-id
ヘッダーで作業リクエストIDを返します。 - 次に、ユーザーは、作業リクエストのステータスを取得するために、作業リクエストIDについて
GET
コールを発行します。 - サービスは、ステータス・コード200で応答し、レスポンス本文で
CLUSTER_CREATE
操作のステータスがACCEPTED
であることを示します。 - ポーリングが続行され、作業リクエストに対してもう1つの
GET
コールが発行されます。 - サービスはステータス・コード200で応答します。レスポンス本文では、操作の
SUCCEEDED
が報告されます。
ステップ1CLUSTER_CREATE
操作を開始する最初のAPIコール。
POST https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/clusters
Accept: application/json
authorization: <Redacted>
content-length: 480
Content-Type: application/json
date: Mon, 02 Jul 2018 18:20:03 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: D7A390ED909C47038C438BA3629FB612
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
x-content-sha256: S8U8OKQHyTLNViAzgexkjxvF4ctncJJHTjuRfXn0ya4={
"name":"JavaSDK.CRUD",
"compartmentId":"ocid1.compartment.oc1..<unique_ID>",
"vcnId":"ocid1.vcn.oc1.eu-frankfurt-1.<unique_ID>",
"kubernetesVersion":"v1.10.3",
"options":{"serviceLbSubnetIds":["ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>",
"ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>"]}}
ステップ2最初のAPIコールに対するレスポンス。Opc-Work-Request-Id
ヘッダーに作業リクエストIDが含まれます。
202
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 0
Date: Mon, 02 Jul 2018 18:20:04 GMT
Opc-Request-Id: D7A390ED909C47038C438BA3629FB612/33EEDCAAB2E84508B34AA75CD0FD86F4/8261D1CC89814E9BB934440A1F43DA09
Opc-Work-Request-Id: ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID
Uri: /20180222/clusters
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:53077
ステップ3これは長時間実行中の操作であるため、ユーザーはGET
コールを使用して作業リクエストを定期的にポーリングし、ステータスを確認します。
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:20:04 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: E8F20DAC443346B3B0EA599F367EE294
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
ステップ4GET
コールによって次のレスポンスが返されます。レスポンス本文でCLUSTER_CREATE
操作のステータスがACCEPTED
であることが示されます。
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 717
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:20:05 GMT
Etag: 56a41efaf33d81a54933495ee910c24d7bce7a83adf18810f95e07bdd2055805
Opc-Request-Id: E8F20DAC443346B3B0EA599F367EE294/8B19C9FC3B4442CEA14685D1973D0856/0BA60B0711764DE4A4373071632708C7
Retry-After: 30
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:43533
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "ACCEPTED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "IN_PROGRESS",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": null,
"timeFinished": null
}
ステップ5操作は続行しています。ユーザーは、引き続き、GET
メソッドを使用して作業リクエストをポーリングしています。
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:24:13 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: 64595B97E39A471A886DA29966BB6B1D
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
ステップ6最後のGET
コールで次のレスポンスが生成されました。操作が完了したことが示されます。entityType
が「cluster」で、actionType
が「CREATED」であることに注意してください。
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 750
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:24:14 GMT
Etag: 023d2a8ccb6d893fa8c875f64652353f21d22607825f49eeeb15b5394ae24918
Opc-Request-Id: 64595B97E39A471A886DA29966BB6B1D/3A81140991C94794AF365016E31DBE82/6245FBD8C25842B6BDF15187EA6ADB21
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.3.0, 10.237.40.183
X-Rate-Limit-Request-Remote-Addr: 10.237.40.183:55856
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "SUCCEEDED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "CREATED",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": "2018-07-02T18:20:10Z",
"timeFinished": "2018-07-02T18:24:01Z"
}
詳細情報
- Application Performance Monitoring作業リクエストAPI
- 自律型リカバリ・サービス作業リクエストAPI
- 要塞作業リクエストAPI
- ブロックチェーン・プラットフォーム作業リクエスト
- クラウド・アドバイザ作業リクエストAPI
- クラスタ配置グループ作業リクエストAPI
- コンピュート作業リクエストAPI
-
コネクタ・ハブ:
- コンテナ・インスタンス作業リクエストAPI
- コンテンツ管理作業リクエストAPI
-
データ・カタログ:
- データ統合作業リクエストAPI
-
Data Labeling:
-
データ・サイエンス:
- データベース作業リクエストAPI
- データベース管理作業リクエストAPI
- データベース移行作業リクエストAPI
- データベース・ツール作業リクエストAPI
- PostgreSQL作業リクエストAPIを使用したOCIデータベース
- DevOps作業リクエストAPI
- ファイル・ストレージ作業リクエストAPI
- フリート・アプリケーション管理作業リクエストAPI
- フル・スタック・ディザスタ・リカバリ作業リクエストAPI
- Globally Distributed Autonomous Databaseの作業リクエストAPI
- GoldenGate作業リクエストAPI
-
IAM:
- 統合作業リクエストAPI
- Java管理作業リクエストAPI
- Kubernetesエンジン作業リクエストAPI
-
Load Balancer:
- ログ・アナリティクス作業リクエストAPI
- 管理エージェント作業リクエストAPI
- HeatWave作業リクエストAPI
- ネットワーク・ファイアウォール作業リクエストAPI
-
オブジェクト・ストレージ:
- Oracle Cloud Bridge作業リクエストAPI
- Oracle Cloud Migrations作業リクエストAPI
- OS管理ハブ作業リクエストAPI
- プロセス自動化作業リクエストAPI
- キュー作業リクエストAPI
- リソース・マネージャ作業リクエストAPI
- セキュア・デスクトップの作業リクエストAPI
- サービス・メッシュ作業リクエストAPI
- スタック・モニタリング作業リクエストAPI
- ビジョン作業リクエストAPI
- Visual Builder Studio: WorkRequest API
- 脆弱性スキャン作業リクエストAPI