Guia de início rápido: criar uma função Java no Azure a partir da linha de comando

Neste artigo, você usa ferramentas de linha de comando para criar uma função Java que responde a solicitações HTTP. Depois de testar o código localmente, vai implementá-lo no ambiente sem servidor das Funções do Azure.

Se o Maven não for sua ferramenta de desenvolvimento preferida, confira nossos tutoriais semelhantes para desenvolvedores Java:

A conclusão deste início rápido incorre num pequeno custo de alguns cêntimos USD ou menos na sua conta do Azure.

Configure seu ambiente local

Antes de começar, você deve ter o seguinte:

  • Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.

  • A CLI do Azure versão 2.4 ou posterior.

  • O Java Developer Kit, versão 8, 11, 17, 21 (somente Linux). A JAVA_HOME variável de ambiente deve ser definida como o local de instalação da versão correta do JDK.

  • Apache Maven, versão 3.0 ou superior.

Instalar as Ferramentas de Núcleo de Funções do Azure

A maneira recomendada de instalar o Core Tools depende do sistema operacional do seu computador de desenvolvimento local.

As etapas a seguir usam um instalador do Windows (MSI) para instalar o Core Tools v4.x. Para obter mais informações sobre outros instaladores baseados em pacotes, consulte o Leiame das Ferramentas Principais.

Transfira e execute o instalador das Ferramentas Principais, com base na sua versão do Windows:

Se você usou anteriormente o instalador do Windows (MSI) para instalar o Core Tools no Windows, você deve desinstalar a versão antiga de Adicionar remover programas antes de instalar a versão mais recente.

Criar um projeto de função local

No Azure Functions, um projeto de função é um contêiner para uma ou mais funções individuais que respondem a um gatilho específico. Todas as funções em um projeto compartilham as mesmas configurações locais e de hospedagem. Nesta seção, você cria um projeto de função que contém uma única função.

  1. Numa pasta vazia, execute o seguinte comando para gerar o projeto das Funções a partir de um arquétipo do Maven.

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

    Importante

    • Se quiser que as suas funções sejam executadas no Java 11, utilize -DjavaVersion=11. Para saber mais, consulte Versões Java.
    • A JAVA_HOME variável de ambiente deve ser definida como o local de instalação da versão correta do JDK para concluir este artigo.
  2. O Maven solicita os valores necessários para concluir a geração do projeto na implantação.
    Forneça os seguintes valores quando solicitado:

    Pedido valor Description
    groupId com.fabrikam Um valor que identifica exclusivamente seu projeto em todos os projetos, seguindo as regras de nomenclatura de pacotes para Java.
    artifactId fabrikam-functions Um valor que é o nome do jar, sem um número de versão.
    Versão 1.0-SNAPSHOT Escolha o valor padrão.
    embalagem com.fabrikam Um valor que é o pacote Java para o código de função gerado. Utilize a predefinição.
  3. Digite Y ou pressione Enter para confirmar.

    Maven cria os arquivos de projeto em uma nova pasta com um nome de artifactId, que neste exemplo é fabrikam-functions.

  4. Navegue até a pasta do projeto:

    cd fabrikam-functions
    

    Esta pasta contém vários arquivos para o projeto, incluindo arquivos de configuração chamados local.settings.json e host.json. Como local.settings.json pode conter segredos baixados do Azure, o arquivo é excluído do controle do código-fonte por padrão no arquivo .gitignore .

(Opcional) Examinar o conteúdo do arquivo

Se desejar, você pode pular para Executar a função localmente e examinar o conteúdo do arquivo mais tarde.

Function.java

Function.java contém um run método que recebe dados de request solicitação na variável é um HttpRequestMessage que é decorado com a anotação HttpTrigger, que define o comportamento do gatilho.

package com.fabrikam;

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import java.util.Optional;

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

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final 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();
        }
    }
}

A mensagem de resposta é gerada pela API HttpResponseMessage.Builder .

pom.xml

As configurações para os recursos do Azure criados para hospedar seu aplicativo são definidas no elemento de configuração do plug-in com um groupId de no arquivo de com.microsoft.azure pom.xml gerado. Por exemplo, o elemento de configuração abaixo instrui uma implantação baseada em Maven a criar um aplicativo de função no java-functions-group grupo de recursos na westus região. O aplicativo de função em si é executado no Windows hospedado no java-functions-app-service-plan plano, que por padrão é um plano de consumo sem servidor.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-functions-maven-plugin</artifactId>
    <version>${azure.functions.maven.plugin.version}</version>
    <configuration>
        <!-- function app name -->
        <appName>${functionAppName}</appName>
        <!-- function app resource group -->
        <resourceGroup>java-functions-group</resourceGroup>
        <!-- function app service plan name -->
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <!-- function app region-->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
        <region>westus</region>
        <!-- function pricingTier, default to be consumption if not specified -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
        <!-- <pricingTier></pricingTier> -->
        <!-- Whether to disable application insights, default is false -->
        <!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
        <!-- <disableAppInsights></disableAppInsights> -->
        <runtime>
            <!-- runtime os, could be windows, linux or docker-->
            <os>windows</os>
            <javaVersion>8</javaVersion>
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~4</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Você pode alterar essas configurações para controlar como os recursos são criados no Azure, por exemplo, alterando runtime.os de para linux antes da windows implantação inicial. Para obter uma lista completa das configurações suportadas pelo plug-in Maven, consulte os detalhes da configuração.

