AWS LambdaをSQL関数として起動するステップ
データベース内のSQL関数としてAWSリモート関数を呼び出すステップを示します。
SQL関数としてAWS Lambdaを起動するために、APIエンドポイントを介してそれぞれのクラウド関数を参照および呼び出すSQLラッパー関数のカタログを作成します。このカタログを作成する前に、このカタログで参照するために必要なクラウド機能を作成したものとします。
ノート
ノート: AWSラムダ関数にアクセスするには、必要なポリシーを構成する必要があります。詳細は、AWS Lambdaリソースにアクセスするための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プロシージャを参照してください。
- SYNC_FUNCTIONS:
-
ファンクションの作成後、
DESCRIBEを実行して起動できます。DESC AWS_TESTLAMBDA COLUMN STATUS format a30 COLUMN OUTPUT format a30SELECT 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_DEMO_CATALOGカタログからAWS_TESTLAMBDAファンクションが削除されます。詳細は、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プロシージャを参照してください。