Autonomous AI DatabaseでのWITH_CONTEXTを使用したPythonスクリプトの起動
データベースでWITH_CONTEXTを使用してPythonスクリプトを起動するステップを示します。
トピック
- Autonomous AI DatabaseでのWITH_CONTEXTを使用したPythonスクリプトの起動について
WITH_CONTEXT属性を持つOracle Schedulerジョブを使用して、Autonomous AI DatabaseインスタンスでPythonスクリプトを実行できます。 - Pythonスクリプトの作成
Pythonスクリプトの作成の例を示します - Oracle Autonomous AI Database EXTPROCコンテナ・イメージの構成
Oracle Autonomous AI Database EXTPROCコンテナ・イメージを取得および構成するステップについて説明します。 - WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、Autonomous AI DatabaseEXTPROCエージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Extrpocエージェント・インスタンスにアクセスできます。 - Pythonスクリプトを起動するステップ
Autonomous AI DatabaseでPythonスクリプトを起動するステップを示します。
親トピック: ユーザー定義関数の起動
Autonomous AI DatabaseでのWITH_CONTEXTを使用したPythonスクリプトの起動について
WITH_CONTEXT属性を持つOracle Schedulerジョブを使用して、Autonomous AI DatabaseインスタンスでPythonスクリプトを実行できます。
Autonomous AI DatabaseでWITH_CONTEXTを使用してPythonスクリプトを起動すると、スクリプトがデータベースにコールバックできるようにするコンテキスト・ポインタがスクリプトに渡されます。 コンテキストは、データベース・セッション、接続、およびスクリプトがアクセスまたは操作する必要がある関連する状態またはデータを指します。
Autonomous AI DatabaseインスタンスでPythonスクリプトを直接実行することはできません。 かわりに、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているOracle <span>Autonomous AI Database</span>Extprocコンテナ・イメージでスクリプトをリモートでホストします。 コンテナ・イメージは、EXTPROCエージェントで事前構成され、スクリプトを実行するために必要なすべてのライブラリ(utils、onnx、python-oracledbなど)が含まれます。
Oracle Schedulerジョブを使用して、Autonomous AI DatabaseからPythonスクリプトを起動します。 作成するスケジューラ・ジョブは、実行可能ジョブである必要があり、WITH_CONTEXT属性で実行されます。 実行可能ジョブは、シェル・スクリプトまたはその他の実行可能ファイルを実行でき、WITH_CONTEXT Oracle Scheduler属性を使用すると、外部プロシージャ、プログラムまたはスクリプトをコールするときに、スクリプトが現在のセッション権限を継承できます。 WITH_CONTEXT属性を使用すると、外部ルーチンは、スキーマ、権限、その他のコンテキスト変数などのセッション固有の情報にアクセスできます。
Autonomous AI DatabaseからのPythonスクリプトは、データベースがプライベート・エンドポイントにある場合にのみサポートされます。 Pythonスクリプトを実行するには、EXTPROCエージェントがインストールされたOracle Autonomous AI Database EXTPROCコンテナ・イメージを取得、インストールおよび構成する必要があります。 Autonomous AI DatabaseのEXTPROCコンテナ・イメージを使用すると、BASH、CまたはPythonで記述された外部プロシージャおよびスクリプトをAutonomous AI Databaseからコールできます。 EXTPROCエージェント・インスタンスはプライベート・サブネットでホストされ、Autonomous AI Databaseはリバース接続エンドポイント(RCE)を介してEXTPROCエージェントにアクセスします。
ノート:
この機能は、Oracleデータベース・リリース19cでのみサポートされています。次のものを使用して、Pythonスクリプトをデプロイします。
-
Oracleは、
EXTPROCエージェントがインストールされたAutonomous AI Databaseコンテナ・イメージを提供しました。 Oracleは、GitHubパッケージにコンテナ・イメージを提供します。EXTPROCコンテナ・イメージを取得および構成する手順は、GitHub READMEを参照してください:EXTPROCエージェント・インスタンスは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているコンテナ・イメージでリモートでホストされます。 Autonomous AI DatabaseとEXTPROCエージェント・インスタンス間のセキュアな通信は、プライベート・エンドポイントで実行されているAutonomous AI DatabaseインスタンスからEXTPROCエージェント・インスタンスへのトラフィックが許可されるように、ネットワーク・セキュリティ・グループ(NSG)ルールを設定することで保護されます。EXTPROCエージェント・イメージは、ポート16000で外部プロシージャをホストおよび実行するように事前構成されています。 -
エンドポイント環境を登録し、登録されたエンドポイントに対する権限を管理するPL/SQLプロシージャ。 詳細については、「DBMS_CLOUD_FUNCTION_ADMINパッケージ」を参照してください。
-
Pythonスクリプトを起動するスケジューラ・ジョブおよびプログラムを作成および管理するためのPL/SQLプロシージャ。
詳細については、DBMS_SCHEDULERを参照してください。
Autonomous AI DatabaseインスタンスでWITH_CONTEXTを使用してPythonスクリプトを実行するには、次のステップに従います:
-
Pythonスクリプトを作成します。 詳細は、Pythonスクリプトの作成を参照してください。
-
EXTPROCコンテナ・イメージを取得および構成します。 詳細については、GitHub READMEを参照してください。 -
EXTPROCエージェント・インスタンスに接続するようにAutonomous AI Databaseを構成します。 詳細については、「WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成」を参照してください。 -
Autonomous AI DatabaseでPythonスクリプトを起動します。 詳細は、Pythonスクリプトを起動するステップを参照してください。
Pythonスクリプトの作成
Pythonスクリプトの作成例を示します
-
例: データベースに表を作成するPythonスクリプト。
#!/usr/bin/env python1 import oracledb import utils def gsf_main(argc, argv): table_name = argv[0] table_pk = argv[1] print(f"Total number of args: {argc}") print(f"Arg1: {table_name}") print(f"Arg2: {table_pk}") print(f"Arg3: {argv[2]}") print(f"Arg4: {argv[3]}") print(f"Arg5: {argv[4]}") # Step 1: Get connection object con = utils.getconnection() if con is None: print("Failed to establish database connection.") return -1 try: # Step 2: Create a table cur = con.cursor() create_table_query = f""" CREATE TABLE {table_name} ( employee_id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1), employee_name VARCHAR2(4000), employee_age NUMBER, CONSTRAINT {table_pk} PRIMARY KEY (employee_id) ) """ cur.execute(create_table_query) except Exception as e: print(f"Error performing operations: {e}") return -1 finally: if cur: cur.close()この例では、
python1.pyスクリプトを作成します。 このスクリプトは、スケジューラ・ジョブからの引数を受け入れるPython関数gsf_main(argc, argv)を定義し、指定された属性を使用してデータベースに表を作成し、例外を処理します。oracledbドライバを使用すると、スクリプトをデータベースに接続できます。utilsパッケージは、データベース接続を取得するためのヘルパー関数getconnection()を提供します。
詳細は、Pythonのドキュメントを参照してください。
Oracle Autonomous AI Database EXTPROCコンテナ・イメージの構成
Oracle Autonomous AI Database EXTPROCコンテナ・イメージを取得および構成するステップについて説明します。
EXTPROCエージェントがインストールされたOracle提供のAutonomous AI Databaseコンテナ・イメージは、GitHubパッケージでホストされます。 EXTPROCコンテナ・イメージを取得および構成する手順は、GitHub READMEを参照してください。
WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、Autonomous AI Database EXTPROCエージェント・アプリケーションの作成の一部として作成されます。 このウォレットを使用すると、Extrpocエージェント・インスタンスにアクセスできます。
EXTPROCエージェント・インスタンスでPythonスクリプトを実行するには、Autonomous AI DatabaseおよびEXTPROCエージェントがMutual Transport Layer Security (mTLS)を使用して接続します。 Mutual Transport Layer Security (mTLS)を使用する場合、クライアントは、信頼できるクライアント認証局(CA)証明書を持つ標準のTLS 1.2を使用して、TCPS (セキュアTCP)データベース接続を介して接続します。 詳細は、Autonomous AI Databaseインスタンスへの接続についてを参照してください。
ノート:
認証局(CA)によって発行された公開証明書を取得して使用することもできます。最初に、EXTPROCが実行されているVMの/u01/app/oracle/extproc_walletディレクトリからオブジェクト・ストレージにウォレットをエクスポートする必要があります。
ウォレットをAutonomous AI Databaseにアップロードするには、次のステップに従います:
Pythonスクリプトを起動するステップ
Autonomous AI DatabaseでPythonスクリプトを起動するステップを示します。
Pythonスクリプトを実行するようにEXTPROCエージェント・インスタンスを構成した後、リモート・エンドポイントを登録し、スクリプトをコールするためのスケジューラ・ジョブを作成します。
Autonomous AI DatabaseでPythonスクリプトを起動するための前提条件を次に示します:
-
Pythonスクリプトは、EXTPROCエージェント・インスタンスにコピーする必要があります。
-
スケジューラ・ジョブを作成して管理し、ADMIN以外のユーザーでPythonスクリプトを起動するには、次の権限が必要です:
-
MANAGE SCHEDULER -
CREATE JOB -
登録済リモート・エンドポイントの権限
-
トピック
- Autonomous AI Databaseでのリモート・エンドポイントの登録および管理
ADMINユーザーとして、次のステップを実行して、Autonomous AI Databaseにリモート・エンドポイントを登録および管理します。 - Pythonスクリプトを起動するスケジューラ・ジョブの作成と管理
Autonomous AI DatabaseからPythonスクリプトを起動するスケジューラ・ジョブを作成および管理するステップを示します。
Autonomous AI Databaseでのリモート・エンドポイントの登録および管理
ADMINユーザーとして、次のステップを実行して、Autonomous AI Databaseのリモート・エンドポイントを登録および管理します。
リモート・エンドポイントの登録
DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENVを使用して、リモート・エンドポイントを登録します。
例:
BEGIN
DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV (
remote_endpoint_name => 'rem_executable',
remote_endpoint_url => 'remote_extproc_hostname:16000',
wallet_dir => 'WALLET_DIR',
remote_cert_dn => 'CN=MACHINENAME'
);
END;
/この例では、rem_executableライブラリを作成し、Autonomous AI Databaseのremote_endpoint_urlパラメータで指定されたEXTPROCエージェント・インスタンスを登録します。 EXTPROCエージェント・インスタンスは、ポート16000でPythonスクリプトをホストするように事前構成されています。
詳細については、「REGISTER_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。
登録済エンドポイントの権限の管理
このステップはオプションであり、ADMIN以外のユーザーがAutonomous AI DatabaseからPythonスクリプトを起動する必要がある場合にのみ必要です。
DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENVを使用して、登録済エンドポイントに対する権限をADMIN以外のユーザーに付与します。
例:
BEGIN
DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV (
remote_endpoint_name => 'REM_EXECUTABLE',
user_name => 'username');
END;
/この例では、REM_EXECUTABLEに対する権限を指定されたユーザーに付与します。 詳細については、「GRANT_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。
登録済エンドポイントに対する権限を付与した後、DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENVを使用して、登録済エンドポイントに対する権限をユーザーから取り消すことができます。
例:
BEGIN
DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV (
remote_endpoint_name => 'REM_EXECUTABLE',
user_name => 'username');
END;
/この例では、指定したユーザーからREM_EXECUTABLEに対する権限を取り消します。 詳細については、「REVOKE_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。
DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANTを問い合せて、すべてのリモート・エンドポイントに付与されている権限をリストできます。 詳細については、「DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANTビュー」を参照してください。
登録済エンドポイントの削除
DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENVを使用して、登録済リモート・エンドポイントを削除します。
例:
BEGIN
DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV (
remote_endpoint_name => 'REM_EXECUTABLE');
END;
/これにより、Autonomous AI Databaseからrem_executableリモート・エンドポイントが削除されます。 詳細については、「DEREGISTER_REMOTE_EXECUTION_ENVプロシージャ」を参照してください。
親トピック: Pythonスクリプトを起動するステップ
Pythonスクリプトを起動するスケジューラ・ジョブの作成と管理
Autonomous AI DatabaseからPythonスクリプトを起動するスケジューラ・ジョブを作成および管理するステップを示します。
親トピック: Pythonスクリプトを起動するステップ