FunctionTest.java

O arquétipo também gera um teste de unidade para a sua função. Quando você altera sua função para adicionar associações ou adicionar novas funções ao projeto, você também precisará modificar os testes no arquivo FunctionTest.java .

Executar a função localmente

  1. Execute sua função iniciando o host de tempo de execução local do Azure Functions a partir da pasta LocalFunctionProj :

    mvn clean package
    mvn azure-functions:run
    

    No final da saída, as seguintes linhas devem aparecer:

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Nota

    Se HttpExample não aparecer como mostrado acima, você provavelmente iniciou o host de fora da pasta raiz do projeto. Nesse caso, use Ctrl+C para parar o host, navegue até a pasta raiz do projeto e execute o comando anterior novamente.

  2. Copie o URL da sua HttpExample função desta saída para um navegador e anexe a cadeia de caracteres ?name=<YOUR_NAME>de consulta, tornando o URL completo como http://localhost:7071/api/HttpExample?name=Functions. O navegador deve exibir uma mensagem que ecoe o valor da cadeia de caracteres de consulta. O terminal no qual você iniciou seu projeto também mostra a saída de log à medida que você faz solicitações.

  3. Quando terminar, use Ctrl+C e escolha y parar o host de funções.

Implantar o projeto de função no Azure

Um aplicativo de função e recursos relacionados são criados no Azure quando você implanta seu projeto de funções pela primeira vez. As configurações para os recursos do Azure criados para hospedar seu aplicativo são definidas no arquivo pom.xml. Neste artigo, você aceitará os padrões.

Gorjeta

Para criar um aplicativo funcional em execução no Linux em vez do Windows, altere o runtime.os elemento no arquivo pom.xml de windows para linux. A execução do Linux em um plano de consumo é suportada nessas regiões. Não é possível ter aplicativos executados no Linux e aplicativos executados no Windows no mesmo grupo de recursos.

  1. Antes de implantar, entre em sua assinatura do Azure usando a CLI do Azure ou o Azure PowerShell.

    az login
    

    O comando az login conecta você à sua conta do Azure.

  2. Use o comando a seguir para implantar seu projeto em um novo aplicativo de função.

    mvn azure-functions:deploy
    

    Isso cria os seguintes recursos no Azure:

    • Grupo de recursos. Nomeado como java-functions-group.
    • Conta de armazenamento. Exigido por funções. O nome é gerado aleatoriamente com base nos requisitos de nome da conta de armazenamento.
    • Plano de hospedagem. Hospedagem sem servidor para seu aplicativo de função na região oeste. O nome é java-functions-app-service-plan.
    • Aplicativo de função. Um aplicativo de função é a unidade de implantação e execução para suas funções. O nome é gerado aleatoriamente com base no seu artifactId, anexado com um número gerado aleatoriamente.

    A implantação empacota os arquivos de projeto e os implanta no novo aplicativo de função usando a implantação zip. O código é executado a partir do pacote de implantação no Azure.

Importante

A conta de armazenamento é usada para armazenar dados importantes do aplicativo, às vezes incluindo o próprio código do aplicativo. Você deve limitar o acesso de outros aplicativos e usuários à conta de armazenamento.

Invoque a função no Azure

Como sua função usa um gatilho HTTP, você a invoca fazendo uma solicitação HTTP para sua URL no navegador ou com uma ferramenta como curl.

Copie o URL Invoke completo mostrado na saída do comando publish em uma barra de endereço do navegador, anexando o parâmetro ?name=Functionsquery . O navegador deve exibir uma saída semelhante à de quando você executou a função localmente.

A saída da função é executada no Azure em um navegador

Execute o seguinte comando para visualizar logs de streaming quase em tempo real:

func azure functionapp logstream <APP_NAME> 

Em uma janela de terminal separada ou no navegador, chame a função remota novamente. Um log detalhado da execução da função no Azure é mostrado no terminal.

Clean up resources (Limpar recursos)

Se você continuar para a próxima etapa e adicionar uma vinculação de saída de fila do Armazenamento do Azure, mantenha todos os seus recursos no lugar, pois você aproveitará o que já fez.

Caso contrário, use o comando a seguir para excluir o grupo de recursos e todos os recursos contidos para evitar incorrer em custos adicionais.

az group delete --name java-functions-group

Próximos passos