APIゲートウェイ・バック・エンドとしてのOCI Functionsでのファンクションの追加

OCI Functionsで定義されたサーバーレス・ファンクションを公開するAPIゲートウェイを使用してAPIデプロイメントを作成する方法について学習します。

一般的な要件は、バック・エンドとしてサーバーレス・ファンクションを使用するAPIを構築すること、およびそれらのファンクションに対するフロントエンド・アクセスを提供するAPIゲートウェイを構築することです。

OCI Functionsを使用して、Dockerイメージとして構築し、指定したDockerレジストリにプッシュできます。各ファンクションの定義は、OCIファンクション・サーバーにメタデータとして格納されます。ファンクションを初めて起動すると、OCI Functionsは、指定したDockerレジストリからファンクションのDockerイメージをプルし、Dockerコンテナとして実行してファンクションを実行します。同じファンクションに対する後続のリクエストがある場合、OCIファンクションは、それらのリクエストを同じ実行中のコンテナに送ります。アイドル状態の期間の後、Dockerコンテナは停止されます。

APIゲートウェイ・サービスを使用してAPIゲートウェイを作成すると、OCIファンクションで定義されているサーバーレス・ファンクションを呼び出すAPIデプロイメントを作成できます。

APIのバックエンドとしてOCI Functionsのサーバーレス・ファンクションを使用する前に:

サーバーレス・ファンクションのバック・エンドをAPIデプロイメント仕様に追加するには、次を実行します:

  • コンソールの使用
  • JSONファイルの編集

APIゲートウェイのバック・エンドとして使用するためのOCI関数でのサーバーレス・ファンクションの作成およびデプロイ

APIゲートウェイから起動できるOCIファンクションのサーバーレス・ファンクションを作成するには、OCIファンクション・ドキュメントの手順に従って次を実行します:

コンソールを使用したAPIデプロイメント仕様へのサーバーレス・ファンクション・バック・エンドの追加

コンソールを使用してOCIファンクション・ファンクションのバック・エンドをAPIデプロイメント仕様に追加するには:

  1. コンソールを使用してAPIデプロイメントを作成または更新し、「最初から」オプションを選択して、「基本情報」ページで詳細を入力します。

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイおよびAPIゲートウェイまたはAPIデプロイメントの更新を参照してください。

  2. 「認証」ページで、認証オプションを指定します。

    認証オプションの詳細は、APIデプロイメントへの認証と認可の追加を参照してください。

  3. 「ルート」ページで、新しいルートを作成し、次を指定します:

    • パス: リストされたメソッドを使用したバックエンド・サービスへのAPIコールのパス。指定するルート・パスで次の点に注意してください:

    • メソッド: バックエンド・サービスが受け入れた1つ以上のメソッド。たとえば、GET, PUTです。
    • 単一のバックエンドの追加または複数のバックエンドの追加: すべてのリクエストを同じバックエンドにルーティングするか、入力したコンテキスト変数およびルールに従ってリクエストを異なるバックエンドにルーティングするか。

      これらの手順は、単一のバックエンドを使用することを想定しているため、「単一のバックエンドの追加」を選択します。別のバックエンドを使用する場合は、「複数のバックエンドの追加」を選択し、コンソールを使用したAPIデプロイメント仕様への動的バックエンド選択の追加の手順に従います。

    • バックエンド・タイプ:バックエンド・サービスのタイプ(Oracle Functions)。
    • <compartment-name>のアプリケーション:ファンクションを含むOCI Functionsのアプリケーションの名前。別のコンパートメントからアプリケーションを選択できます。
    • ファンクション名: OCI Functions内のファンクションの名前。

    この例のルートでは、OCI Functionsの単純なHello Worldサーバーレス・ファンクションを単一のバック・エンドとして定義しています。

    フィールド: 入力:
    パス: /hello
    メソッド: GET
    バックエンド・タイプ: Oracle Functions
    <compartment-name>のアプリケーション: acmeapp
    ファンクション名: acme-func
  4. (オプション)「別のルート」をクリックして、追加ルートの詳細を入力します。
  5. 「次」をクリックして、APIデプロイメント用に入力した詳細を確認します。
  6. APIデプロイメントを作成または更新するには、「作成」または「変更の保存」をクリックします。
  7. (オプション) コールしてAPIが正常にデプロイされていることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。

    サーバーレス・ファンクションがパラメータを受け入れる場合は、APIへのコールにそれらを含めます。例:

    curl -k -X GET https://lak...sjd.apigateway.us-phoenix-1.oci.customer-oci.com/marketing/hello/ -d "name=john"

JSONファイルの編集によるAPIデプロイメント仕様へのサーバーレス・ファンクション・バック・エンドの追加

JSONファイルのAPIデプロイメント仕様にOCI Functionsファンクション・バックエンドを追加するには:

  1. 任意のJSONエディタを使用し、JSONファイル内に次のフォーマットでAPIデプロイメント仕様を作成します:

    {
      "requestPolicies": {},
      "routes": [
        {
          "path": "<api-route-path>",
          "methods": ["<method-list>"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "<identifier>"
          },
          "requestPolicies": {}
        }
      ]
    }

    ここでは:

    • "requestPolicies"は、APIデプロイメントの動作を制御するオプションのポリシーを指定します。APIデプロイメント仕様のすべてのルートにポリシーを適用する場合は、routesセクションの外にポリシーを配置します。特定のルートのみにポリシーを適用する場合は、ポリシーをroutesセクション内に配置します。APIデプロイメント仕様へのリクエスト・ポリシーとレスポンス・ポリシーの追加を参照してください。
    • <api-route-path>には、バックエンド・サービスに対してリストされているメソッドを使用して、APIコールのパスを指定します。指定するルート・パスで次の点に注意してください:

    • <method-list>は、バックエンド・サービスによって受け入れられる1つ以上のメソッドをカンマで区切って指定します。たとえば、"GET, PUT"です。
    • <identifier>は、バックエンド・サービスとして使用するファンクションのOCIDを指定します。たとえば、"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"です。

    たとえば、次の基本的なAPIデプロイメント仕様では、OCI Functionsの単純なHello Worldサーバーレス・ファンクションを単一のバックエンドとして定義しています:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. APIデプロイメント仕様を含むJSONファイルを保存します。
  3. APIデプロイメント仕様は、次の方法でAPIデプロイメントを作成または更新するときに使用します:

    • 「既存のAPIのアップロード」オプションを選択して、コンソールでJSONファイルを指定します
    • APIゲートウェイREST APIへのリクエストでJSONファイルを指定します

    詳細は、APIデプロイメントの作成によるAPIゲートウェイへのAPIのデプロイを参照してください。

  4. (オプション) APIがデプロイされていること、およびAPIをコールすることによってOCIファンクション内のサーバーレス・ファンクションが正常に起動できることを確認します(APIゲートウェイにデプロイされたAPIのコールを参照)。

    サーバーレス・ファンクションがパラメータを受け入れる場合は、APIへのコールにそれらを含めます。例:

    curl -k -X GET https://lak...sjd.apigateway.us-phoenix-1.oci.customer-oci.com/marketing/hello/ -d "name=john"