このページは機械翻訳したものです。

更新日 2025-01-31

ファンクションの呼出し

OCI Functionsにデプロイされたファンクションを呼び出す様々な方法をご覧ください。

OCIファンクションにデプロイしたファンクションは、様々な方法で呼び出すことができます:

  • Fn ProjectのCLIを使用する。
  • Oracle Cloud InfrastructureのCLIを使用する。
  • Oracle Cloud Infrastructure SDKを使用する。
  • ファンクションの呼出しエンドポイントに対して署名付きHTTPリクエストを発行する。すべてのファンクションに呼出しエンドポイントがあります。

前述の各ファンクションは、APIへのリクエストを介してファンクションを呼び出します。APIへのリクエストは、ファンクションが属しているコンパートメントの署名およびOCIDをリクエスト・ヘッダーに含めることによって認証される必要があります。このようなリクエストは、「署名済」リクエストと呼ばれます。署名には、暗号化された形式のOracle Cloud Infrastructure資格証明が含まれます。

Fn ProjectのCLIまたはOracle Cloud InfrastructureのCLIを使用してファンクションを呼び出す場合は、認証が自動的に処理されます。Fn ProjectのCLIを使用したファンクションの呼出しおよびOracle Cloud InfrastructureのCLIを使用したファンクションの呼出しを参照してください。

Oracle Cloud Infrastructure SDKを使用してファンクションを呼び出す場合、SDKを使用して認証を処理できます。SDKを使用したファンクションの呼び出しを参照してください。

ファンクションの呼出しエンドポイントに対して署名付きHTTPリクエストを行う場合は、ファンクションが属するコンパートメントの署名およびOCIDをリクエスト・ヘッダーに含めて、自分で認証を処理する必要があります。これは、様々な方法で実行できます:

ファンクションの呼出し方法によって、ファンクションが実行できる最大時間が次のように決まります。

  • Fn ProjectのCLIを使用してファンクションを呼び出すと、ファンクション定義で指定する「タイムアウト」が適用されます(デフォルトは30秒)。Changing Default Memory and Timeout Settingsを参照してください。
  • Oracle Cloud Infrastructure CLIを使用してファンクションを呼び出すと、OCI CLIの--read-timeoutグローバル・パラメータの値が適用されます(デフォルトは60秒)。oci fn function invokeを参照してください。
  • Oracle Cloud Infrastructure SDKsを使用してファンクションを呼び出すと、クライアントに指定された読取りタイムアウトが適用されます。たとえば、Java SDKおよびPython SDKのドキュメントを参照してください。
  • PL/SQL SDKを使用してファンクションを起動すると、UTL_HTTP.set_transfer_timeoutの値が適用されます(デフォルトは60秒)。
  • DBMS_CLOUD.SEND_REQUESTを使用してDBMS_CLOUD REST APIからファンクションを呼び出すと、UTL_HTTP.set_transfer_timeoutの値が適用されます(デフォルトは60秒)。
ヒント

このトピックのいずれかのステップを正常に完了できない場合は、一般的な問題の解決策を確認してください(OCI関数のトラブルシューティングを参照)。

同期およびデタッチされた起動タイプ

ファンクションを呼び出すときに、ファンクション呼出しのタイプを指定できます。関数呼び出しタイプは、次のように、結果処理の責任、制御が呼び出し元に返された場合、および返されるHTTPステータスコードを決定します。

  • 同期:関数呼出しタイプとしてSyncを指定した場合(デフォルト)、OCI Functionsはリクエストを実行します。その後、正常に完了すると、OCI FunctionsはHTTP 200ステータス・コードを発行し、制御とともにコール元に結果を返します。
  • デタッチ済:「デタッチ済」をファンクション呼出しタイプとして指定すると、OCIファンクションによってリクエストが実行されます。その後、処理が開始されるとすぐに、OCI FunctionsはHTTP 202ステータス・コードを発行し、コール元に制御を返します。関数自体が結果の処理を担当します。

