Azure portal を使用して API Management に Service Fabric バックエンドを設定する

この記事では、Azure portal を使用して、Service Fabric サービスをカスタム API バックエンドとして構成する方法を示します。 デモンストレーションを目的として、ASP.NET Core の基本的なステートレス リライアブル サービスを Service Fabric バックエンドとして設定する方法を示します。

背景については、「API Management のバックエンド」を参照してください。

前提条件

カスタム バックエンドとして Windows を実行している Service Fabric クラスターでサンプル サービスを構成するための前提条件:

  • Windows 開発環境 - Visual Studio 2019Azure 開発ASP.NET と Web 開発、および .NET Core クロスプラットフォーム開発 のワークロードをインストールします。 その後、.NET 開発環境をセットアップします。

  • Service Fabric クラスター - 「チュートリアル: Azure 仮想ネットワークに Windows を実行する Service Fabric クラスターをデプロイする」を参照してください。 既存の X.509 証明書を使用してクラスターを作成することも、テスト目的で新しい自己署名証明書を作成することもできます。 クラスターは仮想ネットワーク内に作成されます。

  • Service Fabric のサンプル アプリ- 「Azure で API Management と Service Fabric を統合する」の説明に従って、Web API アプリを作成し、Service Fabric クラスターにデプロイします。

    これらの手順では、既定の Web API プロジェクト テンプレートを使用して、ASP.NET Core の基本的なステートレス リライアブル サービスを作成します。 後で、Azure API Management を通じて、このサービスの HTTP エンドポイントを公開します。

    アプリケーション名 (fabric:/myApplication/myService など) をメモしておいてください。

  • API Management インスタンス - Premium または Developer レベルであり、Service Fabric クラスターと同じリージョン内の、既存あるいは新規の API Management インスタンス。 必要に応じて、API Management インスタンスを作成します

  • 仮想ネットワーク - Service Fabric クラスター用に作成した仮想ネットワークに API Management インスタンスを追加します。 API Management では、仮想ネットワーク内に専用サブネットが必要です。

    API Management インスタンスの仮想ネットワーク接続を有効にする手順については、Azure API Management で仮想ネットワークを使用する方法に関するページを参照してください。

バックエンドを作成する - ポータル

API Management に Service Fabric クラスター証明書を追加する

Service Fabric クラスター証明書は、クラスターに関連付けられている Azure キー コンテナーで格納および管理されます。 この証明書をクライアント証明書として API Management インスタンスに追加します。

API Management インスタンスに証明書を追加する手順については、「Azure API Management でクライアント証明書認証を使用してバックエンド サービスを保護する方法」を参照してください。

Note

キー コンテナー証明書を参照し、API Management に証明書を追加することをお勧めします。

Service Fabric バックエンドを追加する

  1. Azure portal で、API Management インスタンスに移動します。

  2. [API] で、 [バックエンド]>[+ 追加] の順に選択します。

  3. バックエンド名と省略可能な説明を入力します

  4. [種類] で、 [Service Fabric] を選択します。

  5. [ランタイム URL] に、API Management からの要求の転送先となる Service Fabric バックエンド サービスの名前を入力します。 例: fabric:/myApplication/myService.

  6. [Maximum number of partition resolution retries](パーティションの解決の最大再試行回数) に、0 から 10 までの数値を入力します。

  7. Service Fabric クラスターの管理エンドポイントを入力します。 このエンドポイントは、ポート 19080 上のクラスターの URL (https://mysfcluster.eastus.cloudapp.azure.com:19080 など) です。

  8. [クライアント証明書] で、前のセクションで API Management インスタンスに追加した Service Fabric クラスター証明書を選択します。

  9. [Management endpoint authorization method](管理エンドポイントの承認方法) で、TLS 通信に Service Fabric クラスター管理サービスによって使用される証明書の拇印またはサーバー X509 名を入力します。

  10. [Validate certificate chain](証明書チェーンを検証する) および [Validate certificate name](証明書名を検証する) の設定を有効にします。

  11. [Authorization credentials](承認資格情報) では、Service Fabric で構成されたバックエンド サービスに接続するための資格情報を必要に応じて指定します。 このシナリオで使用するサンプル アプリでは、承認資格情報は必要ありません。

  12. [作成] を選択します

    Service Fabric バックエンドを作成する

バックエンドを使用する

カスタム バックエンドを使用するには、set-backend-service ポリシーを使ってそれを参照します。 このポリシーを使うと、受信 API 要求の既定のバックエンド サービス ベース URL が、指定されたバックエンド (この場合は Service Fabric バックエンド) に変換されます。

set-backend-service ポリシーは、既存の API を使用して、API 設定で指定されているものとは異なるバックエンドに受信要求を変換するのに役立つ場合があります。 この記事ではデモンストレーションを目的として、テスト API を作成し、API 要求を Service Fabric バックエンドに送信するようにポリシーを設定します。

API の作成

手動による API の追加」の手順に従って、空の API を作成します。

  • API 設定では、 [Web サービスの URL] を空白のままにします。

  • fabric などの [API URL サフィックス] を追加します。

    空の API を作成

API に GET 操作を追加する

Service Fabric のバックエンド サービスのデプロイ」に示されているように、Service Fabric クラスターにデプロイされたサンプルの ASP.NET Core サービスでは、URL パス /api/values での 1 つの HTTP GET 操作がサポートされています。

そのパスでの既定の応答は、次の 2 つの文字列の JSON 配列です。

["value1", "value2"]

クラスターとの API Management の統合をテストするには、対応する GET 操作をパス /api/values の API に追加します。

  1. 前の手順で作成した API を選びます。

  2. [+ Add Operation] (+ 操作の追加) を選択します。

  3. [フロントエンド] ウィンドウで、次の値を入力して、 [保存] を選択します。

    設定
    表示名 [Test backend](バックエンドのテスト)
    URL GET
    URL /api/values

    API に GET 操作を追加する

set-backend-service ポリシーを構成する

set-backend-service ポリシーをテスト API に追加します。

  1. [デザイン] タブの [受信処理] セクションで、コード エディター (</>) アイコンを選択します。

  2. <inbound> 要素内にカーソルを置きます

  3. set-service-backendポリシー ステートメントを追加します。

    • backend-id で、ご自分の Service Fabric バックエンドの名前に置き換えます。

    • sf-resolve-condition は、サービスの場所を再解決して要求を再送信するための条件です。 再試行の回数はバックエンドの構成時に設定されたものです。 次に例を示します。

      <set-backend-service backend-id="mysfbackend" sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")"/>
      
  4. [保存] を選択します。

    set-backend-service ポリシーを構成する

注意

Service Fabric クラスター内の 1 つまたは複数のノードが停止したり削除されたりした場合、API Management は自動通知を受けず、これらのノードへのトラフィックの送信を続けます。 このような場合に対処するには、次のような解決条件を構成します。sf-resolve-condition="@((int)context.Response.StatusCode != 200 || context.LastError?.Reason == "BackendConnectionFailure" || context.LastError?.Reason == "Timeout")"

バックエンド API をテストする

  1. [テスト] タブで、前のセクションで作成した GET 操作を選択します。

  2. [送信] を選択します。

    適切に構成されている場合は、HTTP 応答で HTTP 成功コードが示され、バックエンドの Service Fabric サービスから返された JSON が表示されます。

    Service Fabric バックエンドをテストする