コンパートメントについて

Oracle NoSQL Databaseドライバを使用してOracle NoSQL Database Cloud Service表の作成および操作中にコンパートメントを指定する方法について学習します。

Oracle NoSQL Database Cloud Service表はコンパートメントに作成され、そのコンパートメントにスコープ指定されます。特定のユーザーとして認証されると、特に指定がないかぎり、表はテナンシのルート・コンパートメントで管理されます。異なるコンパートメントへの表の編成は、組織およびセキュリティに役立ちます。

インスタンス・プリンシパル(OCIコンピュート・インスタンスからサービスにアクセス)を使用して認証されている場合、この場合のデフォルトは存在しないため、ID (OCID)を使用してコンパートメントを指定する必要があります。Oracle Cloud Infrastructureドキュメンテーションインスタンスからのサービスのコールに関する項を参照してください。

アプリケーション・コードにコンパートメントを指定する方法はいくつかあります:

  1. ハンドルを使用するすべての操作に適用されるように、NoSQLHandleConfigでデフォルトのコンパートメントを使用します。例は、「NoSQLハンドルの取得」を参照してください。

  2. 各リクエストでは、表名に加えて、コンパートメント名またはID (OCID)を使用します。これにより、デフォルトのコンパートメントがオーバーライドされます。

    たとえば:

    GetRequest getReq = new GetRequest().setTableName("mytable")
                                        .setCompartment("mycompartment");
  3. 表名の接頭辞としてコンパートメント名を使用します。これにより、デフォルトのコンパートメントや、APIを使用して指定されたコンパートメントがオーバーライドされます。

    たとえば:

    GetRequest getReq = new GetRequest().setTableName("mycompartment:mytable");

名前付きコンパートメントを使用している場合、名前には最上位コンパートメントの単純名またはネストされたコンパートメントへのパスを指定できます。後者の場合、パスは"." (ドット)区切りのパスです。

ノート:ネストされたコンパートメントへのパスを指定する際には、テナンシから推測されるため、最上位コンパートメントの名前をパスに含めないでください。

アプリケーション・コードにコンパートメントを指定する方法はいくつかあります:

  • borneo.NoSQLHandleConfig.set_compartment()内のリクエストに対してデフォルト・コンパートメントを指定できるようにするメソッドが存在します。これにより、ユーザーのデフォルト・コンパートメントがオーバーライドされます。

  • また、各Requestインスタンスでコンパートメントを指定することもできます。

set_compartmentメソッドは、ID (OCID)、コンパートメント名またはパスのいずれかを取ります。コンパートメント名が使用される場合は、最上位のコンパートメントの名前になります。

ノート:コンパートメント・パスを使用してネストされたコンパートメントを参照する場合、パスは、パスの最上位レベルのコンパートメント(compartmentA.compartmentBなど)を除外するドット区切りのパスです。

リクエストにコンパートメントを設定するかわりに、コンパートメント名を使用して、リクエスト、問合せまたはDDL文で表名の接頭辞を付けることができます。この使用は、コンパートメントの他の設定よりも優先されます。例

...
request = PutRequest().set_table_name('mycompartment:mytable')
...
create_statement = 'create table mycompartment:mytable(...)'
...
request = GetRequest().set_table_name('compartmentA.compartmentB')

アプリケーション・コードにコンパートメントを指定する方法はいくつかあります:

  • 必要なコンパートメント名またはIDを設定できます。

  • デフォルトのコンパートメント(テナンシのルート・コンパートメント)を使用するには、空の文字列に設定します。

  • ネストされたコンパートメントを使用する場合は、ルート・コンパートメントに対する相対的なフル・コンパートメント・パスをcompartmentIDとして指定します。たとえば、rootCompartment.compartmentA.compartmentBを使用する場合、compartmentIDをcompartmentA.compartmentBに設定する必要があります。

  • コンパートメントOCIDを文字列値として使用することもできます。

compartmentID:="<optional-compartment-name-or-ID>"
iam.NewRawSignatureProvider(tenancy, user, region, fingerprint, compartmentID,
        privateKey, &privateKeyPassphrase)

NoSQLClientコンストラクタに渡される構成のコンパートメント・プロパティを設定することで、NoSQLClientインスタンスによって実行されるすべての操作のデフォルト・コンパートメントを指定できます。

import { NoSQLClient,Region } from 'oracle-nosqldb';
const client = new NoSQLClient({
    region: Region.US_ASHBURN_1,
    compartment: 'mycompartment'
});

文字列値は、コンパートメントID、コンパートメント名またはパスのいずれかです。単純な名前の場合は、最上位レベルのコンパートメントを指定する必要があります。ネストされたコンパートメントへのパスである場合、最上位レベルのコンパートメントはテナンシから推測されるため、除外する必要があります。オプション・オブジェクトの各リクエストでコンパートメントを指定することもできます。この値は、初期構成値をオーバーライドします。

コンパートメントを指定しない場合、テナンシのルート・コンパートメントがデフォルトとして使用されます。これは、特定のユーザーのアイデンティティで認可している場合にのみ適用されます。認証にインスタンス・プリンシパルまたはリソース・プリンシパルを使用している場合は、これらの場合にデフォルトがないため、コンパートメントIDを指定する必要があります。

コンパートメントが指定されていない場合、テナンシのOCIDがデフォルトとして使用されます。これは、ユーザーのアイデンティティを使用して認可している場合にのみ適用されます。インスタンス・プリンシパルまたはリソース・プリンシパルを使用する場合は、コンパートメントIDを指定する必要があります。

インスタンス・プリンシパルを設定する手順は、インスタンスからのサービスのコールを参照してください。リソース・プリンシパルの設定手順は、実行中のファンクションからの他のOracle Cloud Infrastructureリソースへのアクセスを参照してください。

表のデフォルトのコンパートメントは、ユーザーのテナンシのルート・コンパートメントです。すべての操作のデフォルト・コンパートメントは、NoSQLConfigのコンパートメント・プロパティを設定することで指定できます。たとえば:

var client = new NoSQLClient(
    new NoSQLConfig
    {
        Region=Region.US_ASHBURN_1,
        Compartment="<compartment_ocid_or_name>"
    });

文字列値は、コンパートメントOCID、コンパートメント名またはパスのいずれかです。単純な名前の場合は、最上位レベルのコンパートメントを指定する必要があります。ネストされたコンパートメントへのパスである場合、最上位レベルのコンパートメントはテナンシから推測されるため、除外する必要があります。

また、すべての操作オプション・クラスには、TableDDLOptions.CompartmentGetOptions.CompartmentPutOptions.CompartmentなどのCompartmentプロパティがあります。したがって、任意の操作に対して比較を個別に指定することもできます。この値を設定すると、NoSQLConfigのコンパートメント値がオーバーライドされます(存在する場合)。

コンパートメントが指定されていない場合、テナンシのOCIDがデフォルトとして使用されます。これは、ユーザーのアイデンティティを使用して認可している場合にのみ適用されます。インスタンス・プリンシパルまたはリソース・プリンシパルを使用する場合は、コンパートメントIDを指定する必要があります。