Java で最初の持続的関数を作成する
Durable Functions は、サーバーレス環境でステートフル関数を記述できる Azure Functions の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。
このクイックスタートでは、Java で "Hello World" Durable Functions アプリを作成してテストする方法について説明します。 最も基本的な Durable Functions アプリには、次の 3 つの関数が含まれています。
- "オーケストレーター関数" - 他の関数を調整するワークフローを記述します。
- "アクティビティ関数" - オーケストレーター関数によって呼び出され、作業を実行し、必要に応じて値を返します。
- クライアント関数 - オーケストレーター関数を開始する通常の Azure Functions。 この例では、HTTP によってトリガーされる関数を使用しています。
このクイック スタートでは、この "Hello World" アプリを作成する方法について説明します。これは、さまざまな方法で行えます。 上記のセレクターを使用して、好みの方法を選択します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
Java Developer Kit、バージョン 8 以降。
Apache Maven、バージョン 3.0 以降。
Azure Functions Core Tools の最新バージョン。
- Azure Functions 4.x の場合、Core Tools v4.0.4915 以降が必要です。
Azure Storage アカウント。これには、Azure サブスクリプションが必要です。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
必要な依存関係とプラグインをプロジェクトに追加する
次の内容を pom.xml
に追加します。
<properties>
<azure.functions.maven.plugin.version>1.18.0</azure.functions.maven.plugin.version>
<azure.functions.java.library.version>3.0.0</azure.functions.java.library.version>
<durabletask.azure.functions>1.0.0</durabletask.azure.functions>
<functionAppName>your-unique-app-name</functionAppName>
</properties>
<dependencies>
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
<version>${azure.functions.java.library.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>${durabletask.azure.functions}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
<configuration>
<appName>${functionAppName}</appName>
<resourceGroup>java-functions-group</resourceGroup>
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<region>westus</region>
<runtime>
<os>windows</os>
<javaVersion>11</javaVersion>
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~4</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</build>
必要な JSON ファイルを追加する
プロジェクト ディレクトリに host.json
ファイルを追加します。 次のようになっているはずです。
{
"version": "2.0",
"logging": {
"logLevel": {
"DurableTask.AzureStorage": "Warning",
"DurableTask.Core": "Warning"
}
},
"extensions": {
"durableTask": {
"hubName": "JavaTestHub"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
注意
現時点で、Java 用の Durable Functions に対する必要なサポートがあるのは、Azure Functions v4 拡張機能バンドルのみであることに注意してください。 Java 用の Durable Functions は、v3 および初期の拡張機能バンドルではサポート "されていません"。 拡張機能バンドルの詳細については、拡張機能バンドルに関するドキュメントを参照してください。
Durable Functions には、ランタイム状態を格納するためのストレージ プロバイダーが必要です。 local.settings.json
ファイルをプロジェクト ディレクトリに追加して、ストレージ プロバイダーを構成します。 プロバイダーとして Azure Storage を使用するには、AzureWebJobsStorage
の値を Azure Storage アカウントの接続文字列に設定します。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
関数を作成する
下のサンプル コードは、それぞれの簡単な例を示しています。
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import java.util.*;
import com.microsoft.durabletask.*;
import com.microsoft.durabletask.azurefunctions.DurableActivityTrigger;
import com.microsoft.durabletask.azurefunctions.DurableClientContext;
import com.microsoft.durabletask.azurefunctions.DurableClientInput;
import com.microsoft.durabletask.azurefunctions.DurableOrchestrationTrigger;
public class DurableFunctionsSample {
/**
* This HTTP-triggered function starts the orchestration.
*/
@FunctionName("StartOrchestration")
public HttpResponseMessage startOrchestration(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
@DurableClientInput(name = "durableContext") DurableClientContext durableContext,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
DurableTaskClient client = durableContext.getClient();
String instanceId = client.scheduleNewOrchestrationInstance("Cities");
context.getLogger().info("Created new Java orchestration with instance ID = " + instanceId);
return durableContext.createCheckStatusResponse(request, instanceId);
}
/**
* This is the orchestrator function, which can schedule activity functions, create durable timers,
* or wait for external events in a way that's completely fault-tolerant.
*/
@FunctionName("Cities")
public String citiesOrchestrator(
@DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {
String result = "";
result += ctx.callActivity("Capitalize", "Tokyo", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "London", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Seattle", String.class).await() + ", ";
result += ctx.callActivity("Capitalize", "Austin", String.class).await();
return result;
}
/**
* This is the activity function that gets invoked by the orchestrator function.
*/
@FunctionName("Capitalize")
public String capitalize(@DurableActivityTrigger(name = "name") String name, final ExecutionContext context) {
context.getLogger().info("Capitalizing: " + name);
return name.toUpperCase();
}
}
Maven コマンドを使用してローカル プロジェクトを作成する
- 次のコマンドを実行して、Durable Functions アプリの基本的な機能を持つプロジェクトを生成します。
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions
- プロンプトに従って、次の情報を指定します。
Prompt | 値 |
---|---|
groupId | com.function |
artifactId | myDurableFunction |
version | 1.0-SNAPSHOT |
package | com.function |
Y | 確認するには Enter キーを押します |
これで、基本的な Durable Functions アプリに必要な 3 つの関数を持つローカル プロジェクトが生成されました。
pom.xml
に com.microsoft:durabletask-azure-functions
が依存関係として含まれていることを確認してください。
バックエンド ストレージ プロバイダーを構成する
Durable Functions には、ランタイム状態を格納するためのストレージ プロバイダーが必要です。 AzureWebJobsStorage
の値として Azure Storage アカウントの接続文字列を指定することで、local.settings.json
でストレージ プロバイダーとして Azure Storage を使用するように構成できます。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<your storage account connection string>",
"FUNCTIONS_WORKER_RUNTIME": "java"
}
}
ローカル プロジェクトを作成する
Visual Studio Code で、F1 (または Ctrl/Cmd + Shift + P) キーを押してコマンド パレットを開きます。 コマンド パレットで、
Azure Functions: Create New Project...
を検索して選択します。プロジェクト用に空のフォルダーの場所を選択し、 [選択] を選択します。
プロンプトに従って、次の情報を指定します。
Prompt 値 言語を選択する Java
を選択します。Select a version of Java (Java のバージョンを選択してください) Azure における関数の実行環境 (Java バージョン) として Java 8
以降を選択します。 ローカルで確認済みの Java バージョンを選択してください。Provide a group ID (グループ ID を指定してください) com.function
Provide an artifact ID (成果物 ID を指定してください) myDurableFunction
Provide a version (バージョンを指定してください) 1.0-SNAPSHOT
Provide a package name (パッケージ名を指定してください) com.function
Provide an app name (アプリ名を指定してください) myDurableFunction
Select the build tool for Java project (Java プロジェクトのビルド ツールを選択してください) Maven
を選択します。Select how you would like to open your project (プロジェクトを開く方法を選択してください) Open in new window
を選択します。
HTTP 関数の例を含むプロジェクトが作成されました。 次の手順で Durable Functions アプリの基本的な機能を追加するため、この関数は必要に応じて削除できます。
プロジェクトへの関数の追加
コマンド パレットで、
Azure Functions: Create Function...
を検索して選択します。Change template filter
でAll
を選択します。プロンプトに従って、次の情報を指定します。
Prompt 値 Select a template for your function (関数のテンプレートを選択してください) DurableFunctionsOrchestration Provide a package name (パッケージ名を指定してください) com.function
Provide a function name (関数名を指定してください) DurableFunctionsOrchestrator
ストレージ アカウント情報の設定を求めるポップアップ ウィンドウで
Select storage account
を選択し、プロンプトに従います。
これで、Durable Functions アプリの 3 つの基本的な機能が生成されたはずです。
pom.xml と host.json を構成する
次の依存関係を pom.xml
に追加します。
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>durabletask-azure-functions</artifactId>
<version>1.0.0</version>
</dependency>
extensions
プロパティを host.json
に追加します。
"extensions": { "durableTask": { "hubName": "JavaTestHub" }}
関数をローカルでテストする
Azure Functions Core Tools を使用すると、ローカルの開発用コンピューター上で Azure Functions プロジェクトを実行できます。
注意
Java 用 Durable Functions には、Azure Functions Core Tools v4.0.4915 以降が必要です。 ターミナルから func --version
コマンドを実行すると、インストールされているバージョンを確認できます。
Visual Studio Code を使用している場合は、新しいターミナル ウィンドウを開き、次のコマンドを実行してプロジェクトをビルドします。
mvn clean package
次に、持続的関数を実行します。
mvn azure-functions:run
ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。
Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。 次のような応答が表示されます。
{ "id": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/raiseEvent/{eventName}?code=ACCupah_QfGKo...", "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...", "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/terminate?reason={text}&code=ACCupah_QfGKo..." }
応答は、永続的なオーケストレーションが正常に開始されたことを示す HTTP 関数の最初の結果です。 これはまだオーケストレーションの最終的な結果ではありません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態を照会してみましょう。
statusQueryGetUri
の URL 値をコピーし、ブラウザーのアドレス バーに貼り付け、要求を実行します。 また、引き続き Postman または cURL を使用して GET 要求を発行することもできます。この要求によって、オーケストレーション インスタンスの状態が照会されます。 インスタンスが完了したことを示し、持続的な関数の出力または結果を含む、最終的な応答を受け取ります。 次のように表示されます。
{ "name": "Cities", "instanceId": "d1b33a60-333f-4d6e-9ade-17a7020562a9", "runtimeStatus": "Completed", "input": null, "customStatus": "", "output":"TOKYO, LONDON, SEATTLE, AUSTIN", "createdTime": "2022-12-12T05:00:02Z", "lastUpdatedTime": "2022-12-12T05:00:06Z" }
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示