ファンクション呼出しタイプを指定するには:

  • OCI CLIのfn function invokeコマンドを使用してファンクションを呼び出す場合は、--fn-invoke-typeパラメータを使用します。例:
    oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body "" --fn-invoke-type "detached"
  • FDKのいずれかを使用して別のファンクションからファンクションを呼び出す場合は、ファンクション・コールで起動タイプを指定します。たとえば、Python FDKを使用する場合:
    resp = client.invoke_function(function_id=function_ocid, invoke_function_body=function_body, fn_invoke_type='detached')
  • OCI CLIのraw-requestコマンドを使用してファンクションを呼び出す場合は、--request- headersパラメータに"fn-invoke-type"を含めます。例:
    oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body ""  --request-headers '{"fn-invoke-type" : "detached"}'

Fn ProjectのCLIを使用したファンクションの呼出し

Fn ProjectのCLIを使用してOCI Functionsにデプロイされたファンクションを呼び出すには:

  1. ファンクション開発者として開発環境にログインします。

  2. ターミナル・ウィンドウで入力します:

    コマンド
    fn invoke <app-name> <function-name>

    ここでは:

    • <app-name>は、呼び出すファンクションを含むアプリケーションの名前です
    • <function-name>は呼び出す必要があるファンクションの名前です

    例:

    コマンド
    fn invoke helloworld-app helloworld-func

    出力:

    Hello World !
    ヒント

    引数と値をファンクションに渡す場合は、fn invokeコマンドにecho -n '<argument>=<value>'|を接頭辞として付加します

    ファンクションで引数と値がJSONと予想される場合は、有効なJSON形式を使用します。例:

    コマンド
    echo -n '{"name":"John"}' | fn invoke helloworld-app helloworld-func

    出力:

    Hello John !

Oracle Cloud InfrastructureのCLIを使用したファンクションの呼出し

Oracle Cloud Infrastructure CLIをインストールした場合、これを使用してファンクションを呼び出すAPIリクエストを送信できます。特に、Oracle Cloud InfrastructureのCLIを使用するとOracle Cloud Infrastructure認証が容易になります。Oracle Cloud Infrastructure CLIの使用方法の詳細は、コマンドライン・インタフェース(CLI)を参照してください。

これらの手順では、次のことを前提にしています:

  • Oracle Cloud Infrastructure CLIをすでにインストールおよび構成している
  • 開発環境用に構成されたファンクション開発者としてファンクションを呼び出す場合

Oracle Cloud Infrastructure CLIを使用してファンクションを呼び出すには:

  1. ファンクション開発者として開発環境にログインします。

  2. ターミナル・ウィンドウで入力します:

    コマンド
    oci fn function invoke --function-id <function-ocid> --file "<output-filepath>" --body "<request-parameters>"

    ここでは:

    • <function-ocid>は、呼び出すファンクションのOCIDです。ファンクションのOCIDを調べるには、fn inspectコマンドを使用してファンクションのidプロパティの値を参照します(ファンクションのリストを参照)。
    • <output-filepath>は、レスポンスを書き込むファイルのパスと名前です。レスポンスをstdoutに書き込むには、--file "-"を指定します
    • <request-parameters>は、オプションでファンクションに渡す引数と値を指定します。ファンクションで引数と値がJSONと予想される場合は、有効なJSON形式を使用します。たとえば、--body '{"name":"John"}'です。渡すリクエスト・パラメータがない場合でも、リクエストに--body ""を含める必要があります。

    例:

    • コマンド
      oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body ""

      出力:

      Hello World !
    • コマンド
      oci fn function invoke --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --file "-" --body '{"name":"John"}'

      出力:

      Hello John !

ファンクションを呼び出すためのSDKの使用

Oracle Cloud Infrastructure SDKが存在する言語でファンクションを呼び出すプログラムを作成する場合は、そのSDKを使用してファンクションを呼び出すAPIリクエストを送信することをお薦めします。特に、SDKを使用するとOracle Cloud Infrastructure認証が容易になります。

