Autonomous AI Databaseインスタンスでの汎用スクリプトの起動
自律型AIデータベースで、BASH、CまたはPythonタイプの汎用スクリプトを起動できます。
Autonomous AI Databaseでの汎用スクリプトの実行について
Autonomous AI Databaseインスタンスから、Bash、CまたはPythonで記述されたスクリプトを含む汎用スクリプトを起動できます。
自律型AIデータベース・インスタンスで汎用スクリプトを直接実行することはできません。かわりに、スクリプトは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)で実行されているOracle Autonomous AI Database Extprocコンテナ・イメージにリモートでホストされます。Oracle Schedulerジョブを使用して、Autonomous AI Databaseから汎用スクリプトを起動します。作成するOracle Schedulerジョブは、実行可能ジョブである必要があります。実行可能ジョブは、シェル・スクリプトまたはその他の実行可能ファイルを実行できます。
Autonomous AI Databaseからの汎用スクリプトは、データベースがプライベート・エンドポイント上にある場合にのみサポートされます。汎用スクリプトを実行するには、EXTPROCエージェントがインストールされているOracle Autonomous AI Databaseコンテナ・イメージを取得、インストールおよび構成する必要があります。Autonomous AI DatabaseのEXTPROCコンテナ・イメージを使用すると、Autonomous AI DatabaseからBASH、CまたはPythonで記述された外部プロシージャおよびスクリプトをコールできます。EXTPROCエージェント・インスタンスはプライベート・サブネットでホストされ、Autonomous AI Databaseはリバース接続エンドポイント(RCE)を介してEXTPROCエージェントにアクセスします。
汎用スクリプトは、次を使用してデプロイされます。
-
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パッケージを参照してください。
-
汎用スクリプトを起動するスケジューラ・ジョブおよびプログラムを作成および管理するためのPL/SQLプロシージャ。
詳細は、DBMS_SCHEDULERを参照してください。
Autonomous AI Databaseインスタンスから汎用スクリプトを実行するには、次のステップに従います:
-
EXTPROCコンテナ・イメージを取得して構成します。詳細は、GitHub READMEを参照してください。 -
EXTPROCエージェント・インスタンスに接続するようにAutonomous AI Databaseを構成します。詳細は、「EXTPROCエージェント・インスタンスへのセキュアな接続を作成するためのWalletのアップロード」を参照してください。 -
Autonomous AI Databaseで汎用スクリプトを起動します。詳細は、Pythonスクリプトを起動するステップを参照してください。
WalletのアップロードによるEXTPROCエージェント・インスタンスへのセキュアな接続の作成
自己署名ウォレットは、EXTPROCエージェント・アプリケーションの作成の一部として作成されます。このウォレットを使用すると、Autonomous AI DatabaseインスタンスからEXTPROCエージェント・インスタンスにアクセスできます。
EXTPROCエージェント・インスタンスで汎用スクリプトを実行するには、Autonomous AI DatabaseとEXTPROCエージェントが相互Transport Layer Security (mTLS)を使用して接続します。mTLSを使用してEXTPROCエージェントに接続する場合は、標準TLS 1.2と信頼できるクライアント認証局(CA)証明書を使用したTCPS (Secure TCP)データベース接続を使用します。詳細は、Autonomous AIデータベース・インスタンスへの接続についてを参照してください。
ノート
ノート:認証局(CA)によって発行された公開証明書を取得して使用することもできます。
前提条件として、EXTPROCが実行されているVMの/u01/app/oracle/wallets/extproc_wallet/ディレクトリからウォレットをオブジェクト・ストレージにエクスポートする必要があります。これにより、Autonomous AI Databaseはウォレットを使用してEXTPROCに安全にアクセスできます。
EXTPROCウォレットをAutonomous AI Databaseインスタンスにアップロードします:
-
Autonomous AI Databaseのオブジェクト・ストレージから、
EXTPROCエージェント・インスタンスの証明書を含むウォレットcwallet.ssoをインポートします。ウォレット・ファイルについては、次の点に注意してください。-
ウォレット・ファイルは、データベース・ユーザーIDおよびパスワードとともに、
EXTPROCエージェント・インスタンスへのアクセスを提供します。ウォレット・ファイルを安全な場所に格納し、認可されたユーザーのみと共有します。 -
ウォレット・ファイルの名前を変更しないでください。オブジェクト・ストレージのウォレット・ファイルには、
cwallet.ssoという名前を付ける必要があります。
-
-
ウォレット・ファイル
cwallet.ssoを格納するオブジェクト・ストレージにアクセスするための資格証明を作成します。様々なオブジェクト・ストレージ・サービスのusernameおよびpasswordパラメータの詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。詳細は、「リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスについて」を参照してください。
-
ウォレット・ファイル
cwallet.ssoのディレクトリをAutonomous AI Databaseに作成します。CREATE DIRECTORY WALLET_DIR AS 'directory_location';ディレクトリの作成の詳細は、Autonomous AI Databaseでのディレクトリの作成を参照してください。
-
DBMS_CLOUD.GET_OBJECTを使用して、Object Storageからウォレットをダウンロードします。次に例を示します。BEGIN DBMS_CLOUD.GET_OBJECT ( credential_name => 'DEF_CRED_NAME', object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso', directory_name => 'WALLET_DIR' ); END; /この例では、
namespace-stringはOracle Cloud Infrastructure Object Storageネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースを参照してください。ウォレットは、前のステップのWALLET_DIRで作成したディレクトリにコピーされます。
EXTPROCエージェント・インスタンスに接続できるウォレットが、Autonomous AI Databaseインスタンスで使用できるようになりました。
Pythonスクリプトを起動するステップ
自律型AIデータベースでPythonスクリプトを起動するステップを示します。
Pythonスクリプトを実行するようにEXTPROCエージェント・インスタンスを構成した後、リモート・エンドポイントを登録し、スクリプトをコールするスケジューラ・ジョブを作成します。
Autonomous AI DatabaseでPythonスクリプトを起動するための前提条件を次に示します:
-
汎用スクリプトは、EXTPROCエージェント・インスタンスにコピーする必要があります。詳細は、GitHub READMEを参照してください。
-
スケジューラ・ジョブを作成して管理し、ADMIN以外のユーザーでPythonスクリプトを起動するには、次の権限が必要です:
-
MANAGE SCHEDULER -
CREATE JOB -
登録済リモート・エンドポイントの権限
-
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_urlパラメータで指定されたEXTPROCエージェント・インスタンスを登録します。EXTPROCエージェント・インスタンスは、ポート16000で汎用スクリプトをホストするように事前構成されています。
詳細は、REGISTER_REMOTE_EXECUTION_ENVプロシージャを参照してください。
登録済エンドポイントの権限の管理
このステップはオプションであり、ADMIN以外のユーザーがAutonomous AI Databaseから汎用スクリプトを起動する必要がある場合にのみ必要です。
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プロシージャを参照してください。
汎用スクリプトを起動するスケジューラ・ジョブの作成と管理
Autonomous AI Databaseから汎用スクリプトを起動するスケジューラ・ジョブを作成および管理するステップを示します。
ADMIN以外のユーザーとして次のステップを実行するには、必要な権限が必要です。詳細は、Pythonスクリプトを起動するステップを参照してください。
-
DBMS_SCHEDULER.CREATE_JOBを使用して、ジョブ・タイプがexecutableのスケジューラ・ジョブを作成します。例:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'rem_exec_job', job_type => 'executable', job_action => '*script_location_in_remote_docker_image/name*', number_of_arguments => 1, enabled => false, auto_drop => true); END; /この例では、実行可能タイプの
rem_exec_jobスケジューラ・ジョブを作成します。job_nameパラメータは、ジョブの名前を指定します。job_typeパラメータは、ジョブ・アクション・タイプを指定します。Autonomous AI Databaseで汎用スクリプトを起動するには、実行可能ファイルとしてjob_typeを指定する必要があります。job_actionパラメータは、ジョブのインライン・アクションを指定します。これは、起動する必要があるリモート・エンドポイント上のスクリプトの場所です。number_of_argumentsパラメータは、ジョブ引数の数を指定します。enabledパラメータは、ジョブを作成直後に有効にするかどうかを示します。auto_dropパラメータは、完了後にジョブを削除するかどうかを示します。 -
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUEを使用して、ジョブ引数の値を設定します。例:
BEGIN DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE ( job_name => 'rem_exec_job', argument_position => 1, argument_value => 'param1'); END; / -
DBMS_SCHEDULER.CREATE_JOBを使用して、rem_exec_jobジョブのdestination属性を変更します。例:
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'rem_exec_job', attribute => 'destination', value => 'REMOTE_EXTPROC:*remote_endpoint_name*'); END; /この例では、
rem_exec_jobジョブのdestination属性を変更して、リモート・ライブラリ・パスを指定します。job_nameパラメータは、ジョブの名前を指定します。attributeパラメータは、変更する属性を指定します。valueパラメータは、destination属性を変更してリモート・エンドポイント宛先を指定します。このパラメータは、
REMOTE_EXTPROC:remote_endpoint_name形式の文字列値を受け入れます。ここで、remote_endpoint_nameは登録されているリモート・エンドポイントの名前です。指定したエンドポイントに対する権限がない場合、エラーが発生します。
詳細は、「DBMS_SCHEDULERサブプログラム」を参照してください。
-
スケジューラ・ジョブ
DBMS_SCHEDULER.ENABLEを実行します。例:
BEGIN DBMS_SCHEDULER.ENABLE ( name => 'rem_exec_job'); END; /この例では、
rem_exec_jobジョブを有効にします。詳細は、DBMS_SCHEDULERを参照してください。ジョブを有効にすると、スケジューラはジョブの実行を開始します。
スケジューラ・ジョブのステータスを表示するには、USER_CLOUD_FUNCTION_RUN_DETAILSビューおよびDBA_CLOUD_FUNCTION_RUN_DETAILSビューを問い合せます。