Início Rápido: Usar Java para criar e publicar uma função no Azure FunctionsQuickstart: Use Java to create and publish a function to Azure Functions

Este artigo informa a você como criar e publicar uma função Java nas funções do Azure com a ferramenta de linha de comando Maven.This article instructs you how to build and publish a Java function to Azure functions with the Maven command-line tool. Quando terminar, seu código de função será executado nos Plano de Consumo no Azure e poderá ser disparado usando uma solicitação HTTP.When you're done, your function code runs on the Consumption Plan in Azure and can be triggered using an HTTP request.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Pré-requisitosPrerequisites

Para desenvolver funções usando Java, você deve ter o seguinte instalado:To develop functions using Java, you must have the following installed:

Importante

A variável de ambiente JAVA_HOME deve ser definida como o local de instalação do JDK para concluir este guia de início rápido.The JAVA_HOME environment variable must be set to the install location of the JDK to complete this quickstart.

Gerar um novo projeto do FunctionsGenerate a new Functions project

Em uma pasta vazia, execute o seguinte comando para gerar o projeto do Functions a partir de um arquétipo Maven.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 

Observação

Se você estiver com problemas com a execução do comando, verifique qual versão do maven-archetype-plugin é usada.If you're experiencing issues with running the command, take a look at what maven-archetype-plugin version is used. Como você está executando o comando em um diretório vazio sem nenhum arquivo .pom, ele pode estar tentando usar um plug-in da versão mais antiga do ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin, se você atualizou o Maven de uma versão anterior.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. Nesse caso, tente excluir o diretório maven-archetype-plugin e executar novamente o comando.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"

O Maven solicitará os valores necessários para concluir a geração do projeto.Maven will ask you for values needed to finish generating the project. Para os valores de groupId, artifactId e versão, consulte a referência Convenções de nomenclatura Maven.For groupId, artifactId, and version values, see the Maven naming conventions reference. O valor de appName deve ser exclusivo no Azure, portanto, o Maven gera um nome de aplicativo com base no artifactId em inserido anteriormente como padrão.The appName value must be unique across Azure, so Maven generates an app name based on the previously entered artifactId as a default. O valor de packageName determina o pacote de Java para o código de função gerado.The packageName value determines the Java package for the generated function code.

Os identificadores com.fabrikam.functions e fabrikam-functions abaixo são usados como um exemplo e tornam as etapas posteriores deste início rápido mais fáceis de ler.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. Forneça seus próprios valores para o Maven nesta etapa.You are encouraged to supply your own values to Maven in this step.

Define value for property 'groupId' (should match expression '[A-Za-z0-9_\-\.]+'): com.fabrikam.functions
Define value for property 'artifactId' (should match expression '[A-Za-z0-9_\-\.]+'): 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:
Define value for property 'appRegion' westus: :
Define value for property 'resourceGroup' java-functions-group: :
Confirm properties configuration: Y

O Maven cria os arquivos de projeto em uma nova pasta com um nome de artifactId neste exemplo fabrikam-functions.Maven creates the project files in a new folder with a name of artifactId, in this example fabrikam-functions. O código pronto para executar gerado no projeto é uma função disparada por HTTP que reflete o corpo da solicitação.The ready to run generated code in the project is an HTTP triggered function that echoes the body of the request. Substitua src/main/java/com/fabrikam/functions/Function.java pelo seguinte código:Replace src/main/java/com/fabrikam/functions/Function.java with the following code:

package com.fabrikam.functions;

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

public class Function {
    /**
     * This function listens at endpoint "/api/HttpTrigger-Java". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpTrigger-Java
     * 2. curl {your host}/api/HttpTrigger-Java?name=HTTP%20Query
     */
    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.FUNCTION) 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.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

Habilitar pacotes de extensãoEnable extension bundles

A maneira mais fácil de instalar as extensões de associação é habilitar pacotes de extensão.The easiest way to install binding extensions is to enable extension bundles. Quando você habilita os pacotes, um conjunto predefinido de pacotes de extensão é instalado automaticamente.When you enable bundles, a predefined set of extension packages is automatically installed.

