[OCI] Autonomous DatabaseでOracle Cloud Infrastructure SDK for PL/SQL a.k.a. PL/SQL SDKを使ってみた


はじめに

Oracle Cloud Infrastructure SDK for PL/SQL(PL/SQL SDK)がリリースされ、共有インフラストラクチャのAutonomous Databaseでは既に利用できるようになっています。

Oracle Cloud Infrastructure Documentation Developer Guide

PL/SQL SDKを使用して、オブジェクト・ストレージ・バケット内のオブジェクトの一覧を取得し、オブジェクト名をDB内のテーブルに保存するPL/SQLプログラムを作成してみました。

手順

1.キーペアの作成
2.テナント、ユーザのOCIDの確認
3.APIキーの作成
4.SDKを利用するためのクレデンシャル(資格証明)の作成
5.PL/SQL SDKを使用したプログラムの作成

1.キーペアの作成

こちらの情報を参考にして、PEMフォーマットのRSAキー・ペアを作成します。
https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm

2.テナント、ユーザのOCIDの確認

コンソールでテナントのOCID、ユーザのOCIDを確認してメモしておきます。

3. APIキーの作成

「アイデンティティ」 → 「ユーザ」 → 「ユーザの詳細」

リソース欄の「APIキー」をクリックします。

「公開キーの追加」ボタンをクリックします。

「公開キーの貼付け」を選択して、作成したキーペアの公開鍵の内容をコピー&ペーストし、「追加」をクリックします。

公開キーの追加後に表示されるフィンガープリントをメモしておきます。

4.SDKを利用するためのクレデンシャル(資格証明)の作成

今回はMY_SDK_CREDという名前のSDKアクセス用のクレデンシャルを作成します。

private_keyには、作成した秘密鍵の内容からヘッダ(-----BEGIN RSA PRIVATE KEY-----)、フッタ(-----END RSA PRIVATE KEY-----)を除いた部分を記述します。

SET DEFINE OFF
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'MY_SDK_CRED',
    user_ocid => 'ユーザのOCID',
    tenancy_ocid => 'テナントのOCID',
    private_key => 'MIIE......',
    fingerprint => '公開キーのフィンガープリント'
  );
END;
/

今回はAutonomous Databaseに標準搭載されているSQL Developer Webから実行しました。

5.PL/SQL SDKを使用したPL/SQLプロシジャの作成

今回は以下のようなPL/SQLプロシジャを作成しました。

・リージョン、ネームスペース、バケット名を受け取って、該当ストレージ・バケット内にあるオブジェクトの一覧を取得し、取得したオブジェクトの名前をobject_list表に挿入

object_list表は以下のSQLで作成します。

CREATE TABLE object_list (
object_name VARCHAR2(100)
);

実際に作成したPL/SQLプロシジャは以下のようになります。

CREATE OR REPLACE PROCEDURE get_obj_list(namespace IN VARCHAR2, bucket IN VARCHAR2, region_id IN VARCHAR2)
IS

  object_summary dbms_cloud_oci_obs_object_storage_object_summary_tbl;
  response_body  dbms_cloud_oci_obs_object_storage_list_objects_t;
  response       dbms_cloud_oci_obs_object_storage_list_objects_response_t;
  json_obj       json_object_t;
  l_keys         json_key_list;

BEGIN

  -- 指定されたバケット内のオブジェクトリストの取得
  response := dbms_cloud_oci_obs_object_storage.list_objects(
                namespace_name => namespace,
                bucket_name => bucket,
                credential_name => 'MY_SDK_CRED',
                region => region_id);
 
  response_body := response.response_body;

  object_summary := response_body.objects;

  -- 取得したオブジェクト名をobject_list表にINSERT
  FOR i IN object_summary.first..object_summary.last LOOP
     INSERT INTO object_list VALUES (object_summary(i).name);
  END LOOP;
  COMMIT;

END;
/

6. PL/SQLプロシジャの動作確認

PL/SQLプロシージャが作成できたので、動作を確認してみます。

まず、object_list表を空にします。

TRUNCATE TABLE object_list;

次に、実際に表にデータがないか確認します。

SELECT * FROM object_list;

先ほど作成したPL/SQLプロシジャを実行します。

こちらでは、
ネームスペース:nrhnlrqdttaw
バケット名:MyBucket
リージョン:ap-tokyo-1
として実行します。

なお、こちらのバケットには5つのオブジェクトが格納されています。

EXECUTE get_obj_list('nrhnlrqdttaw','MyBucket','ap-tokyo-1');

object_list表の中身を確認します。

SELECT * FROM object_list;


このように、PL/SQL SDKを使用してバケット内のオブジェクト名の一覧を取得し、Autonomous Database内の表に格納することができました。

PL/SQL SDKはオブジェクト・ストレージだけでなくさまざまなOCIのサービスに対応していますので、いろいろ活用できそうです。
今後もいろいろ試してみたいと思います。