Java と Maven を使用して初めての関数を作成するCreate your first function with Java and Maven

この記事では、Maven コマンド ライン ツールを使用して Java 関数を作成し、Azure Functions に公開する方法を説明します。This article guides you through using the Maven command line tool to build and publish a Java function to Azure Functions. 完了すると、関数コードは Azure の従量課金プランで実行され、HTTP 要求を使用してトリガーできるようになります。When you're done, your function code runs on the Consumption Plan in Azure and can be triggered using an HTTP request.

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

前提条件Prerequisites

Java を使用して関数を開発するには、以下のものがインストールされている必要があります。To develop functions using 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.

新しい 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 

注意

コマンドの実行で問題が発生した場合は、使用されている maven-archetype-plugin のバージョンを確認します。If you're experiencing issues with running the command, take a look at what maven-archetype-plugin version is used. .pom ファイルがない空のディレクトリでコマンドを実行しているため、Maven を古いバージョンからアップグレードした場合は、~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin から古いバージョンのプラグインを使用しようとしている可能性があります。Because you are running the command in an empty directory with no .pom file, it might be attempting to use a plugin of the older version from ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin if you upgraded your Maven from an older version. その場合は、maven-archetype-plugin ディレクトリを削除した後、コマンドを再実行します。If so, try deleting the maven-archetype-plugin directory and re-running the command.

WindowsWindows

mvn archetype:generate `
    "-DarchetypeGroupId=com.microsoft.azure" `
    "-DarchetypeArtifactId=azure-functions-archetype"
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.

注意

Visual Studio Code を使用して関数アプリをデプロイするときは、無料サブスクリプション以外のサブスクリプションを選択してください。そうでないと、エラーが発生します。When you use Visual Studio Code to deploy your Function app, remember to choose a non-free subscription, or you will get an error. IDE の左側で自分のサブスクリプションを確認することができます。You can watch your subscription on the left side of the IDE.

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.

注意

アクセス権Anonymous に設定していることを確認します。Make sure you set the Access rights to Anonymous. Function の既定のレベルを選択した場合、関数エンドポイントにアクセスする要求で、関数キーを提示する必要があります。When you choose the default level of Function, you are required to present the function key in requests to access your function endpoint.

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.