Para habilitar pacotes de extensão, abra o arquivo host.json e atualize seu conteúdo de acordo com o código a seguir:To enable extension bundles, open the host.json file and update its contents to match the following code:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
}

Executar a função localmenteRun the function locally

Altere o diretório para a pasta de projeto recém-criada (aquela que contém os arquivos host.json e pom.xml) e compile e execute a função com o Maven:Change directory to the newly created project folder (the one containing your host.json and pom.xml files) and build and run the function with Maven:

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

Observação

Caso esteja presenciando esta exceção: javax.xml.bind.JAXBExceptioncom o Java 9, consulte a solução alternativa no GitHub.If you're experiencing this exception: javax.xml.bind.JAXBException with Java 9, see the workaround on GitHub.

Esse resultado é exibido quando a função está sendo executada localmente no seu sistema e está pronta para responder às solicitações 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/HttpTrigger-Java

Dispare a função na linha de comando usando cURL em uma nova janela de terminal:Trigger the function from the command line using curl in a new terminal window:

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java -d LocalFunction
Hello LocalFunction!

Use Ctrl-C no terminal para interromper o código da função.Use Ctrl-C in the terminal to stop the function code.

Implantar a função no AzureDeploy the function to Azure

O processo de implantação no Azure Functions usa credenciais de conta da CLI do Azure.The deploy process to Azure Functions uses account credentials from the Azure CLI. Entre com a CLI do Azure antes de continuar.Sign in with the Azure CLI before continuing.

az login

Implante seu código em um novo aplicativo de funções usando o destino Maven azure-functions:deploy.Deploy your code into a new Function app using the azure-functions:deploy Maven target. Isso executa uma Implantação de Zip com o modo de execução do pacote habilitado.This performs a Zip Deploy with Run From Package mode enabled.

Observação

Quando você usa o Visual Studio Code para implantar seu aplicativo Function, lembre-se de escolher uma assinatura não gratuita, ou você receberá um erro.When you use Visual Studio Code to deploy your Function app, remember to choose a non-free subscription, or you will get an error. Você pode assistir à sua assinatura no lado esquerdo do IDE.You can watch your subscription on the left side of the IDE.

mvn azure-functions:deploy

Quando a implantação for concluída, você verá a URL que pode usar para acessar seu aplicativo de funções do Azure: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] ------------------------------------------------------------------------

Teste o aplicativo de funções em execução no Azure usando cURL.Test the function app running on Azure using cURL. Você precisará alterar a URL do exemplo abaixo para corresponder à URL implantada no seu próprio aplicativo de funções da etapa anterior.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.

Observação

Verifique se você definiu os direitos de acesso para Anonymous.Make sure you set the Access rights to Anonymous. Quando você escolhe o nível padrão de Function, é necessário que você apresente a chave da função em solicitações para acessar seu ponto de extremidade da função.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/HttpTrigger-Java -d AzureFunctions
Hello AzureFunctions!

Fazer alterações e implantar novamenteMake changes and redeploy

Edite o arquivo de origem src/main.../Function.java no projeto gerado para alterar o texto retornado pelo seu aplicativo de Funções.Edit the src/main.../Function.java source file in the generated project to alter the text returned by your Function app. Altere esta linha:Change this line:

return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

Para o seguinte:To the following:

return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();

Salve as alterações.Save the changes. Execute mvn clean package e reimplante executando azure-functions:deploy no terminal como antes.Run mvn clean package and redeploy by running azure-functions:deploy from the terminal as before. O aplicativo de funções será atualizado e esta solicitação:The function app will be updated and this request:

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

Terá a saída atualizada:Will have updated output:

Hi, AzureFunctionsTest

Próximas etapasNext steps

Você criou um aplicativo de funções Java com um gatilho HTTP simples e o implantou no Azure Functions.You have created a Java function app with a simple HTTP trigger and deployed it to Azure Functions.