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:
- 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 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. 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 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
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 a cadeia de caracteres?name=<YOUR_NAME>
de consulta, tornando o URL completo comohttp://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.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.
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 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=Functions
query . 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.
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