Quickstart: Criar uma função Java em Azure a partir da linha de comando

Neste artigo, utiliza ferramentas de linha de comando para criar uma função Java que responda a pedidos HTTP. Depois de testar o código localmente, implemente-o para o ambiente sem servidor das Funções Azure.

Se a Maven não é a sua ferramenta de desenvolvimento preferida, confira os nossos tutoriais semelhantes para desenvolvedores java:

Completar este quickstart incorre num pequeno custo de alguns usd ou menos na sua conta Azure.

Configure o seu ambiente local

Antes de começar, deve ter o seguinte:

Verificação pré-requisito

  • Numa janela de terminal ou comando, corra func --version para verificar se as Ferramentas Centrais de Funções Azure são a versão 3.x.

  • Corra az --version para verificar se a versão Azure CLI é 2.4 ou mais tarde.

  • Corra az login para iniciar seduca no Azure e verifique uma subscrição ativa.

Criar um projeto de função local

Em Funções Azure, um projeto de função é um recipiente para uma ou mais funções individuais que cada um responde a um gatilho específico. Todas as funções de um projeto partilham as mesmas configurações locais e de hospedagem. Nesta secção, cria-se 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 as versões Java.
    • A JAVA_HOME variável ambiente deve ser definida para a localização de instalação da versão correta do JDK para completar este artigo.
  2. A Maven pede-lhe valores necessários para terminar a geração do projeto na implantação.
    Fornecer os seguintes valores quando solicitado:

    Prompt Valor Descrição
    groupId com.fabrikam Um valor que identifica exclusivamente o seu projeto em todos os projetos, seguindo as regras de nomeação de pacotes para a Java.
    artefactoId fabrikam-functions Um valor que é o nome do jarro, sem um número de versão.
    Versão 1.0-SNAPSHOT Escolha o valor predefinido.
    pacote com.fabrikam Um valor que é o pacote Java para o código de função gerado. Utilize a predefinição.
  3. Digite Y ou prima Enter para confirmar.

    A Maven cria os ficheiros do projeto numa nova pasta com o nome de artifactId, que neste exemplo é fabrikam-functions .

  4. Navegue na pasta do projeto:

    cd fabrikam-functions
    

    Esta pasta contém vários ficheiros para o projeto, incluindo ficheiros de configurações nomeados local.settings.jse host.jsligados . Como local.settings.jspode conter segredos descarregados do Azure, o ficheiro é excluído do controlo de origem por padrão no ficheiro .gitignore.

(Opcional) Examine o conteúdo do ficheiro

Se desejar, pode saltar para Executar a função localmente e examinar o conteúdo do ficheiro mais tarde.

Função.java

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

/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 */

package com.functions;

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 HttpResponseMessage.Builder API.

pom.xml

Definições para os recursos Azure criados para hospedar a sua app são definidos no elemento de configuração do plugin com um grupoId do com.microsoft.azure ficheiro pom.xml gerado. Por exemplo, o elemento de configuração abaixo instrui uma implementação baseada em Maven para criar uma aplicação de função no java-functions-group grupo de recursos na westus região. A própria aplicação de função funciona em Windows hospedados 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>${functionResourceGroup}</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>${functionAppRegion}</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>
            <!-- for docker function, please set the following parameters -->
            <!-- <image>[hub-user/]repo-name[:tag]</image> -->
            <!-- <serverId></serverId> -->
            <!-- <registryUrl></registryUrl>  -->
        </runtime>
        <appSettings>
            <property>
                <name>FUNCTIONS_EXTENSION_VERSION</name>
                <value>~3</value>
            </property>
        </appSettings>
    </configuration>
    <executions>
        <execution>
            <id>package-functions</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Pode alterar estas definições para controlar a forma como os recursos são criados no Azure, tais como alterando runtime.os de antes da windows linux implantação inicial. Para obter uma lista completa de definições suportadas pelo plug-in Maven, consulte os detalhes da configuração.

