演習 - 既存の API に別の Azure Functions アプリを追加する
個別のマイクロサービス (Azure Functions) をすべて 1 つの API に統合しようとしていることを思い出してください。 API Management の新しいインスタンスに Products 関数アプリを追加しました。 次に、その API に別の関数アプリを追加します。
この演習では、Orders 関数アプリを API に追加し、curl
ツールを使用して統合システムをテストします。
OrderDetails 関数をテストする
Orders 関数アプリを API に追加する前に、ホストする関数の OrderDetails をテストしてみましょう。
Azure リソースのメニューで、または [ホーム] ページから、[すべてのリソース] を選択します。 [すべてのリソース] ペインが表示されます。
リソースを種類で並べ替え、名前が OrderFunction で始まる関数アプリを選択します。 OrderFunction 関数アプリの [概要] ペインが表示されます。
関数アプリの関数の一覧から、[OrderDetails] を選択します。 OrderDetails 関数の概要ペインが表示されます。
OrderDetails のメニューで、[Developer] の下にある [コードとテスト] を選択します。 OrderDetails 関数の [コードとテスト] ペインが表示され、
function.json
ファイルの内容を確認できます。コマンド バーの [テストと実行] を選択します。 OrderDetails 関数の 入力パラメーターのタブが表示されます。
[HTTP メソッド] フィールドで、ドロップダウン リストから [GET] を選択し、次に [クエリ] の [パラメーターの追加] を選択します。[名前] フィールドに「name」と入力し、[値] フィールドに「Chiba」 (値は大文字と小文字を区別します) と入力して、[実行] を選択します。
ログ コンソールが開き、要求の状態が表示されます。 [出力] タブに HTTP 応答コードと JSON 形式の内容が表示されます。
必要に応じて、名前の値 Henri と Barriclough を使用して別の要求を実行し、異なる顧客注文を取得することもできます。
[閉じる] を選択して [テストと実行] の [入力] および [出力] タブを閉じます。
OrderDetails ペインのコマンド バーで、[関数の URL の取得] を選択します。 この URL は、azurewebsites.net ドメイン内の関数の名前であることに注目してください。
既存の API に関数を追加する
この手順では、前の演習で作成した API Management リソースに Order 関数を追加します。 この演習では、関数アプリ インターフェイス内から API Management インターフェイスを使用しました。 ここでは、Azure portal のリソース メニューを経由して API Management インスタンスに移動します。これは、単にどちらの方法も使用できることを示すためです。
Azure リソースのメニューで、または [ホーム] ページから、[すべてのリソース] を選択します。 [すべてのリソース] ペインが表示されます。
リソースを Type で並べ替え、OnlineStore の API Management サービスを選択します。 OnlineStore に [API Management サービス] が表示されます。
メニューの [API] で、[API] を選択します。 [API] ペインには、新しい API を定義するためのオプションが表示されます。
[Create from Azure resource](Azure リソースから作成) で、[関数アプリ] を選択します。
[関数アプリから作成する] ダイアログ ボックスが表示されます。
関数アプリを選択するには、[参照] を選択します。 [Azure Functions のインポート] ペインが表示されます。
[必要な設定の構成] フィールドで、[選択] を選択します。
(../media/5-import-azure-function-app-03-expanded.png#lightbox)
[Azure 関数アプリを選択] ウィンドウが表示されます。
[OrderFunctionNNNNNNN] を選択してから、[選択] を選択します。 OrderDetails 関数アプリが構成された状態で [Azure Functions のインポート] ペインが再表示されます。
[OrderDetails] がオンになっていることを確認し、ページ下部の [選択] を選択して関数を追加します。 [関数アプリから作成する] ダイアログ ボックスが表示されます。
[API URL サフィックス] フィールドの値を「orders」に置き換えます。 この変更によりベース URL がどのように更新されるかに注意してください。 [作成] を選択して API を作成します。
OnlineStore の API Management サービスに、OrderDetails で使用可能なすべての (GET、POST) API を示す [デザイン] タブが表示されます。
ポータルで OnlineStore の注文エンドポイントをテストする
API に OrderDetails を追加したので、次は Azure portal で API Management ツールを使用してテストしてみましょう。
OrderFunctionNNNNNN API の [デザイン] タブで、[すべての操作] の下にある [GET OrderDetails](OrderDetails の取得) を選択したら、[テスト] タブを選択します。
[クエリ パラメーター] セクションで、[パラメーターの追加] を選択し、[名前] フィールドに「name」、[値] フィールドに「Chiba」と入力します。 [Send] を選択します。
[HTTP 応答] メッセージ タブには、HTTP 応答が成功したことが示されます (HTTP/1.1/ 200 OK)。併せて、Order ID を示す JSON オブジェクトと共に、顧客名、注文額の合計、出荷状態が表示されます。
[HTTP 要求] セクションまで上にスクロールします。要求が azure-api.net ドメイン内のサブドメインとサブディレクトリに送信されたことに注目してください。 この場所は、azurewebsites.net ホスト ドメインとは異なります。
結合された API をテストする
curl
コマンドライン ツールを使用して、API に要求を送信できます。 cURL は、要求に適切なサブスクリプション キーを含めることができるため、理想的です。 要求には、Azure API Management でホストされている API の場所も必要であり、この場合、Products 関数および Orders 関数で構成されます。
Azure リソース メニューまたは [ホーム] で、[すべてのリソース] を選択します。
リソースを Type で並べ替え、OnlineStore の API Management サービスを選択します。 OnlineStore に [API Management サービス] が表示されます。
[基本] セクションで、[ゲートウェイの URL] の上にカーソルを置き、[クリップボードにコピー] アイコンを選択します。
右側の Azure Cloud Shell で、いくつかの変数を定義します。 次のコマンドを実行し (
<paste URL here>
プレースホルダーは、クリップボードにコピーした URL 値に置き換える)、Enter キーを押します。 この値により、ゲートウェイ変数が定義されます。GATEWAY_URL=<paste URL here>
Azure の OnlineStore API Management サービス メニューで、[API] まで下にスクロールし、[サブスクリプション] を選択します。 OnlineStore の API Management インスタンスの [サブスクリプション] ペインが表示されます。
[Built-in all-access subscription](組み込みの all-access サブスクリプション) で、その行の右端にある省略記号 [...] を選択し、コンテキスト メニューの [Show/hide keys](キーの表示/非表示) を選択します。 API の主キーと 2 次キーが表示されます。
[主キー] フィールドで、[クリップボードにコピー] アイコンを選択します。
Cloud Shell で、次のコマンドを実行し (プレースホルダーはクリップボードの値に置き換える)、Enter キーを押します。
SUB_KEY=<paste key here>
これで、同じ API Management サービスに対してクエリを実行することで、注文と製品の詳細を要求できます。
Henri という名前の顧客の詳細を要求するには、Cloud Shell で次のコマンドを実行します。
curl -X GET "$GATEWAY_URL/orders/OrderDetails?name=Henri" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
応答には、注文 56224 が Pascale Henri に発送されたことを示す注文の詳細と共に、JSON コード ブロックが含まれています。 また、異なる結果を得るために、"Chiba" と "Barriclough" という名前を使用してコマンドを試すこともできます。
2 の id の製品の詳細を要求するには、Cloud Shell で次のコマンドを実行します。
curl -X GET "$GATEWAY_URL/products/ProductDetails?id=2" -H "Ocp-Apim-Subscription-Key:$SUB_KEY"
応答には、製品の詳細を示す JSON コード ブロックが含まれています。 また、異なる結果を得るために、1 と 3 の id 値を使用してコマンドを試すこともできます。
両方の関数が、Azure API Management に使用されるドメインである (GATEWAY_URL で定義された) azure-api.net ドメイン内のエンドポイントを介して呼び出せるようになったことに注目してください。 他の Learn モジュールでは、API Management ゲートウェイ内の関数にポリシー、セキュリティ設定、外部キャッシュ、およびその他の機能を適用する方法を学習できます。 ゲートウェイは、コードを変更せずに複数のマイクロサービスを管理できる中央制御ポイントとして利用できます。