Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 readme das Ferramentas Core.
Transfira e execute o instalador das Ferramentas Principais, com base na sua versão do Windows:
- v4.x - Windows de 64 bits (Recomendado. A depuração de código do Visual Studio requer 64 bits.)
- v4.x - Windows de 32 bits
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.
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.
- Se quiser que as suas funções sejam executadas no Java 11, utilize
O Maven solicita os valores necessários para concluir a geração do projeto durante a implantação.
Forneça os seguintes valores quando solicitado:Sugestão valor Descrição groupId com.fabrikam
Um valor que identifica exclusivamente o seu projeto em relação a todos os outros, 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. 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
.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 solicitação na variável request
, que é um HttpRequestMessage 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 definições para os recursos do Azure criados para hospedar a sua aplicação são especificadas no elemento de configuração do plugin com um groupId de com.microsoft.azure
no ficheiro 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 estas definições para controlar como os recursos são criados no Azure, tal como ao mudar runtime.os
de windows
para linux
antes do início da implantação. 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
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.
Copie o URL da sua
HttpExample
função desta saída para um navegador e anexe o parâmetro de consulta?name=<YOUR_NAME>
, de modo que o URL completo fique comohttp://localhost:7071/api/HttpExample?name=Functions
. O navegador deve exibir uma mensagem que reproduza 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.Quando terminar, use Ctrl+C e opte por
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.
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.
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 a sua aplicação de função na região westus. O nome é java-functions-app-service-plan.
- Aplicativo de função. Uma aplicação de funções é a unidade de implantação e execução para as 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 do projeto e os distribui para o novo aplicativo de função usando zip deployment. 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 completo Invoke mostrado na saída do comando publish na barra de endereço do navegador, anexando o parâmetro de consulta ?name=Functions
. O navegador deve exibir uma saída semelhante à de quando você executou a função localmente.
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.
Limpar recursos
Se continuares para a próxima etapa e adicionares uma ligação de saída de fila do Armazenamento do Azure, mantém todos os teus recursos no lugar, porque assim aproveitarás o que já fizeste.
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