AWSラムダをSQL関数として起動するステップ
データベース内のSQL関数としてAWSリモート関数を呼び出すステップを示します。
AWS LambdaをSQL関数として呼び出すには、APIエンドポイントを介してそれぞれのクラウド関数を参照し、呼び出すSQLラッパー関数のカタログを作成します。 このカタログを作成する前に、このカタログで参照するために必要なクラウド関数が作成されていることを前提としています。
ノート:
AWSラムダ関数にアクセスするには、必要なポリシーを構成する必要があります。 詳細については、「AWSラムダ・リソースにアクセスするためのIAMポリシーの作成」と「ラムダに対するリソース・ベースのポリシーの使用」を参照してください。- プロシージャ
DBMS_CLOUD.CREATE_CREDENTIAL
を使用して資格証明を作成します。 作成する資格証明オブジェクトは、秘密キー・タイプである必要があります。SET DEFINE OFF BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
( credential_name => 'AWS_CRED', username => 'access_key_ID', password => 'secret_access_key' ); END; /これにより、
AWS_CRED
資格証明が作成されます。詳細については、「CREATE_CREDENTIALプロシージャ」を参照してください。
- カタログを作成します。
カタログは、APIエンドポイントを介してそれぞれのクラウド関数を参照およびコールするラッパー関数のコレクションです。
AWS関数のカタログを作成する例。
BEGIN
DBMS_CLOUD_FUNCTION.CREATE_CATALOG
( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', service_provider => 'AWS', cloud_params => '{"region_id":"ap-northeast-1"}' ); END; / PL/SQL procedure successfully completed.これにより、
AWS_DEMO_CATALOG
カタログが作成されます。詳細については、「CREATE_CATALOGプロシージャ」を参照してください。 「DBA_CLOUD_FUNCTION_CATALOGビュー」ビューおよび「USER_CLOUD_FUNCTION_CATALOGビュー」ビューを問い合せると、データベース内のすべてのカタログのリストを取得できます。
- カタログ内の関数をリストできます。
次に、AWSラムダ関数をリストする例を示します:
VAR function_list CLOB; BEGIN
DBMS_CLOUD_FUNCTION.LIST_FUNCTIONS
( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', function_list => :function_list ); END; / PL/SQL procedure successfully completed. SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual; SEARCH_RESULTS --This is a sample output ------------------------------------------------------------------------------------------------ [ { "functionName" : "test3_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:test3_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "SumOfNum_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:SumOfNum_example" SEARCH_RESULTS --------------------------------------------------------------------------------------------------- "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "testlambda_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:testlambda_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, SEARCH_RESULTS --------------------------------------------------------------------------------------------------- { "functionName" : "hellp-python_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:hellp-python_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "testlam_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:testlam_example", SEARCH_RESULTS --------------------------------------------------------------------------------------------------- "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" } ]詳細については、「LIST_FUNCTIONSプロシージャ」を参照してください。
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
を実行してラッパーSQL関数を作成します。 次のいずれかのメソッドを使用して、それぞれのクラウド関数をコールするラッパーSQL関数をカタログに作成できます:-
SYNC_FUNCTIONS:
SYNC_FUNCTIONS
は、カタログ内のラッパー関数を、カタログが作成されたリージョン、コンパートメントおよびテナンシで定義されたクラウド関数の完全なリストと自動的に同期(作成または削除)する、最も迅速で簡単なメソッドです。 たとえば:
BEGIN
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.これにより、カタログに新しい関数を追加し、カタログから削除された関数のラッパーを削除するためのPL/SQLラッパーが作成されます。
次の問合せを実行して、同期を確認します。
SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION'; OBJECT_NAME -------------------------------------------------------------------------------- TESTLAMBDA HELLP-PYTHON TESTLAM TEST3 SUMOFNUMBERS
ノート:
このコマンドを実行するには、現在のユーザーをノートにとります。詳細については、「SYNC_FUNCTIONSプロシージャ」を参照してください。
DBMS_CLOUD.CREATE_FUNCTION
を使用して、それぞれのクラウド関数をコールするSQL
関数をカタログに手動で作成できます。
AWS_DEMO_CATALOG
カタログに関数を作成する例。BEGIN
DBMS_CLOUD_FUNCTION.CREATE_FUNCTION
( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', function_name => 'aws_testlambda', function_id => 'arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python' ); END; / PL/SQL procedure successfully completed.これにより、
AWS_DEMO_CATALOG
カタログにAWS_TESTLAMBDA
関数が作成されます。カタログ内の
AWS_TESTLAMBDA
関数は、FUNCTION_ID
パラメータによってエンドポイントが参照されるそれぞれのクラウド・関数への参照です。 カタログ内の関数を引数とともに呼び出すと、対応するクラウド関数が実行され、クラウド関数によって返される出力が提供されます。「DBA_CLOUD_FUNCTIONビュー」ビューおよび「USER_CLOUD_FUNCTIONビュー」ビューを問い合せて、データベース内のすべての関数のリストを取得できます。
詳細については、「CREATE_FUNCTIONプロシージャ」を参照してください。
-
- 関数の作成後、
DESCRIBE
を実行して呼び出すことができます。DESC AWS_TESTLAMBDA COLUMN STATUS format a30 COLUMN OUTPUT format a30
SELECT AWS_TESTLAMBDA(NULL) FROM dual; AWS_TESTLAMBDA(NULL) ---------------------------------------------------- {"STATUS":"200","RESPONSE_BODY":"Hello Python!!"}
これにより、
AWS_DEMO_CATALOG
カタログの関数参照arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python
をコールして、AWS_TESTLAMBDA
関数が起動されます。 DROP_FUNCTION
プロシージャを使用して、既存の関数を削除できます。 たとえば:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA'); PL/SQL procedure successfully completed.
これにより、
AWS_TESTLAMBDA
関数がAWS_DEMO_CATALOG
カタログから削除されます。詳細については、「DROP_FUNCTIONプロシージャ」を参照してください。
DROP_CATALOG
プロシージャを使用して、既存のカタログを削除できます。 たとえば:BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG
( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.これにより、データベースから
AWS_DEMO_CATALOG
が削除されます。詳細については、「DROP_CATALOGプロシージャ」を参照してください。
親トピック: ユーザー定義関数の起動