2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-10-29

はじめに

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キー」をクリックします。

「公開キーの追加」ボタンをクリックします。
スクリーンショット 2020-10-29 9.31.11.png
「公開キーの貼付け」を選択して、作成したキーペアの公開鍵の内容をコピー&ペーストし、「追加」をクリックします。
スクリーンショット 2020-10-29 9.25.43.png

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

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;

スクリーンショット 2020-10-29 12.01.09.png

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

SELECT * FROM object_list;

スクリーンショット 2020-10-29 12.01.33.png

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

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

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

スクリーンショット 2020-10-29 12.10.38.png

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

スクリーンショット 2020-10-29 12.02.50.png

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

SELECT * FROM object_list;

スクリーンショット 2020-10-29 12.03.31.png
このように、PL/SQL SDKを使用してバケット内のオブジェクト名の一覧を取得し、Autonomous Database内の表に格納することができました。

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?