SDKを使用してファンクションを呼び出す場合、Oracle Cloud Infrastructure CLIのraw-requestコマンドの使用時に指定する呼出しエンドポイント全体は指定しません(ファンクションの呼出しエンドポイントの取得を参照)。かわりに、ファンクションの呼出しエンドポイントの最初の部分のみを指定します。たとえば、SDKを使用する場合は、ファンクションの呼出しエンドポイントをhttps://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invokeとして指定しないでください。かわりに、ファンクションの呼出しエンドポイントをhttps://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.comとして指定します。

APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。

InvokeFunction API操作を使用してファンクションを呼び出します。

ファンクションの呼出しエンドポイントの取得

Oracle Cloud Infrastructure CLIのraw-requestコマンドを使用してファンクションを呼び出す場合、ファンクションの呼出しエンドポイントを指定する必要があります。

ファンクションの呼出しエンドポイントを取得するには:

  1. ファンクション開発者として開発環境にログインします。

  2. ターミナル・ウィンドウで入力します:

    コマンド
    fn inspect function <app-name> <function-name>

    ここでは:

    • <app-name>は、呼出しエンドポイントを取得するファンクションが含まれているアプリケーションの名前です
    • <function-name>は、呼出しエンドポイントを取得するファンクションの名前です

    例:

    コマンド
    fn inspect function helloworld-app helloworld-func

    出力:

    {
       "annotations": {
    		"fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke",
    
    ...
    }

    ファンクションの呼出しエンドポイントは"fnproject.io/fn/invokeEndpoint"の値です。たとえば、"https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke"(読みやすくするために省略)と入力します。

ファンクションの呼出しエンドポイントへの署名付きリクエストの送信(Oracle Cloud Infrastructure CLIのraw-requestコマンドを使用)

Oracle Cloud Infrastructure CLIをインストールした場合、これを使用してファンクションを呼び出すAPIリクエストを送信できます。特に、CLIを使用するとOracle Cloud Infrastructure認証が容易になります。Oracle Cloud Infrastructure CLIの使用方法の詳細は、コマンドライン・インタフェース(CLI)を参照してください。

これらの手順では、次のことを前提にしています:

  • Oracle Cloud Infrastructure CLIをすでにインストールおよび構成している
  • 開発環境用に構成されたファンクション開発者としてファンクションを呼び出す場合

Oracle Cloud Infrastructure CLIのraw-requestコマンドを使用してファンクションの呼出しエンドポイントに署名付きリクエストを送信することにより、OCIファンクションにデプロイされたファンクションを呼び出すには:

  1. ファンクション開発者として開発環境にログインします。

  2. ファンクションの呼出しエンドポイントを取得します(ファンクションの呼出しエンドポイントの取得を参照)。

    たとえば、"fnproject.io/fn/invokeEndpoint": "https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke"(読みやすくするために省略)と入力します。

  3. Oracle Cloud Infrastructure CLIのraw-requestコマンドを使用し、次のように入力して、署名付きPOSTリクエストをファンクションの呼出しエンドポイントに送信することによって、ファンクションを呼び出します:

    コマンド
    oci raw-request --http-method POST --target-uri <invoke-endpoint> --request-body "<request-parameters>"

    ここでは:

    • <invoke-endpoint>は、前のステップで取得したエンドポイントです。
    • <request-parameters>は、オプションでファンクションに渡す引数と値を指定します。ファンクションで引数と値がJSONと予想される場合は、有効なJSON形式を使用します。渡すリクエスト・パラメータがない場合でも、リクエストに--request-body ""を含める必要があります。

    例:

    • コマンド
      oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body ""

      出力:

      Hello World !
    • コマンド
      oci raw-request --http-method POST --target-uri https://fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke --request-body '{"name":"John"}'

      出力:

      Hello John !
  4. API署名キーを暗号化するためにパスフレーズを指定した場合は、プロンプトが表示されたらパスフレーズを入力します。