機械翻訳について

AWSラムダをSQL関数として起動するステップ

データベース内のSQL関数としてAWSリモート関数を呼び出すステップを示します。

AWS LambdaをSQL関数として呼び出すには、APIエンドポイントを介してそれぞれのクラウド関数を参照し、呼び出すSQLラッパー関数のカタログを作成します。 このカタログを作成する前に、このカタログで参照するために必要なクラウド関数が作成されていることを前提としています。

ノート:

AWSラムダ関数にアクセスするには、必要なポリシーを構成する必要があります。 詳細については、「AWSラムダ・リソースにアクセスするためのIAMポリシーの作成」「ラムダに対するリソース・ベースのポリシーの使用」を参照してください。
  1. プロシージャ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プロシージャ」を参照してください。

  2. カタログを作成します。

    カタログは、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ビュー」ビューを問い合せると、データベース内のすべてのカタログのリストを取得できます。

  3. カタログ内の関数をリストできます。

    次に、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プロシージャ」を参照してください。

  4. 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プロシージャ」を参照してください。

  5. 関数の作成後、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関数が起動されます。

  6. 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プロシージャ」を参照してください。

  7. DROP_CATALOGプロシージャを使用して、既存のカタログを削除できます。 たとえば:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AWS_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

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

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