FunçãoTest.java

O arquétipo também gera um teste de unidade para a sua função. Quando alterar a sua função para adicionar encadernações ou adicionar novas funções ao projeto, também terá de modificar os testes no ficheiro FunctionTest.java.

Executar a função localmente

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

    mvn clean package
    mvn azure-functions:run
    

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

     ...
    
     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, é provável que tenha iniciado o hospedeiro de fora da pasta raiz do projeto. Nesse caso, utilize o Ctrl + C para parar o hospedeiro, navegue na pasta raiz do projeto e volte a executar o comando anterior.

  2. Copie o URL da sua HttpExample função desta saída para um browser e apencha a cadeia de ?name=<YOUR_NAME> consulta, fazendo com que o URL completo seja semelhante http://localhost:7071/api/HttpExample?name=Functions a . O navegador deve exibir uma mensagem que ecoe o valor da sua cadeia de consulta. O terminal em que iniciou o seu projeto também mostra a saída de registo à medida que faz pedidos.

  3. Quando terminar, use ctrl + C e opte por y parar o hospedeiro de funções.

Implementar o projeto de função para Azure

Uma aplicação de função e recursos relacionados são criados em Azure quando implementa o seu projeto de funções pela primeira vez. Definições para os recursos Azure criados para hospedar a sua app são definidos no ficheiropom.xml. Neste artigo, você aceitará os incumprimentos.

Dica

Para criar uma aplicação de função em execução no Linux em vez de Windows, altere runtime.os o elemento no ficheiro pom.xml de windows linux . A execução do Linux num plano de consumo é apoiada nestas regiões. Não é possível ter aplicações que funcionam no Linux e aplicações que funcionam no Windows no mesmo grupo de recursos.

  1. Antes de iniciar a sua súm, inscreva-se na sua subscrição Azure utilizando o Azure CLI ou Azure PowerShell.

    az login
    

    O comando de login az assina-o na sua conta Azure.

  2. Utilize o seguinte comando para implantar o seu projeto numa nova aplicação de função.

    mvn azure-functions:deploy
    

    Isto cria os seguintes recursos em Azure:

    • Grupo de recursos. Nomeado como grupo java-funções.
    • Armazenamento conta. Requerido por Funções. O nome é gerado aleatoriamente com base nos requisitos de Armazenamento nome da conta.
    • Plano de hospedagem. Hospedagem sem servidor para a sua aplicação de função na região de Westus. O nome é java-funções-app-service-plan.
    • App de função. Uma aplicação de função é a unidade de implementação e execução para as suas funções. O nome é gerado aleatoriamente com base no seu artefactoId, anexado com um número gerado aleatoriamente.

    A implementação embala os ficheiros do projeto e implanta-os na nova aplicação de função utilizando a implementação zip. O código é executado a partir do pacote de implantação em Azure.

Invocar a função em Azure

Como a sua função utiliza um gatilho HTTP, invoca-o fazendo um pedido HTTP ao seu URL no navegador ou com uma ferramenta como o curl.

Copie o URL completo de invocação mostrado na saída do comando de publicação numa barra de endereços do navegador, anexando o parâmetro de consulta &name=Functions . O navegador deve apresentar uma saída semelhante à de quando executou a função localmente.

A saída da função executada no Azure num browser

Executar o seguinte comando para visualizar perto de registosde streaming em tempo real :

func azure functionapp logstream <APP_NAME> 

Numa janela de terminal separada ou no browser, volte a ligar para a função remota. Um registo verboso da execução da função em Azure é mostrado no terminal.

Limpar os recursos

Se continuar a seguir o passo seguinte e adicionar um Azure Armazenamento de saída de fila, mantenha todos os seus recursos no lugar, pois irá basear-se no que já fez.

Caso contrário, utilize o seguinte comando para eliminar o grupo de recursos e todos os seus recursos contidos para evitar custos adicionais.

az group delete --name java-functions-group

Passos seguintes