SQLファンクションとしてGoogle Cloud Runファンクションを起動するステップ

Google Cloud Run関数をデータベース内のSQL関数として起動するステップを示します。

Google Cloud Run関数をSQL関数として起動するには、それぞれのクラウド関数を参照して呼び出すSQLラッパー関数のライブラリを作成します。このカタログを作成する前に、このカタログで参照するために必要なクラウド関数が作成されていることを前提としています。詳細は、Google Cloudコンソールを使用したクラウド実行機能の作成を参照してください。

  1. Autonomous AI DatabaseインスタンスからGoogle Cloud Run機能にアクセスするには、Googleサービス・アカウントを使用します。Google Cloud Platform (GCP)アプリケーションのGoogleサービス・アカウントに、cloudfunctions.functions.list権限およびCloud Functions InvokerおよびCloud Run Invokerロールを付与する必要があります。

    詳細は、次を参照してください:

  2. カタログを作成します。ADMIN以外のユーザーでGoogle Cloud Run関数のカタログを作成するには、そのユーザーにCLOUD_INTEGRATIONSビューの読取り権限を付与する必要があります。

    カタログは、APIエンドポイントを使用してそれぞれのクラウド・ファンクションを参照およびコールするラッパー・ファンクションのコレクションです。

    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_CATALOG (
            credential_name  => 'GCP$PA',
            catalog_name     => 'GCP_DEMO_CATALOG',
            service_provider => 'GCP',
            cloud_params     => '{"project_id":"*example_XXXXXX*"}'
     );
    END;
    /

    cloud_paramsproject_id値は、Google Cloud Platform (GCP)のプロジェクトIDです。

    これにより、GCP_DEMO_CATALOGカタログが作成され、指定されたproject_idのすべての関数がカタログ化されます。

    詳細は、CREATE_CATALOGプロシージャを参照してください。DBA_CLOUD_FUNCTION_CATALOGビュー・ビューおよびUSER_CLOUD_FUNCTION_CATALOGビュー・ビューを問い合せて、データベース内のすべてのカタログのリストを取得できます。

  3. カタログ内の関数のリストを表示します。

    次に、Google Cloud Run関数をリストする例を示します。

    VAR function_list CLOB;
    
    BEGIN
        DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS (
            credential_name  => 'GCP$PA',
            catalog_name     => 'GCP_DEMO_CATALOG',
            function_list    => :function_list
     );
    END;
    /
    
    SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual;

    詳細は、LIST_FUNCTIONSプロシージャを参照してください。

  4. DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONSを実行して、ラッパーSQLファンクションを作成します。次のいずれかの方法を使用して、それぞれのクラウド関数をコールするラッパーSQL関数をカタログに作成できます。

    • SYNC_FUNCTIONS: ラッパーSQLファンクションを作成するSYNC_FUNCTIONSメソッドは、カタログのラッパー・ファンクションを、カタログが作成されたリージョン、コンパートメントおよびテナンシで定義されたクラウド・ファンクションの完全なリストとともに自動的に同期(作成または削除)する最も迅速で簡単なメソッドです。次に例を示します。
    BEGIN
        DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
            catalog_name => 'GCP_DEMO_CATALOG'
     );
    END;
    /

    これにより、カタログに新しいファンクションを追加したり、カタログから削除されたファンクションのラッパーを削除するためのPL/SQLラッパーが作成されます。

    次の問合せを実行して、同期を確認します。

    SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION';

    ノート

    ノート:このコマンドを実行するには、現在のユーザーをノートにとります。

    詳細は、SYNC_FUNCTIONSプロシージャを参照してください。

    • DBMS_CLOUD.CREATE_FUNCTIONを使用して、それぞれのクラウド関数をコールするSQL関数をカタログに手動で作成できます。

    GCP_DEMO_CATALOGカタログにファンクションを作成する例。

    EXEC :function_args  := TO_CLOB('{"name": "VARCHAR2"}');
    BEGIN
        DBMS_CLOUD_FUNCTION.CREATE_FUNCTION (
            credential_name => 'GCP$PA',
            catalog_name    => 'GCP_DEMO_CATALOG',
            function_name   => 'gcp_testfunc',
            function_id     => '*function_id_path*',
            input_args      => :function_args
     );
    END;
    /

    これにより、GCP_DEMO_CATALOGカタログにGCP_TESTFUNCファンクションが作成されます。

    カタログのGCP_TESTFUNC関数は、プロジェクトIDがFUNCTION_IDパラメータによって参照されるそれぞれのGoogle Cloud Run関数への参照です。カタログ内の関数を引数とともに呼び出すと、対応するGoogle Cloud Run関数が実行され、関数によって返される出力が提供されます。

    DBA_CLOUD_FUNCTIONビュー・ビューおよびUSER_CLOUD_FUNCTIONビュー・ビューを問い合せて、データベース内のすべてのファンクションのリストを取得できます。

    詳細は、CREATE_FUNCTIONプロシージャを参照してください。

  5. ファンクションの作成後、DESCRIBEを実行して起動できます。

    DESC GCP_TESTFUNC
    COLUMN STATUS format a30
    COLUMN OUTPUT format a30
    SELECT GCP_TESTFUNC(NULL) FROM dual;

    これにより、function_idパラメータで指定されたファンクション参照をコールして、GCP_TESTFUNCファンクションが呼び出されます。

  6. DROP_FUNCTIONプロシージャを使用して、既存のファンクションを削除できます。次に例を示します。

    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'GCP_DEMO_CATALOG', FUNCTION_NAME => 'GCP_TESTFUNC');

    これにより、GCP_DEMO_CATALOGカタログからGCP_TESTFUNCファンクションが削除されます。

    詳細は、DROP_FUNCTIONプロシージャを参照してください。

  7. 既存のカタログは、DROP_CATALOGプロシージャを使用して削除できます。次に例を示します。

    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
            catalog_name     => 'GCP_DEMO_CATALOG'
     );
    END;
    /

    これにより、データベースからGCP_DEMO_CATALOGが削除されます。

    詳細は、DROP_CATALOGプロシージャを参照してください。