Java と Maven を使用して初めての関数を作成する (プレビュー)Create your first function with Java and Maven (Preview)

注意

Azure Functions 用の Java は現在プレビュー段階です。Java for Azure Functions is currently in preview.

このクイックスタートでは、Maven でサーバーレス関数プロジェクトを作成し、ローカルでテストして、Azure にデプロイする手順について説明します。This quickstart guides through creating a serverless function project with Maven, testing it locally, and deploying it to Azure. 完了すると、Java 関数コードはクラウドで実行され、HTTP 要求からトリガーできるようになります。When you're done, your Java function code is running in the cloud and can be triggered from an HTTP request.

コマンド ラインから cURL で Hello World 関数にアクセスする

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

Java で関数アプリを開発するには、以下のものがインストールされている必要があります。To develop functions app with Java, you must have the following installed:

重要

このクイックスタートを行うには、JAVA_HOME 環境変数を JDK のインストール場所に設定する必要があります。The JAVA_HOME environment variable must be set to the install location of the JDK to complete this quickstart.

Azure Functions Core Tools のインストールInstall the Azure Functions Core Tools

Azure Functions Core Tools 2.0 では、Azure Functions を記述、実行、デバッグするためのローカル開発環境が提供されます。The Azure Functions Core Tools 2.0 provide a local development environment for writing, running, and debugging Azure Functions.

インストールするには、Azure Functions Core Tools プロジェクトの「Installing (インストール)」セクションにアクセスし、オペレーティング システムに固有の手順を参照してください。To install, visit the Installing section of the Azure Functions Core Tools project to find the specific instructions for your operating system.

次の要件のインストール後、Node.js に付属する npm を使って手動でインストールすることもできます。You can also install it manually with npm, included with Node.js, after installing the following requirements:

npm ベースのインストールを続行するには、次のコマンドを実行します。To proceed with an npm-based installation, run:

npm install -g azure-functions-core-tools

注意

Azure Functions Core Tools バージョン 2.0 のインストールで問題がある場合は、「バージョン 2.x ランタイム」をご覧ください。If you have trouble installing Azure Functions Core Tools version 2.0, see Version 2.x runtime.

新しい Functions プロジェクトを生成するGenerate a new Functions project

空のフォルダーで次のコマンドを実行して、Maven アーキタイプから Functions プロジェクトを生成します。In an empty folder, run the following command to generate the Functions project from a Maven archetype.

Linux/MacOSLinux/MacOS

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

Windows (CMD)Windows (CMD)

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

Maven によって、プロジェクトの生成を終了するために必要な値の入力を求めるメッセージが表示されます。Maven will ask you for values needed to finish generating the project. groupIdartifactIdversion の値については、Maven の名前付け規則をご覧ください。For groupId, artifactId, and version values, see the Maven naming conventions reference. appName の値は Azure 全体で一意である必要があるため、Maven は既定値として前に入力された artifactId を基にしてアプリ名を生成します。The appName value must be unique across Azure, so Maven generates an app name based on the previously entered artifactId as a default. packageName の値により、生成される関数コードの Java パッケージが決まります。The packageName value determines the Java package for the generated function code.

以下の com.fabrikam.functions および fabrikam-functions 識別子は例として使用されており、このクイック スタートの後の方の手順を読みやすくしています。The com.fabrikam.functions and fabrikam-functions identifiers below are used as an example and to make later steps in this quickstart easier to read. この手順では、Maven に独自の値を指定することをお勧めします。You are encouraged to supply your own values to Maven in this step.

Define value for property 'groupId': com.fabrikam.functions
Define value for property 'artifactId' : fabrikam-functions
Define value for property 'version' 1.0-SNAPSHOT : 
Define value for property 'package': com.fabrikam.functions
Define value for property 'appName' fabrikam-functions-20170927220323382:
Confirm properties configuration: Y

Maven は、この例 fabrikam-functions の場合、artifactId という名前の新しいフォルダーにプロジェクト ファイルを作成します。Maven creates the project files in a new folder with a name of artifactId, in this example fabrikam-functions. プロジェクトで生成される、すぐに実行できるコードは、HTTP によってトリガーされる、要求の本文をエコーする簡単な関数です。The ready to run generated code in the project is a simple HTTP triggered function that echoes the body of the request:

public class Function {
    /**
     * This function listens at endpoint "/api/hello". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/hello
     * 2. curl {your host}/api/hello?name=HTTP%20Query
     */
    @FunctionName("hello")
    public HttpResponseMessage<String> hello(
            @HttpTrigger(name = "req", methods = {"get", "post"}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponse(400, "Please pass a name on the query string or in the request body");
        } else {
            return request.createResponse(200, "Hello, " + name);
        }
    }
}

