Azure Functions com Java no IntelliJ
E ai pessoal, tudo bem com vocês?
Dando continuidade na série sobre Azure Functions, no post de hoje vamos mostrar uma implementação do Azure Functions com o Java e posteriormente realizar a implantação (Deploy) no Azure.
Caso não tenha visto o post anterior sobre Azure Functions, esse é o link de acesso. Confere lá!
Pré-requisitos
Antes de tudo, precisamos preparar nosso ambiente com algumas ferramentas e Java SDK, são eles:
- Conta no Azure
- JetBrains IntelliJ 2022 Community Edition ou Ultimate;
- Java 8 ou 11 (OpenJDK);
- Maven 3+;
- Azure Functions Core Tools.
Azure Functions Core Tools
Para entendermos melhor o que essa biblioteca oferece, vamos pegar a própria definição do GitHub do projeto.
O Azure Functions Core Tools fornece uma experiência de desenvolvimento local para criar, desenvolver, testar, executar e depurar o Azure Functions.
Implementação
Em nossa implementação, estarei utilizando o IntelliJ 2022 e o Java 11 do Eclipse Adoptium.
Para iniciar o desenvolvimento, é necessário primeiramente instalar o Plugin Azure Toolkit for IntelliJ que oferecerá todo o suporte necessário para o desenvolvimento da nossa função junto ao IntelliJ e também auxiliará no processo de deployment.
Para isso, abra o IntelliJ e na opção Plugins procure por Azure Toolkit for IntelliJ e execute a instalação.
Após a instalação e reinicialização do IntelliJ, clique em New Project, escolha a opção Azure Functions no menu lateral esquerdo, escolha o SDK do Java 11 e escolha o tipo da função, para a implementação de hoje devemos escolher o tipo Http Trigger e clique em Next.
Na próxima página vamos escolher o Maven, porém é possível escolher o Gradle também, entretanto existem algumas particularidades na implementação utilizando o Gradle que não abordaremos nesse post.
Para o restante das informações, sinta-se livre para nomear do jeito que desejar, no nosso caso deixarei a nomenclatura padrão.
Nessa última pagina, é necessário nomear o nosso projeto e também definir a localização do projeto dentro do seu computador.
Finalizado toda essa configuração inicial, uma implementação básica de uma função com uma trigger HTTP será exibida, sendo suficiente para a nossa demonstração.
Assim como no .NET, no Java temos um template básico de função no qual recebe uma requisição HTTP GET ou POST e retorna uma informação. Perceba que nessa implementação, o nosso código está esperando alguma informação vindo da query string, caso encontre essa informação uma mensagem é retornada, caso não encontrada a informação um outro tipo de mensagem é retornado informando para você passar algum parâmetro via query string.
Com a nossa função basicamente pronta, vamos para a execução local, porém é necessário realizar a criação de um profile de execução. Para isso, clique na opção Current File no topo do IntelliJ à direita e em Edit Configurations.
Uma nova página será exibida sem qualquer tipo de configuração, para criar uma nova configuração clique em + no canto superior direito e escolha a opção Azure Functions.
Na próxima tela é onde configuramos a execução da nossa aplicação e algumas informações devem ser preenchidas conforme demonstrado na imagem abaixo.
Name: Nome dado para a nossa configuração/profile.
Module: Definimos a aplicação que será executada.
Function CLI: É o caminho do diretório onde o Azure Functions Core Tools foi instalado.
App Settings: Definição das variáveis de configuração da nossa função/aplicação, por padrão as variáveis FUNCTIONS_WORKER_RUNTIME e AzureWebJobsStorage já devem estar definidas, precisamos apenas adicionar a variável JAVA_HOME e o seu valor será o caminho do diretório do Java SDK em nossa máquina. Na nossa implementação devemos informar o caminho do Java 11.
Feito isso, finalizamos a nossa configuração e estamos prontos para a execução. Clique no ícone de execução e quando a função estiver pronta e rodando, uma URL será exibida.
Com isso temos a nossa função sendo executada localmente e sem muitas complicações. Caso deseje realizar uma requisição HTTP para a função, utilize a URL fornecida sendo opcional parâmetro “name” da query string.
Especificando o versão do Java para deployment
Podemos controlar a versão do Java para implantação no Azure através do arquivo pom.xml utilizando as tags Java.version e JavaVersion. As versões suportadas para deployment são o Java 8 e 11 e os valores possíveis para essa tag estão exibidos na imagem abaixo.
Em nossa implementação, o pom.xml está definido para a utilização do Java 11.
Implantação no Azure
Com a função implementada e sendo executada corretamente, vamos entrar na parte do deployment.
Para iniciar o deployment da nossa função, no IntelliJ escolha a opção Tools -> Azure ->Azure Sign In para realizar a configuração da sua conta do Azure no IntelliJ.
Um nova tela com diferentes opções de autenticação será exibida, vamos escolher a opção OAuth 2.0 para realizar a autenticação via navegador.
Com a autenticação finalizada, precisamos selecionar a subscription da nossa conta do Azure que vamos utilizar para o deploy.
Feito isso, selecione a opção Azure Explorer no menu lateral esquerdo, faça a expansão da opção Azure, em seguida clique com o botão direito na opção Function App e por fim clique em + Create para realizar a criação de uma função no Azure.
Na tela de criação de uma nova Azure Functions, devemos fornecer o nome da nossa função que pode ser diferente do nome do nosso projeto e escolher a plataforma de execução, nesse caso escolheremos o Windows-Java 11-Java SE, por fim clique em OK para iniciar o processo de criação.
Finalizada a criação do nosso Azure Functions, vamos agora realizar finalmente o deploy da nossa função.
Na opção do Azure Functions que acabamos de criar e que representa sua instância sendo executada, clique com o botão direito e selecione a opção Deploy.
Na tela de deploy no Azure, não vamos alterar nenhuma informação e não vamos passar nenhuma variável adicional, pois o Azure configura tudo automaticamente, porém caso sua função necessite utilizar alguma variável específica, é so adicionar essa variável na parte de App Settings. Ao final, clique na opção Run para iniciar o deploy da função.
Após a finalização do deploy da função, uma URL é disponibilizada para interação com a função que está sendo executada no Azure.
Com isso finalizamos a implementação de uma Azure Functions utilizando o Java e realizamos o deploy via IntelliJ dessa função utilizando o plugin Azure Toolkit for IntelliJ.
E ai, gostou desse post? Quer conversar um pouco mais sobre Azure Functions com Java? Deixe um comentário com suas dúvidas e idéias ou entre em contato comigo através do LinkedIn.
GitHub: reniciuspagotto/azure-functions-java-intellij (github.com)
Referências
Java JDKs support for Azure development | Microsoft Learn
https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-java