Azure FunctionsをJavaで実装するため、Mavenのazure-functions-archetypeを使ってプロジェクトを作成しました。動作環境はDocker上のDebian 10.9です。手元で実行できるように
.NET Core 3.1.408とAzure Functions Core Toolsもインストールしました。
ドキュメントどおりに実行したところ
mvn azure-functions:run
以下のエラーになりました。
Failed to start Worker Channel. Process fileName: %JAVA_HOME%/bin/java
Javaのパスに関連する問題に見えます。ちなみにwhich javaの結果は以下です。
which java
/usr/bin/java
エラーメッセージを調べると以下のStackOverflowがひっかかりました。どうやらazure-functions-core-toolsの設定ファイル「worker.config.json」に関するもので、自分の環境に合わせて修正が必要なようです。
worker.config.jsonは以下にありました。
/usr/lib/azure-functions-core-tools-3/workers/java/worker.config.json
開いてみると以下の内容で、defaultExecutablePathで%JAVA_HOMEが使われています。
{
"description": {
"language": "java",
"extensions": [".jar"],
"defaultExecutablePath": "%JAVA_HOME%/bin/java",
"defaultWorkerPath": "azure-functions-java-worker.jar",
"arguments": ["-XX:+TieredCompilation -XX:TieredStopAtLevel=1 -noverify -Djava.net.preferIPv4Stack=true -jar", "%JAVA_OPTS%", "%AZURE_FUNCTIONS_MESH_JAVA_OPTS%"]
}
}
StackOverflowにあるとおり、defaultExecutablePathを環境に合わせて適切なパスにするとエラーが解消しました。
修正前
"defaultExecutablePath": "%JAVA_HOME%/bin/java",
修正後
"defaultExecutablePath": "/usr/bin/java",
StackOverflowの情報からはファイルがどこにあるのか読み取れなかったので、解決に少し手間取りました。同じエラーでハマった方の解決方法になれば幸いです。