Oracle Cloud Infrastructureドキュメント

ファンクションの呼出し

Oracle Functionsにデプロイしたファンクションは、様々な方法で起動できます:

  • 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をリクエスト・ヘッダーに含めることで、認証を自分で処理する必要があります。 これは、様々な方法で実行できます:

ヒント

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

Fn Project CLIを使用したファンクションの起動

Fn Project CLIを使用して、Oracle 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をインストールした場合、この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-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が存在する言語でファンクションを起動するプログラムを記述する場合、OracleはそのSDKを使用してファンクションを起動することをお薦めします。 特に、SDKによりOracle Cloud Infrastructure認証が容易になります。

APIおよび署名リクエストの使用については、REST APIおよび「セキュリティ資格証明」を参照してください。 SDKの詳細は、「ソフトウェア開発キットとコマンドライン・インタフェース」を参照してください。

ファンクションを起動するにはInvokeFunction API操作を使用します。

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

oci-curlまたは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をインストールした場合、このCLIを使用して、ファンクションを呼び出すためのAPIリクエストを送信できます。 特に、CLIはOracle Cloud Infrastructure認証を容易にします。 Oracle Cloud Infrastructure CLIの使用の詳細は、「コマンド・ライン・インタフェース(CLI)」を参照してください。

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

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

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

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

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

    たとえば、"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署名キーを暗号化するためのパスフレーズが指定されたと仮定すると(Oracleが推奨)、プロンプトが表示された場合はパスフレーズを入力します。

ファンクションの呼出しエンドポイントへの署名付きリクエストの送信(oci-curlを使用)

Oracle Functionsのクライアント環境を準備するための指示に従った場合、ファンクションの呼出しに使用する準備としてoci-curlをインストールおよび構成します。 特に、oci-curlによってOracle Cloud Infrastructure認証が容易になります。

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

oci-curlを使用して署名付きリクエストをファンクション呼出しエンドポイントに送信して、Oracle Functionsにデプロイされているファンクションを呼び出すには:

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

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

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

  3. ターミナル・ウィンドウで、sourceコマンドを使用し、次のように入力してoci-curlの現在のシェル環境を設定します:

    $ source <path-to-script>/oci-curl.sh

    ここで、<path-to-script>は、oci-curl.shスクリプトのロケーションへのパスです(「3. oci-curlのコピーの作成および構成」を参照)。 例えば:

    $ source ~/oci-curl/oci-curl.sh
  4. sourceコマンドを入力したのと同じターミナル・ウィンドウで、oci-curlを使用して、次のように入力して署名付きPOSTリクエストをファンクションの呼出しエンドポイントに送信することによってファンクションを呼び出します:

    oci-curl "<invoke-endpoint-host>" post <filename> "<invoke-endpoint-path>"

    説明:

    • <invoke-endpoint-host>は、https://を除いて.oraclecloud.comまで(およびを含む)を除き、前のステップで取得したエンドポイントの最初の半分です。 たとえば、fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com
    • <filename>は、ファンクションに渡すデータを含むファイルの名前です(空の場合でもファイルを指定する必要があります)。 たとえば、payload.json
    • <invoke-endpoint-path>は、前のステップで取得したエンドポイントの後半(.oraclecloud.com以降は除く)です。 たとえば、 /20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke

    たとえば、前の例を組み合わせて、次のように入力します:

    $ oci-curl "fht7ns4mn2q.us-phoenix-1.functions.oci.oraclecloud.com" post payload.json "/20181201/functions/ocid1.fnfunc.oc1.phx.aaaa____uxoa/actions/invoke"
  5. API署名キーを暗号化するためのパスフレーズが指定されたと仮定すると(Oracleが推奨)、プロンプトが表示された場合はパスフレーズを入力します。