Spring Boot でAzure FunctionsのHTTP Triggerを実装する手順を示す。
プロジェクトの作成方法については、以下の記事参照。
バージョン
Spring Boot:2.7.5
Java:17
ファンクションの新規追加する
ファンクションを新規追加する場合は、HandlerクラスとFunctionクラスをそれぞれ追加する。
この時、Handlerクラスはorg.springframework.cloud.function.adapter.azure.FunctionInvoker<I, O>
を継承し、Functionクラスはjava.util.function.Function<T, R>
を実装して作成する。
各ファンクションでDIしたいbeanがある場合はConfigurationクラスを作成する。
Configクラスの作成
ファンクションクラスをbean登録するためのConfigクラスを作成する。
その他処理を行うにあたって必要なクラスがある場合は記述する。
// Configクラス @Configuration public class HttpConfiguration { @Bean public HttpFunction http() { return new HttpFunction(); } }
Functionクラスの作成
Functionクラスには、ファンクションごとに行いたい処理を記述する。
// Functionクラス public class HttpFunction implements Function<String, String> { public String apply(String s) { return s; } }
Handlerクラスの作成
Handlerクラスにはファンクションを呼び出す処理を記述する。
// Handlerクラス public class HttpHandler extends FunctionInvoker<String, String> { // Functionクラスのbean登録名とHandlerクラスの@FunctionName("http")の属性に // 指定した名前は一致させる @FunctionName("http") public HttpResponseMessage execute( @HttpTrigger(name = "request", methods = HttpMethod.POST, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) { handleRequest(request.getBody().get(), context); return request.createResponseBuilder(HttpStatus.OK).build(); } }
トリガーの設定
トリガーの設定はアノテーションで行う。@FunctionName("http")
を付与したメソッドのパラメーターにcom.microsoft.azure.functions.annotation.HttpTrigger
を付与する。
アノテーションの属性については以下の通り。
属性名 | 説明 |
---|---|
name | リクエストやリクエストボディのファンクションコードで使用される変数名。必須 |
dataType | パラメータ値をどのように扱うかを定義する。以下の値が設定可能。 "":値を文字列として取得し、POJOにデシリアライズしようとする(デフォルト) string:常に文字列として値を取得する binary:値をバイナリデータとして取得し、byte[]にデシリアライズしようとする |
route | 関数がどのリクエストURLに応答するかを制御する。 デフォルトでは、 http://<関数アプリ名>.azurewebsites.net/api/<ファンクション名> のURLとなる。 |
methods | このファンクションが応答するHTTPメソッドの配列。 指定しない場合は全てのHTTPメソッドで応答する(デフォルト) |
authLevel | ファンクションを起動するための認証レベルを設定する。 anonymous:APIキー不要 function:関数固有のAPIキーが必要(デフォルト) admin:マスターキーが必要 |
〇参考:APIキーの種類
キー | 説明 |
---|---|
マスターキー | 各関数アプリに_masterという管理レベルのキーとして存在する。 このキーを削除することや、キーの値を変更することはできない。 |
ホストキー | 関数アプリ内のすべての関数で使用可能なキー。 |
関数キー | 特定の関数でのみ使用可能なキー。 |
// 記述例 public HttpResponseMessage execute( @HttpTrigger(name = "request", methods = HttpMethod.POST, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) { }
Functionを呼び出す処理
O FunctionInvoker<I, O>.handleRequest(I, ExecutionContext)
メソッドでFunctionを呼び出すことが出来る。
// 記述例
String response = handleRequest(request.getBody().get(), context);
ローカルでの動作確認
ファンクションの作成完了後にプロジェクトをビルドする。
gradlew azureFunctionsPackage
ビルド成功後に、ファンクションを起動する。
gradlew azureFunctionsRun
起動に成功すると以下のようにファンクションの一覧が表示される。
> Task :azureFunctionsRun Azure Function App's staging directory found at: C:\\pleiades-2021-06\\pleiades\\workspace\\hello-spring-function-azure-gradle\\build\\azure-functions\\java-functions Azure Functions Core Tools Core Tools Version: 3.0.3734 Commit hash: 61192bb28820be76916f85209916152801483456 (64-bit) Function Runtime Version: 3.1.4.0 Functions: http: [POST] http://localhost:7071/api/http
記載されているURLに[]
内に書かれているメソッドでリクエストを送ることでファンクションの動作確認を行うことが出来る。
他のTriggerの作成に関する記事も書いています。