API Management

Azure FunctionsをAzure API Management経由で呼び出してみた

これまでは、Azure App ServiceからAzure Functionsを直接呼び出していたが、Azure API Managementを経由してAzure Functionsを呼び出すこともできる。

今回は、Azure FunctionsをAzure API Management経由で呼び出してみたので、その手順を共有する。

前提条件

下記記事のAPI Managementの作成が完了していること。

Azure API Managementを作成してみたAzure Portal上では、Azure API ManagementというAPIを管理するためのサービスがあり、APIのセキュリティ...

また、下記記事のAzure App ServiceからAzure Functionsのサービスを呼び出し処理のプログラム作成が完了していること。

Azure App ServiceからAzure Functionsのサービスを呼び出してみたAzure Functionsのサービスは、HTTPリクエストの要求を通して呼び出されるため、Azure App ServiceからAz...

やってみたこと

  1. 作成したサンプルプログラム(App Service側)の内容
  2. 作成したサンプルプログラム(Azure Functions側)の内容
  3. 作成したサンプルプログラムの実行結果(API Management利用前)
  4. Azure FunctionsのAPI Managementへの追加
  5. 作成したサンプルプログラムの実行結果(API Management利用後)

作成したサンプルプログラム(App Service側)の内容

作成したサンプルプログラム(App Service側)の構成は以下の通り。
サンプルプログラムの構成(AppService)
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

pom.xmlの追加内容は以下の通りで、lombokの設定を追加している。

また、application.propertiesの設定内容は以下の通りで、Azure上でAzure API Managementを経由してAzure Functionsを呼び出す場合のURLを追加している。なお、このURLについては後述する。

さらに、コントローラクラスの内容は以下の通りで、ファンクションの呼び出しや画面遷移を定義している。

なお、上記コントローラクラスで利用しているBean定義クラスと検索結果定義クラスの内容は以下の通り。

また、HTTPレスポンスで429(Too Many Requests)エラーが発生した場合にエラー画面に遷移する定義は、以下のクラスで定義している。

さらに、HTMLファイルの内容は以下の通りで、メイン画面・遷移先画面・エラー画面を設定している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/call-azure-functions-by-api-management/demoAzureApp



作成したサンプルプログラム(Azure Functions側)の内容

作成したサンプルプログラム(Azure Functions側)の構成は以下の通り。
サンプルプログラムの構成(Azure Functions)
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

pom.xmlの設定内容は以下の通りで、lombokの設定を追加している。

ハンドラークラスの内容は以下の通りで、Azure App Serviceのコントローラクラスから呼ばれるcallFunctionApi関数である。

また、Azure Functionsのメインクラスは以下の通りで、先ほどのハンドラークラスのhandleRequestメソッドで呼び出される。

さらに、Azure FunctionsのメインクラスのcallFunctionApiメソッドの引数・戻り値は以下のクラスで定義している。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/call-azure-functions-by-api-management/demoAzureFunc



作成したサンプルプログラムの実行結果(API Management利用前)

API Managementを利用する前に、作成したサンプルプログラムをAzure上で実行した結果は、以下の通り。

1) App Serviceのapplication.propertiesを以下の設定にした状態で、Azure上に、Azure App Service, Azure Functionsのプログラムをデプロイする。
実行結果(APIM利用前)_1

なお、Azure App Serviceにデプロイする過程は、以下の記事の「App ServiceへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

Azure App Service上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でApp Serviceを作成してみたが、今回は、前回作成したApp ServiceにSpring Bo...

また、Azure Functionsにデプロイする過程は、以下の記事の「Azure FunctionsへのSpring Bootを利用したJavaアプリケーションのデプロイ」を参照のこと。

Azure Functions上でSpring Bootを利用したJavaアプリケーションを作成してみた前回は、Azure Potal上でAzure Functionsを作成してみたが、今回は、前回作成したAzure FunctionsにS...

2) デプロイ後、Azure App ServiceのURL「https://azureappdemoservice.azurewebsites.net/」とアクセスすると以下の画面が表示されるため、「ファンクション呼び出し」ボタンを押下する。
実行結果(APIM利用前)_2_1

なお、上記URLは、下記Azure App ServiceのURLから確認できる。
実行結果(APIM利用前)_2_2

3) callFunctionApi関数が呼び出され、以下の画面に遷移する。その後「戻る」ボタンを押下する。
実行結果(APIM利用前)_3

4) 以下のように、初期表示画面に戻ることが確認できる。
実行結果(APIM利用前)_4



Azure FunctionsのAPI Managementへの追加

Azure FunctionsのAPI Managementへの追加は、Azure Portalで行える。その手順は、以下の通り。

1) Azure Portalにログインし、作成済のAPI Managementを選択する。
APIMへのFunctions追加_1

2) 作成済のAzure API Managementの概要画面が表示されるため、「API」メニューを押下する。
APIMへのFunctions追加_2

3) 以下のように、API定義画面が表示されるため、「Function App」ボタンを押下する。
APIMへのFunctions追加_3

4) 以下の画面が表示されるため、「Browse」ボタンを押下する。
APIMへのFunctions追加_4

5) Azure Functionmsをインポートするため、「関数アプリ」ボタンを押下する。
APIMへのFunctions追加_5

6) 表示された関数アプリ(azureFuncDemoApp)を選択し、「選択」ボタンを押下する。
APIMへのFunctions追加_6

7) 以下のように、選択した関数アプリが表示されるため、「選択」ボタンを押下する。
APIMへのFunctions追加_7

8) 以下のように、関数アプリの内容が自動的に設定されるため、確認後「Create」ボタンを押下する。
APIMへのFunctions追加_8

9) 以下のように、All APIsに選択した関数「azureFuncDemoApp」が表示されることが確認できる。
APIMへのFunctions追加_9

10) デフォルトだとサブスクリプションを指定しないと関数の実行ができない設定になっているため、設定変更を行う。そこで「Settings」タブを選択すると、「Subscription required」にチェックが入っていることが確認できる。
APIMへのFunctions追加_10

11) 以下のように、「Subscription required」のチェックを外して、「Save」ボタンを押下する。
APIMへのFunctions追加_11

12) 保存が完了すると、右上に完了メッセージが表示される。
APIMへのFunctions追加_12

13) なお、App Serviceのapplication.propertiesに定義した「Azure上でAzure API Managementを経由してAzure Functionsを呼び出す場合のURL」については、以下の画面の「BaseURL」から確認できる。
APIMへのFunctions追加_13

作成したサンプルプログラムの実行結果(API Management利用後)

App Serviceのapplication.propertiesを以下の設定にした状態で、Azure上に、Azure App Service, Azure Functionsのプログラムをデプロイし、実行する。
実行結果(APIM利用後)
なお、実行結果は、本記事の「作成したサンプルプログラムの実行結果(API Management利用前)」と同じ結果となる。

要点まとめ

  • Azure FunctionsをAzure API Management経由で呼び出せる設定は、Azure Portal上で行える。
  • Azure API Managementでは、デフォルトだとサブスクリプションを指定しないと関数の実行ができない設定になっているため、設定変更が必要になる。