Azure Functions の Java 開発者向けガイドAzure Functions Java developer guide

このガイドでは、Java を使用した Azure Functions の開発を成功させるために役立つ詳細情報について説明します。This guide contains detailed information to help you succeed developing Azure Functions using Java.

Java 開発者が、Azure Functions を初めて使用する場合は、まず次のいずれかの記事を読むことが推奨されます。As a Java developer, if you're new to Azure Functions, please consider first reading one of the following articles:

作業の開始Getting started 概念Concepts

Java 関数の基礎Java function basics

Java 関数は、注釈 @FunctionName で装飾された public メソッドです。A Java function is a public method, decorated with the annotation @FunctionName. このメソッドは、Java 関数のエントリを定義し、特定のパッケージ内で一意である必要があります。This method defines the entry for a Java function, and must be unique in a particular package. パッケージには、@FunctionName で注釈付けされたパブリック メソッドを複数持つクラスが複数存在することもあります。The package can have multiple classes with multiple public methods annotated with @FunctionName. 1 つのパッケージが Azure の関数アプリにデプロイされます。A single package is deployed to a function app in Azure. 関数アプリを Azure で実行すると、個々の Java 関数のデプロイ、実行、および管理コンテキストが提供されます。When running in Azure, the function app provides the deployment, execution, and management context for your individual Java functions.

プログラミング モデルProgramming model

トリガーとバインドの概念は、Azure Functions の基盤です。The concepts of triggers and bindings are fundamental to Azure Functions. トリガーによって、コードの実行が開始します。Triggers start the execution of your code. バインドでは、データを関数に渡し、関数からデータを返す方法が提供されます。カスタム データ アクセス コードを記述する必要はありません。Bindings give you a way to pass data to and return data from a function, without having to write custom data access code.

Java の関数を作成するCreate Java functions

Java の関数を作成しやすくするために、Maven ベースのツールとアーキタイプが用意されています。事前に定義された Java テンプレートを使用することで、特定の関数トリガーを含むプロジェクトを簡単に作成できます。To make it easier to create Java functions, there are Maven-based tooling and archetypes that use predefined Java templates to help you create projects with a specific function trigger.

Maven ベースのツールMaven-based tooling

次の開発環境には、Java 関数プロジェクトの作成に対応した Azure Functions ツールが備わっています。The following developer environments have Azure Functions tooling that lets you create Java function projects:

上記リンクの記事には、好みの IDE を使用して基本的な関数を作成する方法が紹介されています。The article links above show you how to create your first functions using your IDE of choice.

プロジェクトのスキャフォールディングProject Scaffolding

ターミナルからのコマンド ライン開発を希望する場合、Java ベースの関数プロジェクトをスキャフォールディングする最も簡単な方法は、Apache Maven アーキタイプを使用することです。If you prefer command line development from the Terminal, the simplest way to scaffold Java-based function projects is to use Apache Maven archetypes. Azure Functions の Java Maven アーキタイプは、com.microsoft.azure:azure-functions-archetype という groupId:artifactId で発行されています。The Java Maven archetype for Azure Functions is published under the following groupId:artifactId: com.microsoft.azure:azure-functions-archetype.

次のコマンドを使用すると、このアーキタイプを使用して新しい Java 関数プロジェクトが生成されます。The following command generates a new Java function project using this archetype:

mvn archetype:generate \
    -DarchetypeGroupId=com.microsoft.azure \
    -DarchetypeArtifactId=azure-functions-archetype

このアーキタイプの基本的な使い方については、Java クイックスタートを参照してください。To get started using this archetype, see the Java quickstart.

フォルダー構造Folder structure

Azure Functions の Java プロジェクトのフォルダー構造を次に示します。Here is the folder structure of an Azure Functions Java project:

