Spring Boot3.X系 でAzure FunctionsのHTTP Triggerを実装する手順を示す。
プロジェクトの作成は以下の記事参照。
SpringBoot2.X系の実装方法は以下の記事参照。
Functionクラスの作成
Functionクラスには、ファンクションごとに行いたい処理を記述する。
FunctionクラスはHandlerクラスから呼び出されて処理を実装するため、DIコンテナに登録されるように「@Component
」アノテーションを付与している。
/** * HttpTriggerの処理 */ @Component @Slf4j public class HttpFunction implements Function<String, String> { /** * {@inheritDoc} */ @Override public String apply(String t) { log.info("あいうえお"); return t + "!!"; } }
Handlerクラスの作成
AzureFunctionの実装用に追加した「spring-cloud-function-adapter-azure」「spring-cloud-starter-function-web」のバージョン3.X系→4.x系の変更に伴い、Functionクラスを呼び出す処理の実装方法が変更となった。
※3.X系では「FunctionInvoker
」を継承して、Functionクラスを呼び出す処理を実装していたが、「FunctionInvoker
」が4.X系では非推奨となったため。
4.X系ではHandlerクラスもDIコンテナに登録し、HandlerクラスにFunctionクラスをDIする。
クラス内に定義した「@FunctionName」アノテーションを付与したメソッドの中で、Functionクラスを任意のタイミングで実行するように処理を記述する。
/** * サンプルHttp Trigger */ @Component public class HttpHandler { /** {@link HttpFunction} */ private HttpFunction httpFunction; /** * コンストラクタ。 * * @param httpFunction * {@link HttpFunction} */ public HttpHandler(HttpFunction httpFunction) { this.httpFunction = httpFunction; } @FunctionName("spring") public String httpTrigger( @HttpTrigger(name = "req", methods = HttpMethod.POST, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) { return this.httpFunction.apply(request.getBody().get()); } }
HTTPトリガーの設定
HTTPトリガーの設定はアノテーションで行う。@FunctionName("spring")
を付与したメソッドの引数に
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 String httpTrigger( @HttpTrigger(name = "req", methods = HttpMethod.POST, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) { }
ローカルでの動作確認
ファンクションの作成完了後にプロジェクトをビルドする。
gradlew azureFunctionsPackage
ビルド成功後に、ファンクションを起動する。
gradlew azureFunctionsRun
起動に成功すると以下のようにファンクションの一覧が表示される。
> Task :azureFunctionsRun Azure Function App's staging directory found at: C:\workspace\functions\build\azure-functions\java-template-func Azure Functions Core Tools Core Tools Version: 4.0.5198 Commit hash: N/A (64-bit) Function Runtime Version: 4.21.1.20667 Functions: spring: [POST] http://localhost:7071/api/spring
記載されているURLに[]
内に書かれているメソッドでリクエストを送ることでファンクションの動作確認を行うことが出来る。