関数をローカルで実行するRun the function locally

新しく作成されたプロジェクト フォルダーにディレクトリを変更し、Maven で関数をビルドして実行します。Change directory to the newly created project folder and build and run the function with Maven:

cd fabrikam-function
mvn clean package 
mvn azure-functions:run

注意

Java 9 でこの例外、javax.xml.bind.JAXBException が発生している場合は、GitHub で回避策を参照してください。If you're experiencing this exception: javax.xml.bind.JAXBException with Java 9, see the workaround on GitHub.

関数がシステム上でローカルに実行されていて、HTTP 要求に応答する準備ができている場合に、次の出力が表示されます。You see this output when the function is running locally on your system and ready to respond to HTTP requests:

Listening on http://localhost:7071
Hit CTRL-C to exit...

Http Functions:

   hello: http://localhost:7071/api/hello

新しいターミナル ウィンドウで curl を使用して、コマンド ラインから関数をトリガーします。Trigger the function from the command line using curl in a new terminal window:

curl -w '\n' -d LocalFunction http://localhost:7071/api/hello
Hello LocalFunction!

関数のコードを停止するには、ターミナルで Ctrl-C を使います。Use Ctrl-C in the terminal to stop the function code.

関数を Azure にデプロイするDeploy the function to Azure

Azure Functions へのデプロイ プロセスでは、Azure CLI からアカウントの資格情報を使います。The deploy process to Azure Functions uses account credentials from the Azure CLI. 続行する前に、Azure CLI にログインします。Log in with the Azure CLI before continuing.

az login

azure-functions:deploy Maven ターゲットを使用して、新しい関数アプリにコードをデプロイします。Deploy your code into a new Function app using the azure-functions:deploy Maven target.

mvn azure-functions:deploy

デプロイが完了すると、Azure 関数アプリへのアクセスに使うことができる URL が表示されます。When the deploy is complete, you see the URL you can use to access your Azure function app:

[INFO] Successfully deployed Function App with package.
[INFO] Deleting deployment package from Azure Storage...
[INFO] Successfully deleted deployment package fabrikam-function-20170920120101928.20170920143621915.zip
[INFO] Successfully deployed Function App at https://fabrikam-function-20170920120101928.azurewebsites.net
[INFO] ------------------------------------------------------------------------

cURL を使用して、Azure で実行している関数アプリをテストします。Test the function app running on Azure using cURL. 前の手順でデプロイされた独自の関数アプリの URL と一致するように、下のサンプルの URL を変更する必要があります。You'll need to change the URL from the sample below to match the deployed URL for your own function app from the previous step.

curl -w '\n' https://fabrikam-function-20170920120101928.azurewebsites.net/api/hello -d AzureFunctions
Hello AzureFunctions!

変更を加えて再デプロイするMake changes and redeploy

関数アプリから返されるテキストに変更を加えるために、生成されたプロジェクトの src/main.../Function.java ソース ファイルを編集します。Edit the src/main.../Function.java source file in the generated project to alter the text returned by your Function app. 変更するのは次の行です。Change this line:

return request.createResponse(200, "Hello, " + name);

これを次のように変更してください。To the following:

return request.createResponse(200, "Hi, " + name);

変更内容を保存し、ターミナルから azure-functions:deploy を実行して再デプロイします。Save the changes and redeploy by running azure-functions:deploy from the terminal as before. 関数アプリが更新されます。次の要求を実行してみましょう。The function app will be updated and this request:

curl -w '\n' -d AzureFunctionsTest https://fabrikam-functions-20170920120101928.azurewebsites.net/api/HttpTrigger-Java

出力結果が更新されていることがわかります。Will have updated output:

Hi, AzureFunctionsTest

次の手順Next steps

簡単な HTTP トリガーを使って Java 関数アプリを作成し、Azure Functions にデプロイしました。You have created a Java function app with a simple HTTP trigger and deployed it to Azure Functions.

  • Azure Functions Java developer guide」(Azure Functions Java 開発者ガイド) で、Java 関数の開発の詳細について確認します。Review the Java Functions developer guide for more information on developing Java functions.
  • azure-functions:add Maven ターゲットを使って、異なるトリガーの新しい関数をプロジェクトに追加します。Add additional functions with different triggers to your project using the azure-functions:add Maven target.
  • Visual Studio CodeIntelliJEclipse を使って関数を作成し、ローカルでデバッグします。Write and debug functions locally with Visual Studio Code, IntelliJ, and Eclipse.
  • Azure にデプロイされた関数を Visual Studio Code でデバッグします。Debug functions deployed in Azure with Visual Studio Code. その手順については、Visual Studio Code のサーバーレス Java アプリケーションに関するドキュメントを参照してください。See the Visual Studio Code serverless Java applications documentation for instructions.