はじめに
Autonomous AI Databaseを利用していると、さまざまなシーンでOCI Object Storageを使用します。
その際、毎回OCIコンソールにアクセスしてバケットを作成するのが面倒なので、SQL*PlusやSQLclのようなSQL実行環境からOCI Object Storageのバケットを作成できると便利かと思い、バケットの名前とバケットを作成するリージョンを指定して実行すると、Autonomous AI Databaseと同じコンパートメント内にバケットを作成するPL/SQLプロシージャをPL/SQL SDKを使用して作成してみました。
なお、この記事ではObject Storageバケットの作成にAutonomous AI Databaseのリソース・プリンシパルを使用していますので、こちらのマニュアルを参考にして、動的グループ、ポリシーを作成し、リソース・プリンシパルを有効化しておく必要があります。
また、ここではOCI東京リージョン(ap-tokyo-1)にあるAutonomous AI Databaseで操作確認を行なっています。
注意
こちらの記事の内容はあくまで個人のメモ的な内容のため、こちらの内容を利用した場合のトラブルには一切責任を負いません。
また、こちらの記事の内容を元にしたOracleサポートへの問い合わせはご遠慮ください。
1. PL/SQLプロシージャの作成
1つめのパラメータとして作成するバケットの名前、2つめのパラメータとしてバケットを作成するリージョンを指定して実行すると、OCI Object Storageバケットを作成するPL/SQLプロシージャcreate_bucketを作成します。
2つ目のパラメータを省略した場合には、プロシージャを実行するAutonomous AI Databaseと同じリージョンにバケットが作成されます。
CREATE OR REPLACE PROCEDURE create_bucket(
bucket_name IN VARCHAR2, -- 作成するバケットの名前
in_region IN VARCHAR2 DEFAULT NULL -- バケットを作成するリージョン
)
IS
-- 変数の宣言
resp_get_namespace DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T;
resp_create_bucket DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T;
create_bucket_detail DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T := DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T();
adb_region VARCHAR2(20);
adb_compartment_ocid VARCHAR2(100);
region VARCHAR2(20);
namespace VARCHAR2(100);
BEGIN
-- ADBが存在するリージョンとコンパートメントのOCIDを取得
SELECT JSON_VALUE(cloud_identity, '$.REGION'), LOWER(JSON_VALUE(cloud_identity, '$.COMPARTMENT_OCID'))
INTO adb_region, adb_compartment_ocid FROM v$pdbs;
-- 第2引数(region)が入力されていない場合はADBがあるリージョンをリージョンに指定する
IF in_region IS NULL THEN
region := adb_region;
ELSE
region := in_region;
END IF;
-- オブジェクト・ストレージ・ネームスペースを取得
resp_get_namespace := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACE(
region => region,
credential_name => 'OCI$RESOURCE_PRINCIPAL'
);
namespace := REPLACE(resp_get_namespace.response_body, '"', '');
-- バケット作成時のパラメータをセット
create_bucket_detail.name := bucket_name;
create_bucket_detail.compartment_id := adb_compartment_ocid;
-- PL/SQL SDKを使用してバケットを作成
resp_create_bucket := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKET(
region => region,
credential_name => 'OCI$RESOURCE_PRINCIPAL',
namespace_name => namespace,
create_bucket_details => create_bucket_detail
);
END;
/
上記を実行して、PL/SQLプロシージャを作成します。
SQL> CREATE OR REPLACE PROCEDURE create_bucket(
2 bucket_name IN VARCHAR2,
3 in_region IN VARCHAR2 DEFAULT NULL
4 )
5 IS
6 resp_get_namespace DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T;
7 resp_create_bucket DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T;
8 create_bucket_detail DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T := DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T();
9 adb_region VARCHAR2(20);
10 adb_compartment_ocid VARCHAR2(100);
11 region VARCHAR2(20);
12 namespace VARCHAR2(100);
13
14 BEGIN
15 SELECT JSON_VALUE(cloud_identity, '$.REGION'), LOWER(JSON_VALUE(cloud_identity, '$.COMPARTMENT_OCID'))
16 INTO adb_region, adb_compartment_ocid FROM v$pdbs;
17
18 IF in_region IS NULL THEN
19 region := adb_region;
20 ELSE
21 region := in_region;
22 END IF;
23
24 resp_get_namespace := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACE(
25 region => region,
26 credential_name => 'OCI$RESOURCE_PRINCIPAL'
27 );
28 namespace := REPLACE(resp_get_namespace.response_body,'"','');
29
30 create_bucket_detail.name := bucket_name;
31 create_bucket_detail.compartment_id := adb_compartment_ocid;
32
33 resp_create_bucket := DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKET(
34 region => region,
35 credential_name => 'OCI$RESOURCE_PRINCIPAL',
36 namespace_name => namespace,
37 create_bucket_details => create_bucket_detail
38 );
39 END;
40 /
Procedure created.
SQL>
2. 動作確認
PL/SQLプロシージャが作成できたので、早速実行してみます。
まずは第1パラメータに「mytestbucket」、第2パラメータに「ap-osaka-1」(大阪リージョン)を指定して、create_bucketプロシージャを実行してみます。
SQL> exec create_bucket('mytestbucket','ap-osaka-1');
PL/SQL procedure successfully completed.
SQL>
OCIコンソールで確認してみると、大阪リージョンにmytestbucketという名前のバケットが作成されていることが確認できました。
次に、パラメータに「mytestbucekt2」のみを指定して、create_bucketプロシージャを実行してみます。
SQL> exec create_bucket('mytestbucket2');
PL/SQL procedure successfully completed.
SQL>
OCIコンソールで確認してみると、Autonomous AI Databaseがある東京リージョンにmytestbucket2という名前のバケットが作成されていることが確認できました。
参考情報
・リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセス
・DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_GET_NAMESPACE_RESPONSE_T
・DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE_CREATE_BUCKET_RESPONSE_T
・DBMS_CLOUD_OCI_OBJECT_STORAGE_CREATE_BUCKET_DETAILS_T
・Oracle Autonomous AI Database Serverlessの使用:テナンシ詳細の取得
・DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.GET_NAMESPACEファンクション
・DBMS_CLOUD_OCI_OBS_OBJECT_STORAGE.CREATE_BUCKETファンクション