FunctionsProject
 | - src
 | | - main
 | | | - java
 | | | | - FunctionApp
 | | | | | - MyFirstFunction.java
 | | | | | - MySecondFunction.java
 | - target
 | | - azure-functions
 | | | - FunctionApp
 | | | | - FunctionApp.jar
 | | | | - host.json
 | | | | - MyFirstFunction
 | | | | | - function.json
 | | | | - MySecondFunction
 | | | | | - function.json
 | | | | - bin
 | | | | - lib
 | - pom.xml

共有 host.json ファイルを使用して関数アプリを構成できます。You can use a shared host.json file to configure the function app. 各関数には、独自のコード ファイル (.java) とバインディング構成ファイル (function.json) があります。Each function has its own code file (.java) and binding configuration file (function.json).

1 つのプロジェクトに複数の関数を含めることができます。You can put more than one function in a project. 複数の jar に関数を分けることは避けてください。Avoid putting your functions into separate jars. ターゲット ディレクトリの FunctionApp が、Azure 内の関数アプリにデプロイされます。The FunctionApp in the target directory is what gets deployed to your function app in Azure.

トリガーと注釈Triggers and annotations

関数は、HTTP 要求、タイマー、日付の更新などのトリガーで呼び出されます。Functions are invoked by a trigger, such as an HTTP request, a timer, or an update to data. 関数はそのトリガーと他の入力を処理して 1 つまたは複数の出力を生成する必要があります。Your function needs to process that trigger, and any other inputs, to produce one or more outputs.

com.microsoft.azure.functions.annotation.* パッケージに含まれる Java の注釈を使用して、入力と出力をメソッドにバインドします。Use the Java annotations included in the com.microsoft.azure.functions.annotation.* package to bind input and outputs to your methods. 詳細については、Java リファレンス ドキュメントに関するページを参照してください。For more information, see the Java reference docs.

重要

Azure Blob storage、Azure Queue storage、または Azure Table Storage をローカルで実行するには、local.settings.json に Azure Storage アカウントを構成する必要があります。You must configure an Azure Storage account in your local.settings.json to run Azure Blob storage, Azure Queue storage, or Azure Table storage triggers locally.

例:Example:

public class Function {
    public String echo(@HttpTrigger(name = "req", 
      methods = {HttpMethod.POST},  authLevel = AuthorizationLevel.ANONYMOUS) 
        String req, ExecutionContext context) {
        return String.format(req);
    }
}

azure-functions-maven-plugin によって生成された、対応する function.json を次に示します。Here is the generated corresponding function.json by the azure-functions-maven-plugin:

{
  "scriptFile": "azure-functions-example.jar",
  "entryPoint": "com.example.Function.echo",
  "bindings": [
    {
      "type": "httpTrigger",
      "name": "req",
      "direction": "in",
      "authLevel": "anonymous",
      "methods": [ "post" ]
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
  ]
}

Java のバージョンJava versions

Azure で関数を実行する関数アプリを作成する場合に使用する Java のバージョンは、pom.xml ファイルに指定します。The version of Java used when creating the function app on which functions runs in Azure is specified in the pom.xml file. Maven アーキタイプでは現在、Java 8 用の pom.xml が生成され、これは、発行前に変更できます。The Maven archetype currently generates a pom.xml for Java 8, which you can change before publishing. pom.xml の Java バージョンは、アプリをローカルで開発してテストしたバージョンと一致している必要があります。The Java version in pom.xml should match the version on which you have locally developed and tested your app.

サポートされているバージョンSupported versions

次の表は、Functions ランタイムの各メジャー バージョンに対して現在サポートされている Java バージョンをオペレーティング システムごとに示しています。The following table shows current supported Java versions for each major version of the Functions runtime, by operating system:

Functions バージョンFunctions version Java バージョン (Windows)Java versions (Windows) Java バージョン (Linux)Java versions (Linux)
3.x3.x 1111
88
1111
88
2.x2.x 88 該当なしn/a

デプロイのための Java バージョンを指定しない限り、Azure へのデプロイ中、Maven アーキタイプは既定で Java 8 になります。Unless you specify a Java version for your deployment, the Maven archetype defaults to Java 8 during deployment to Azure.

デプロイ バージョンを指定するSpecify the deployment version

Maven アーキタイプが対象とする Java のバージョンは、-DjavaVersion パラメーターを使用して制御できます。You can control the version of Java targeted by the Maven archetype by using the -DjavaVersion parameter. このパラメーターの値には 8 または 11 を指定できます。The value of this parameter can be either 8 or 11.

Maven アーキタイプでは、指定された Java バージョンを対象とする pom.xml が生成されます。The Maven archetype generates a pom.xml that targets the specified Java version. pom.xml 内の次の要素は、使用する Java バージョンを示しています。The following elements in pom.xml indicate the Java version to use:

要素Element Java 8 の値Java 8 value Java 11 の値Java 11 value 説明Description
Java.version 1.81.8 1111 maven-compiler-plugin によって使用される Java のバージョン。Version of Java used by the maven-compiler-plugin.
JavaVersion 88 1111 Azure の関数アプリによってホストされる Java バージョン。Java version hosted by the function app in Azure.

次の例に、pom.xml ファイルの関連セクションにある Java 8 の設定を示します。The following examples show the settings for Java 8 in the relevant sections of the pom.xml file:

Java.version

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <azure.functions.maven.plugin.version>1.6.0</azure.functions.maven.plugin.version>
    <azure.functions.java.library.version>1.3.1</azure.functions.java.library.version>
    <functionAppName>fabrikam-functions-20200718015742191</functionAppName>
    <stagingDirectory>${project.build.directory}/azure-functions/${functionAppName}</stagingDirectory>
</properties>

JavaVersion

<runtime>
    <!-- runtime os, could be windows, linux or docker-->
    <os>windows</os>
    <javaVersion>8</javaVersion>
    <!-- for docker function, please set the following parameters -->
    <!-- <image>[hub-user/]repo-name[:tag]</image> -->
    <!-- <serverId></serverId> -->
    <!-- <registryUrl></registryUrl>  -->
</runtime>

重要

JAVA_HOME 環境変数に、Maven を使用したコードのコンパイル時に使用される JDK ディレクトリが正しく設定されている必要があります。You must have the JAVA_HOME environment variable set correctly to the JDK directory that is used during code compiling using Maven. JDK のバージョンが少なくとも Java.version 設定と同じであることを確認します。Make sure that the version of the JDK is at least as high as the Java.version setting.

デプロイ OS を指定するSpecify the deployment OS

また、Maven では、Azure で関数アプリを実行するオペレーティング システムを指定することもできます。Maven also lets you specify the operating system on which your function app runs in Azure. os 要素を使用して、オペレーティング システムを選択します。Use the os element to choose the operating system.

要素Element WindowsWindows LinuxLinux DockerDocker
os Windowswindows linuxlinux dockerdocker

次の例は、pom.xml ファイルの runtime セクションのオペレーティング システム設定を示しています。The following example shows the operating system setting in the runtime section of the pom.xml file:

<runtime>
    <!-- runtime os, could be windows, linux or docker-->
    <os>windows</os>
    <javaVersion>8</javaVersion>
    <!-- for docker function, please set the following parameters -->
    <!-- <image>[hub-user/]repo-name[:tag]</image> -->
    <!-- <serverId></serverId> -->
    <!-- <registryUrl></registryUrl>  -->
</runtime>

JDK ランタイムの使用可能性とサポートJDK runtime availability and support

Java 関数アプリをローカルで開発するには、Azul Systems から適切な Azul Zulu Enterprise for Azure Java JDK をダウンロードして使用します。For local development of Java function apps, download and use the appropriate Azul Zulu Enterprise for Azure Java JDKs from Azul Systems. Azure Functions は、関数アプリをクラウドにデプロイするときに Azul Java 8 JDK ランタイムを使用します。Azure Functions uses an Azul Java JDK runtime when you deploy your function app to the cloud.

JKD および関数アプリに関する問題に対する Azure サポートは、認定サポート プランを通じてご利用いただけます。Azure support for issues with the JDKs and function apps is available with a qualified support plan.

JVM のカスタマイズCustomize JVM

関数を使用すると、お使いの Java 関数の実行に使用する Java 仮想マシン (JVM) をカスタマイズできます。Functions lets you customize the Java virtual machine (JVM) used to run your Java functions. 既定で次の JVM オプションが使用されます。The following JVM options are used by default:

  • -XX:+TieredCompilation
  • -XX:TieredStopAtLevel=1
  • -noverify
  • -Djava.net.preferIPv4Stack=true
  • -jar

JAVA_OPTS という名前のアプリ設定には、追加の引数を指定できます。You can provide additional arguments in an app setting named JAVA_OPTS. Azure portal または Azure CLI で、Azure にデプロイされているお使いの関数アプリにアプリ設定を追加することができます。You can add app settings to your function app deployed to Azure in the Azure portal or the Azure CLI.

重要

従量課金プランでは、カスタマイズを機能させるために、値を 0 にした WEBSITE_USE_PLACEHOLDER 設定も追加する必要があります。In the Consumption plan, you must also add the WEBSITE_USE_PLACEHOLDER setting with a value of 0 for the customization to work. この設定によって、Java 関数のコールド スタート時間が長くなることはありません。This setting does increase the cold start times for Java functions.

Azure portalAzure portal

Azure portal[アプリケーション設定] タブを使用して JAVA_OPTS の設定を追加します。In the Azure portal, use the Application Settings tab to add the JAVA_OPTS setting.

Azure CLIAzure CLI

次の例のように、az functionapp config appsettings set コマンドを使用して JAVA_OPTS を設定できます。You can use the az functionapp config appsettings set command to set JAVA_OPTS, as in the following example:

az functionapp config appsettings set \
    --settings "JAVA_OPTS=-Djava.awt.headless=true" \
    "WEBSITE_USE_PLACEHOLDER=0" \
    --name <APP_NAME> --resource-group <RESOURCE_GROUP>

この例では、ヘッドレス モードが有効になります。This example enables headless mode. <APP_NAME> をお使いの関数アプリ名に置き換え、<RESOURCE_GROUP> をリソース グループに置き換えます。Replace <APP_NAME> with the name of your function app, and <RESOURCE_GROUP> with the resource group.

サードパーティ製ライブラリThird-party libraries

Azure Functions はサード パーティ製ライブラリの使用をサポートしています。Azure Functions supports the use of third-party libraries. 既定で、プロジェクトの pom.xml ファイルで指定されているすべての依存関係は、mvn package 目標の間に自動的にバンドルされます。By default, all dependencies specified in your project pom.xml file are automatically bundled during the mvn package goal. pom.xml ファイルの依存関係として指定されていないライブラリの場合は、関数のルート ディレクトリ以下の lib ディレクトリに配置します。For libraries not specified as dependencies in the pom.xml file, place them in a lib directory in the function's root directory. lib ディレクトリに配置された依存関係は、実行時にシステム クラス ローダーに追加されます。Dependencies placed in the lib directory are added to the system class loader at runtime.

com.microsoft.azure.functions:azure-functions-java-library 依存関係はクラスパスにおいて既定で提供されており、lib ディレクトリに含める必要はありません。The com.microsoft.azure.functions:azure-functions-java-library dependency is provided on the classpath by default, and doesn't need to be included in the lib directory. また、azure-functions-java-worker は、ここに示されている依存関係をクラスパスに追加します。Also, azure-functions-java-worker adds dependencies listed here to the classpath.

データ型のサポートData type support

Plain old Java object (POJO)、azure-functions-java-library 内で定義されている型、または文字列や整数などのプリミティブなデータ型を使用して入力または力バインドにバインドできます。You can use Plain old Java objects (POJOs), types defined in azure-functions-java-library, or primitive data types such as String and Integer to bind to input or output bindings.

POJOPOJOs

入力データを POJO に変換する場合、azure-functions-java-worker では gson ライブラリが使用されます。For converting input data to POJO, azure-functions-java-worker uses the gson library. 関数への入力として使用される POJO の型は public である必要があります。POJO types used as inputs to functions should be public.

Binary DataBinary data

バイナリの入力または出力を byte[] にバインドするには、使用する function.json 内の dataType フィールドを binary に設定します。Bind binary inputs or outputs to byte[], by setting the dataType field in your function.json to binary:

   @FunctionName("BlobTrigger")
    @StorageAccount("AzureWebJobsStorage")
     public void blobTrigger(
        @BlobTrigger(name = "content", path = "myblob/{fileName}", dataType = "binary") byte[] content,
        @BindingName("fileName") String fileName,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Blob trigger function processed a blob.\n Name: " + fileName + "\n Size: " + content.length + " Bytes");
    }

null 値を期待する場合、Optional<T> を使用します。If you expect null values, use Optional<T>.

バインドBindings

入出力バインドによって、コード内からデータに接続する宣言型の方法が提供されます。Input and output bindings provide a declarative way to connect to data from within your code. 関数は複数の入出力バインドを持つことができます。A function can have multiple input and output bindings.

入力バインドの例Input binding example

package com.example;

import com.microsoft.azure.functions.annotation.*;

public class Function {
    @FunctionName("echo")
    public static String echo(
        @HttpTrigger(name = "req", methods = { HttpMethod.PUT }, authLevel = AuthorizationLevel.ANONYMOUS, route = "items/{id}") String inputReq,
        @TableInput(name = "item", tableName = "items", partitionKey = "Example", rowKey = "{id}", connection = "AzureWebJobsStorage") TestInputData inputData,
        @TableOutput(name = "myOutputTable", tableName = "Person", connection = "AzureWebJobsStorage") OutputBinding<Person> testOutputData
    ) {
        testOutputData.setValue(new Person(httpbody + "Partition", httpbody + "Row", httpbody + "Name"));
        return "Hello, " + inputReq + " and " + inputData.getKey() + ".";
    }

    public static class TestInputData {
        public String getKey() { return this.RowKey; }
        private String RowKey;
    }
    public static class Person {
        public String PartitionKey;
        public String RowKey;
        public String Name;

        public Person(String p, String r, String n) {
            this.PartitionKey = p;
            this.RowKey = r;
            this.Name = n;
        }
    }
}

この関数は HTTP 要求を使用して呼び出します。You invoke this function with an HTTP request.

  • HTTP 要求のペイロードは、引数 inputReqString として渡されます。HTTP request payload is passed as a String for the argument inputReq.
  • 1 つのエントリが Table storage から取得され、引数 inputDataTestInputData として渡されます。One entry is retrieved from Table storage, and is passed as TestInputData to the argument inputData.

入力のバッチを受信するには、String[]POJO[]List<String> または List<POJO> にバインドできます。To receive a batch of inputs, you can bind to String[], POJO[], List<String>, or List<POJO>.

@FunctionName("ProcessIotMessages")
    public void processIotMessages(
        @EventHubTrigger(name = "message", eventHubName = "%AzureWebJobsEventHubPath%", connection = "AzureWebJobsEventHubSender", cardinality = Cardinality.MANY) List<TestEventData> messages,
        final ExecutionContext context)
    {
        context.getLogger().info("Java Event Hub trigger received messages. Batch size: " + messages.size());
    }
    
    public class TestEventData {
    public String id;
}

この関数は、構成済みのイベント ハブに新しいデータが見つかるたびにトリガーされます。This function gets triggered whenever there is new data in the configured event hub. cardinalityMANY に設定されているので、関数はイベント ハブからメッセージのバッチを受信します。Because the cardinality is set to MANY, the function receives a batch of messages from the event hub. イベント ハブからの EventData は関数実行のために TestEventData に変換されます。EventData from event hub gets converted to TestEventData for the function execution.

出力バインドの例Output binding example

$return を使用して、出力バインディングを戻り値にバインドすることができます。You can bind an output binding to the return value by using $return.

package com.example;

import com.microsoft.azure.functions.annotation.*;

public class Function {
    @FunctionName("copy")
    @StorageAccount("AzureWebJobsStorage")
    @BlobOutput(name = "$return", path = "samples-output-java/{name}")
    public static String copy(@BlobTrigger(name = "blob", path = "samples-input-java/{name}") String content) {
        return content;
    }
}

複数の出力バインディングが存在する場合は、そのうちの 1 つにのみ戻り値を使用します。If there are multiple output bindings, use the return value for only one of them.

複数の出力値を送信するには、azure-functions-java-library パッケージに定義されている OutputBinding<T> を使用します。To send multiple output values, use OutputBinding<T> defined in the azure-functions-java-library package.

@FunctionName("QueueOutputPOJOList")
    public HttpResponseMessage QueueOutputPOJOList(@HttpTrigger(name = "req", methods = { HttpMethod.GET,
            HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @QueueOutput(name = "itemsOut", queueName = "test-output-java-pojo", connection = "AzureWebJobsStorage") OutputBinding<List<TestData>> itemsOut, 
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");
       
        String query = request.getQueryParameters().get("queueMessageId");
        String queueMessageId = request.getBody().orElse(query);
        itemsOut.setValue(new ArrayList<TestData>());
        if (queueMessageId != null) {
            TestData testData1 = new TestData();
            testData1.id = "msg1"+queueMessageId;
            TestData testData2 = new TestData();
            testData2.id = "msg2"+queueMessageId;

            itemsOut.getValue().add(testData1);
            itemsOut.getValue().add(testData2);

            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + queueMessageId).build();
        } else {
            return request.createResponseBuilder(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("Did not find expected items in CosmosDB input list").build();
        }
    }

     public static class TestData {
        public String id;
    }

この関数は HttpRequest で呼び出します。You invoke this function on an HttpRequest. 複数の値を Queue storage に書き込みます。It writes multiple values to Queue storage.

HttpRequestMessage と HttpResponseMessageHttpRequestMessage and HttpResponseMessage

これらは azure-functions-java-library で定義されます。These are defined in azure-functions-java-library. HttpTrigger 関数と共に機能するヘルパー型です。They are helper types to work with HttpTrigger functions.

特殊な型Specialized type 移行先Target 一般的な用途Typical usage
HttpRequestMessage<T> HTTP トリガーHTTP Trigger メソッド、ヘッダー、またはクエリを取得するGets method, headers, or queries
HttpResponseMessage HTTP 出力のバインドHTTP Output Binding 200 以外の状態を返すReturns status other than 200

MetadataMetadata

いくつかのトリガーでは、入力データと共にトリガー メタデータが送信されます。Few triggers send trigger metadata along with input data. 注釈 @BindingName を使用して、トリガー メタデータにバインドできます。You can use annotation @BindingName to bind to trigger metadata.

package com.example;

import java.util.Optional;
import com.microsoft.azure.functions.annotation.*;


public class Function {
    @FunctionName("metadata")
    public static String metadata(
        @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) Optional<String> body,
        @BindingName("name") String queryValue
    ) {
        return body.orElse(queryValue);
    }
}

上記の例では、queryValue は HTTP 要求 URL http://{example.host}/api/metadata?name=test 内のクエリ文字列パラメーター name にバインドされています。In the preceding example, the queryValue is bound to the query string parameter name in the HTTP request URL, http://{example.host}/api/metadata?name=test. 次のもう 1 つの例では、キュー トリガー メタデータから Id にバインドする方法を示します。Here's another example, showing how to bind to Id from queue trigger metadata.

 @FunctionName("QueueTriggerMetadata")
    public void QueueTriggerMetadata(
        @QueueTrigger(name = "message", queueName = "test-input-java-metadata", connection = "AzureWebJobsStorage") String message,@BindingName("Id") String metadataId,
        @QueueOutput(name = "output", queueName = "test-output-java-metadata", connection = "AzureWebJobsStorage") OutputBinding<TestData> output,
        final ExecutionContext context
    ) {
        context.getLogger().info("Java Queue trigger function processed a message: " + message + " with metadaId:" + metadataId );
        TestData testData = new TestData();
        testData.id = metadataId;
        output.setValue(testData);
    }

注意

注釈に指定されている名前がメタデータ プロパティと一致する必要があります。The name provided in the annotation needs to match the metadata property.

実行コンテキストExecution context

azure-functions-java-library 内で定義されている ExecutionContext には、関数ランタイムと通信するためのヘルパー メソッドが含まれています。ExecutionContext, defined in the azure-functions-java-library, contains helper methods to communicate with the functions runtime. 詳しくは、ExecutionContext のリファレンス記事をご覧ください。For more information, see the ExecutionContext reference article.

ロガーLogger

ExecutionContext 内で定義されている getLogger を使用して、関数コードからログを書き込みます。Use getLogger, defined in ExecutionContext, to write logs from function code.

例:Example:


import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;

public class Function {
    public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
        if (req.isEmpty()) {
            context.getLogger().warning("Empty request body received by function " + context.getFunctionName() + " with invocation " + context.getInvocationId());
        }
        return String.format(req);
    }
}

ログとトレースの表示View logs and trace

Java の stdout と stderr ログ、その他の各種アプリケーション ログは、Azure CLI を使用してストリーム配信することができます。You can use the Azure CLI to stream Java stdout and stderr logging, as well as other application logging.

Azure CLI を使用して、アプリケーション ログを書き込むように関数アプリを構成する方法を次に示します。Here's how to configure your function app to write application logging by using the Azure CLI:

az webapp log config --name functionname --resource-group myResourceGroup --application-logging true

Azure CLI を使って関数アプリのログ出力をストリーム配信するには、コマンド プロンプト、Bash、ターミナルのいずれかのセッションを新たに開いて、次のコマンドを入力します。To stream logging output for your function app by using the Azure CLI, open a new command prompt, Bash, or Terminal session, and enter the following command:

az webapp log tail --name webappname --resource-group myResourceGroup

az webapp log tail コマンドには、--provider オプションを使って出力をフィルター処理するオプションが用意されています。The az webapp log tail command has options to filter output by using the --provider option.

Azure CLI を使ってログ ファイルを単一の ZIP ファイルとしてダウンロードするには、コマンド プロンプト、Bash、ターミナルのいずれかのセッションを新たに開いて、次のコマンドを入力します。To download the log files as a single ZIP file by using the Azure CLI, open a new command prompt, Bash, or Terminal session, and enter the following command:

az webapp log download --resource-group resourcegroupname --name functionappname

このコマンドを実行する前に、Azure portal または Azure CLI でファイル システム ログを有効にしておく必要があります。You must have enabled file system logging in the Azure portal or the Azure CLI before running this command.

環境変数Environment variables

Functions では、サービス接続文字列などのアプリ設定は、実行中に環境変数として公開されます。In Functions, app settings, such as service connection strings, are exposed as environment variables during execution. System.getenv("AzureWebJobsStorage") を使用して、これらの設定にアクセスすることができます。You can access these settings by using, System.getenv("AzureWebJobsStorage").

次の設定では、myAppSetting という名前のキーのアプリケーション設定が取得されます。The following example gets the application setting, with the key named myAppSetting:


public class Function {
    public String echo(@HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) String req, ExecutionContext context) {
        context.getLogger().info("My app setting value: "+ System.getenv("myAppSetting"));
        return String.format(req);
    }
}

注意

最適化されたコールド スタート エクスペリエンスを実現するには、アプリ設定 FUNCTIONS_EXTENSION_VERSION の値を ~2 または ~3 にする必要があります。The value of AppSetting FUNCTIONS_EXTENSION_VERSION should be ~2 or ~3 for an optimized cold start experience.

次のステップNext steps

Java による Azure Functions 開発の詳細については、次のリソースを参照してください。For more information about Azure Functions Java development, see the following resources: