REST APIでOACスナップショットを作成する方法

OAC

初めに

Oracle Analytics Cloud (OAC) のスナップショットを作成するには、コンソールだけでなく、REST APIを使用することも可能です。日常のバックアップをスクリプト化したい場合、この方法が適しています。

この例では、プライベート・タイプのOACインスタンスをサービスGW経由でオブジェクト・ストレージにスナップショットを作成する方法を紹介します。

Create OAC snapshot via REST API

1. 事前準備

この例では、REST APIを実行するクライアントは、OACインスタンスと同じサブネット内にあるComputeインスタンスです。ネットワークリソース(ルート表、NSG、サービスGW)の設定に関する詳細な説明は省略します。

1-1. 認証情報の取得

OACスナップショットはOCIオブジェクト・ストレージに保存されます。OACインスタンスがオブジェクト・ストレージにアクセスするためには、以下の認証情報を提供する必要があります。

テナンシOCID、ユーザーOCID、リージョンID、API秘密キー、APIキーのフィンガープリント

これらの情報は、OCI-CLIの構成ファイルの構成ファイルに含まれています。構成ファイルがすでにある場合は、そこから取得してください。まだお持ちでない方は、以下の方法で認証情報を取得してください。

アイデンティティ → 自分のプロファイル → APIキー → APIキーの追加

秘密キーをダウンロードし、追加ボタンを押す。
Download API key

コピーを押し、構成ファイルの中身をメモしてください。
Configuration file

1-2. JSONファイルの作成

次のようにJSONファイルを作成します。
new_snapshot.json

{
    "type": "CREATE",
    "name": "myfirstsnapshot",
    "storage": {
        "type": "OCI_NATIVE",
        "bucket": "OAC_Snapshot",
        "auth": {
            "type": "OSS_AUTH_OCI_USER_ID",
            "ociRegion": "ap-tokyo-1",
            "ociTenancyId": "<Tenancy_OCID>",
            "ociUserId": "<User_OCID>",
            "ociKeyFingerprint": "<your_fingerprint>",
            "ociPrivateKeyWrapped": "<cat myprivate_key.pem | base64 -w 0>"
        }
    },
    "bar": {
        "uri": "file:///myfirstsnapshot.bar",
        "password": "<to_give_your_snapshot_a_password>"
    }
}
項目コメント
nameスナップショット名例:myfirstsnapshot
bucket格納先のバケット名例:OAC_Snapshot
ociRegionリージョン識別子例:ap-tokyo-1
ociTenancyIdテナントOCIDSTEP 1-1で取得
ociUserIdユーザーOCIDSTEP 1-1で取得
ociKeyFingerprint秘密キーのフィンガープリントSTEP 1-1で取得
ociPrivateKeyWrapped暗号化された秘密キー※1
uriスナップショットのURI※2
passwordスナップショットのパスワード※3

※1、次のコマンドでAPI秘密キーをエンコードします。
Linuxの場合: cat myprivate-key.pem | base64 -w 0 > mywrapped-private-key.pem
Macの場合: cat myprivate-key.pem | base64 -o mywrapped-private-key.pem

※2、この例では、バケットの直下にオブジェクトを作成するため、フォルダは使用しません。フォルダを使用したい場合は、次のように記述してください。
file:///myfolder/myfirstsnapshot.bar

※3、パスワードを指定する際は、以下の条件を満たしていることを確認してください:

  • 14文字以上50文字以下であること
  • 少なくとも1つの数字(0-9)を含むこと
  • 少なくとも1つの大文字(A-Z)を含むこと
  • 少なくとも1つの小文字(a-z)を含むこと
  • 少なくとも1つの特殊文字を含むこと、使用可能な特殊文字は次のとおりです:
    !#$%&'()+,-./:;<=>?@[]^_`{|}~*

1-3. トークンの発行

スナップショットを作成するには、トークンを発行する必要があります。次の2つの方法のいずれかを使用できます。

方法-1. コンソールからダウンロード

アナリティクス・インスタンス → インスタンスの詳細 → 追加詳細

アプリケーション」のリンクをクリックして、アプリの詳細画面に移動します。
Application link

「アクセス・トークン」を選択し、「トークンのダウンロード」を押してダウンロードします。(デフォルトのファイル名は、tokens.tokです。)
Download access token

ファイルの中身(有効時間は100秒):

{"access_token":"<トークン_中略>","token_type":"Bearer","expires_in":100}

方法-2. CURLコマンドで取得

スナップショットの作成をスクリプトで自動化したい場合、この方法がおすすめです。トークンを発行するには、以下の情報を取得しておいてください。

ドメインURL
「追加詳細」のタブから取得できます。
Domain URL

例:https://<IDCS_instance>.identity.oraclecloud.com

スコープ文字列
上記画面で「アプリケーション」のリンクをクリックし、アプリの詳細画面に移動します。

「OAuth 構成」タブ
Scope string

スコープ文字列の構成: 「プライマリ・オーディエンス」と 「スコープ」を結合する
例: https://<string>.analytics.ocp.oraclecloud.comurn:opc:resource:consumer::all

「クライアントID」と「クライアント・シークレット」
スコープ文字列と同じ画面から取得します。
Client ID and client secret

取得後、次のコマンドでエンコードしてください。
echo -n client_id:client_secret | base64 -w 0

トークンを発行するコマンド:

curl --request POST --url https://<IDCS_instance>.identity.oraclecloud.com/oauth2/v1/token  \
--header 'authorization: Basic <echo -n client_id:client_secret | base64 -w 0>' \
--header 'content-type: application/x-www-form-urlencoded;charset=UTF-8' \
-d 'grant_type=password&username=<username>&password=<password>&scope=<scope>'
項目
IDCS_instanceドメインURLhttps://<IDCS_instance>.identity.oraclecloud.com
暗号化されたClient IDとClient Secret
usernameOCI ユーザー名
passwordOCI ユーザーのパスワード
scopeスコープ文字列https://xxxxxxx.analytics.ocp.oraclecloud.comurn:opc:resource:consumer::all

コマンドの出力結果:

{"access_token":"<トークン_中略>","token_type":"Bearer","expires_in":100}

2. スナップショットの作成

トークンはOACインスタンスが停止している場合でも発行できますが、スナップショットを作成するためには、インスタンスがアクティブな状態である必要があります。
curl -i --header "Authorization: Bearer ${access_token}" \
        --request POST https://${hostname}/api/20210901/snapshots \
        -d @new_snapshot.json
項目コメント
access_tokenトークンSTEP 1-3で取得
hostnameインスタンスのホスト名OACの「追加詳細」から取得できる。例:<host_string>.analytics.ocp.oraclecloud.com
new_snapshot.jsonSTEP 1-2で作成したファイル

CURLコマンドの出力は、次のようです。

HTTP/1.1 202 Accepted
Date: <中略>
Content-Type: application/json; charset=utf-8
Content-Length: 35
Connection: keep-alive
X-ORACLE-DMS-ECID: 57a67cf4-ebbb-4ec7-8079-ae77795c2ddc-00002a86
ETag: W/"23-d9x1y9Mzt6zwWxjB98QRA9W8qp8"
oa-work-request-id: lfc-cj:7-ch:203
X-ORACLE-DMS-RID: 0
Strict-Transport-Security: max-age=31536000;
vary: X-Forwarded-Proto,origin

{"workRequestId":"lfc-cj:7-ch:203"}

最終行の「workRequestId」をメモしてください。

3. 進捗状況の確認

上記ステップの出力に作業リクエストIDが返されます。そのIDを使用して進捗状況を確認します。トークンの有効時間(100秒)が過ぎる場合、再発行してください。

curl -i --header "Authorization: Bearer ${access_token}" \
     --request GET https://${hostname}/api/20210901/workRequests/${work_request_id}

${work_request_id}: 実際の作業リクエストIDで置き換える。

進捗状況(status)は、3つ種類があります(IN_PROGRESS,SUCCEEDED, FAILED)。成功した場合、作業リクエストの詳細は次のように表示されます。

HTTP/1.1 200 OK
<中略>
{"id":"lfc-cj:7-ch:203","operationType":"CREATE_SNAPSHOT","percentComplete":100,"status":"SUCCEEDED","timeAccepted":"<中略>","timeStarted":"<中略>","timeFinished":"<中略>","resources":[{"resourceType":"SNAPSHOT","id":"<中略>","actionResult":"CREATED"}]}

OCIコンソールから作成されたスナップショットを確認します:
Snapshot bar file
※、同じファイル名の既存のスナップショットがある場合、そのスナップショットは上書きされます。

トラブルシューティング

問題-1: HTTP 401 Unauthorized

エラー現象:スナップショットを作成した際に次のエラーが発生した。

HTTP/1.1 401 Unauthorized
Date: <中略>
Content-Type: text/html
Content-Length: 172
Connection: keep-alive
www-authenticate: Bearer error="invalid_token", error_description="Token Expired"
vary: origin

考えられる理由:トークンの有効期限が切れた(100秒)。
解決方法:トークンを再取得し、有効期限内にもう一度作成してください。

問題-2: Cloud Storage Error

エラー現象:スナップショットを作成した際に次のエラーが発生した(作業リクエストの確認結果)。

{"id":"<中略>","operationType":"CREATE_SNAPSHOT","percentComplete":100,"status":"FAILED","timeAccepted":"<中略>","timeStarted":"<中略>","timeFinished":"<中略>","errors":[{"code":"InternalServerError","message":"Cloud Storage Error"}]}

考えられる理由:オブジェクトストレージにアクセスするための認証情報が間違っている。
解決方法new_snapshot.jsonの内容 (STEP 1-2) を確認してください。

以上

OAC ドキュメント
REST API for Oracle Analytics Cloud - Quick Start: 英語
REST API for Oracle Analytics Cloud - Create a snapshot: 英語

OCI CLI コマンド・リファレンス
Docs » analytics

タイトルとURLをコピーしました