Tutorial: Criar um aplicativo Web JBoss com o Serviço de Aplicativo do Azure no Linux e MySQL
Este tutorial mostra como criar, configurar e implantar um aplicativo JBoss seguro no Serviço de Aplicativo do Azure que se conecta a um banco de dados MySQL (usando Banco de Dados do Azure para MySQL). O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web com aplicação de patch automática altamente escalonável que pode implantar facilmente aplicativos no Windows ou no Linux. Quando você terminar, terá um aplicativo JBoss em execução no Serviço de Aplicativo do Azure no Linux.
Neste tutorial, você aprenderá a:
- Crie uma arquitetura segura por padrão para o Serviço de Aplicativo do Azure e o Servidor Flexível do Banco de Dados do Azure para MySQL.
- Conectividade de banco de dados segura usando uma cadeia de conexão sem senha.
- Verifique as fontes de dados do JBoss no Serviço de Aplicativo usando a CLI do JBoss.
- Implante um aplicativo de exemplo do JBoss no Serviço de Aplicativo a partir de um repositório do GitHub.
- Acesse as configurações de aplicativo do Serviço de Aplicativo no código do aplicativo.
- Faça atualizações e reimplante o código do aplicativo.
- Transmita logs de diagnóstico do Serviço de Aplicativo.
- Gerencie o aplicativo no portal do Azure.
- Provisione a mesma arquitetura e implante usando o Azure Developer CLI.
- Otimize seu fluxo de trabalho de desenvolvimento com o GitHub Codespaces e o GitHub Copilot.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Se você ainda não tem uma conta do Azure, crie-a gratuitamente.
- Uma conta do GitHub. você também pode obter uma gratuitamente.
- Conhecimento de Java com desenvolvimento do JBoss.
- (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma avaliação gratuita de 30 dias.
- Uma conta do Azure com uma assinatura ativa. Se você ainda não tem uma conta do Azure, crie-a gratuitamente.
- Azure Developer CLI instalada localmente. Você pode seguir as etapas com o Azure Cloud Shell porque ele já tem a Azure Developer CLI instalada.
- Conhecimento de Java com desenvolvimento do JBoss.
- (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma avaliação gratuita de 30 dias.
Ir para o final
Você pode implantar rapidamente o aplicativo de exemplo neste tutorial e vê-lo em execução no Azure. Basta executar os seguintes comandos no Azure Cloud Shell e seguir o prompt:
mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up
1. Execute o exemplo
Primeiro, você configura um aplicativo de exemplo baseado em dados como um ponto de partida. Para sua conveniência, o repositório de amostra inclui uma configuração de contêiner de desenvolvimento. O contêiner de desenvolvimento tem tudo o que você precisa para desenvolver um aplicativo, incluindo o banco de dados, o cache e todas as variáveis de ambiente necessárias para o aplicativo de exemplo. O contêiner de desenvolvimento pode ser executado em um codespace do GitHub, o que significa que você pode executar o exemplo em qualquer computador com um navegador da Web.
Etapa 1: em uma nova janela do navegador:
- Entre em sua conta do GitHub.
- Navegue até https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
- Desmarque Copiar somente a ramificação principal. Você quer todas as ramificações.
- Selecione Criar fork.
Etapa 2: na bifurcação do GitHub:
- Selecione principal> starter-no-infra para a ramificação inicial. Essa ramificação contém apenas o projeto de amostra e nenhuma configuração ou arquivos relacionados ao Azure. Selecione Código>Criar um codespace no starter-no-infra. O codespace leva alguns minutos para ser configurado.
Etapa 3: No terminal do codespace:
- Execute
mvn clean wildfly:run
. - Quando você vir a notificação
Your application running on port 8080 is available.
, aguarde alguns segundos a mais para que o servidor WildFly termine de carregar o aplicativo. Em seguida, selecione Abrir no Navegador. Você deve ver o aplicativo de exemplo em uma nova guia do navegador. Para parar o servidor WildFly, digiteCtrl
+C
.
Dica
Você pode perguntar ao GitHub Copilot sobre esse repositório. Por exemplo:
- @workspace O que esse projeto faz?
- @workspace O que a pasta .devcontainer faz?
Está enfrentando problemas? Confira a seção de Solução de problemas.
2. Criar o Serviço de Aplicativo e o MySQL
Primeiro, você cria os recursos do Azure. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo e o Banco de Dados do Azure para MySQL. Para o processo de criação, você especificará:
- O Nome do aplicativo Web. É usado como parte do nome DNS para o seu aplicativo na forma de
https://<app-name>-<hash>.<region>.azurewebsites.net
. - A Região para executar o aplicativo fisicamente no mundo. Também é usado como parte do nome DNS para o seu aplicativo.
- A pilha de runtime para o aplicativo. É aqui que você seleciona a versão do Java a ser usada para seu aplicativo.
- O plano de hospedagem para o aplicativo. É o tipo de preço que inclui o conjunto de recursos e a capacidade de colocação em escala do seu aplicativo.
- O Grupo de Recursos para o aplicativo. Um grupo de recursos permite agrupar (em um contêiner lógico) todos os recursos necessários do Azure para o aplicativo.
Entre no portal do Azure e siga estas etapas para criar seus recursos do Serviço de Aplicativo do Azure.
Etapa 1: no portal do Azure:
- Na barra de pesquisa superior, digite serviço de aplicativo.
- Selecione o item rotulado Serviço de Aplicativo sob o título Serviços.
- Selecione Criar>Aplicativo Web. Você também pode navegar diretamente para o assistente de criação.
Etapa 2: Na página Criar Aplicativo Web, preencha o formulário da seguinte forma.
- Nome: msdocs-jboss-mysql. Um grupo de recursos chamado msdocs-jboss-mysql_group será gerado para você.
- Pilha de runtime: Java 17.
- Pilha de servidor Web Java: Red Hat JBoss EAP 8. Se você já configurou sua assinatura Red Hat com o Azure, selecione Licença BYO do Red Hat JBoss EAP 8.
- Região: qualquer região do Azure próxima a você.
- Plano do Linux: Crie e use o nome msdocs-jboss-mysql.
- Plano de preços: Premium V3 P0V3. Quando estiver pronto, você poderá escalar verticalmente para um tipo de preço diferente.
- Implantar com seu aplicativo: Selecione Banco de Dados. Banco de Dados do Azure para MySQL - Servidor Flexível é selecionado para você por padrão. É um banco de dados MySQL totalmente gerenciado como serviço no Azure, compatível com as edições mais recentes da comunidade.
- Selecione Examinar + criar.
- Depois de concluir a validação, selecione Criar.
Etapa 3: a implantação leva alguns minutos para ser concluída. Depois que a implantação for concluída, selecione o botão Ir para o recurso. Você é levado diretamente para o aplicativo do Serviço de Aplicativo, mas os seguintes recursos são criados:
- Grupo de recursos: o contêiner para todos os recursos criados.
- Plano do Serviço de Aplicativo: define os recursos de computação para o Serviço de Aplicativo. É criado um plano do Linux na camada Básico.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano de Serviço de Aplicativo.
- Rede virtual: integrada ao aplicativo do Serviço de Aplicativo e isola o tráfego de rede de back-end.
- Servidor flexível do Banco de Dados do Azure para MySQL: acessível somente da rede virtual. Um banco de dados e um usuário são criados para você no servidor.
- Zonas DNS privadas: habilita a resolução de DNS do servidor de banco de dados na rede virtual.
- Pontos de extremidade privados: pontos de extremidade de acesso do servidor de banco de dados na rede virtual.
Está enfrentando problemas? Confira a seção de Solução de problemas.
3. Criar uma conexão sem senha
Nesta etapa, você gerará uma conexão de serviço baseada em identidade gerenciada, que poderá usar posteriormente para criar uma fonte de dados no seu servidor JBoss. Ao usar uma identidade gerenciada para se conectar ao banco de dados MySQL, seu código ficará seguro contra vazamentos acidentais de segredos.
Etapa 1: Criar uma identidade gerenciada.
- Na barra de pesquisa superior, digite identidade gerenciada.
- Selecione o item com a etiqueta Identidades Gerenciadas no título Serviços.
- Selecione Criar.
- Em Grupo de Recursos, selecione msdocs-jboss-mysql_group.
- Em Região, selecione a mesma região que você usou para seu aplicativo Web.
- Em Nome, digite msdocs-jboss-mysql-server-identity.
- Selecione Examinar + criar.
- Selecione Criar.
Etapa 2: Habilitar a autenticação do Microsoft Entra no servidor MySQL.
- Na barra de pesquisa superior, digite msdocs-jboss-mysql-server.
- Selecione o recurso Servidor Flexível do Banco de Dados do Azure para MySQL chamado msdocs-jboss-mysql-server.
- No menu à esquerda, selecione Segurança>Autenticação.
- Em Atribuir acesso a, selecione Apenas autenticação do Microsoft Entra.
- Em Identidade gerenciada atribuída pelo usuário, selecione Selecionar.
- Selecione msdocs-jboss-mysql-server-identity, em seguida, selecione Adicionar. Leva um momento para que a identidade seja atribuída ao servidor MySQL.
- Em Nome do Administrador do Microsoft Entra, selecione Selecionar.
- Encontre sua conta do Azure e selecione-a, em seguida, selecione Selecionar.
- Selecione em Salvar e aguarde a conclusão da operação.
Etapa 3: Adicionar um conector de serviço baseado em identidade gerenciada.
- Na barra de pesquisa superior, digite msdocs-jboss-mysql.
- Selecione o recurso de Serviço de Aplicativo chamado msdocs-jboss-mysql.
- Na página do Serviço de Aplicativo, no menu à esquerda, selecione Configurações > Conector de serviço.
- Selecione Criar.
- Na guia Básico:
- Defina o Tipo de Serviço como DB para servidor flexível do MySQL.
- Defina o Servidor flexível do MySQL como msdocs-jboss-mysql-server.
- Defina o Banco de dados MySQL como msdocs-jboss-mysql-database.
- Defina o Tipo de Cliente como Java.
- Selecione a guia Autenticação.
- Selecione Identidade gerenciada atribuída pelo sistema.
- Selecione a guia Examinar + Criar.
- Quando a validação for concluída, selecione Criar no Cloud Shell e aguarde a conclusão da operação no Cloud Shell.
- Quando você vir o JSON de saída, poderá fechar o Cloud Shell. Além disso, feche o diálogo Criar conexão.
- Selecione Atualizar para mostrar o novo conector de serviço.
Etapa 4: Adicionar plug-ins de autenticação à cadeia de conexão.
- No menu do lado esquerdo, selecione Variáveis de ambiente.
- Selecione AZURE_MYSQL_CONNECTIONSTRING. O campo Valor deve conter um
user
mas nãopassword
. O usuário é uma identidade gerenciada. - O servidor JBoss no seu aplicativo de Serviço de Aplicativo tem os plug-ins de autenticação para autenticar a identidade gerenciada, mas você ainda precisará adicioná-la à cadeia de conexão. Role até o final do valor e acrescente
&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
. - Escolha Aplicar.
- Selecione Aplicar, depois Confirmar.
Está enfrentando problemas? Confira a seção de Solução de problemas.
4. Confirmar fonte de dados JNDI
Se você adicionar uma configuração de aplicativo que contenha uma cadeia de conexão JDBC válida para Oracle, SQL Server, PostgreSQL ou MySQL, o Serviço de Aplicativo adicionará uma fonte de dados JNDI para ela no servidor JBoss. Nesta etapa, você usará a conexão SSH com o contêiner do aplicativo para verificar a fonte de dados JNDI. No processo, você aprenderá como acessar o shell SSH e executar a CLI do JBoss.
Etapa 1: de volta na página Serviço de Aplicativo:
- No menu à esquerda, selecione Ferramentas de Desenvolvimento > SSH.
- Selecione Ir.
Etapa 2: no terminal SSH:
- Execute
$JBOSS_HOME/bin/jboss-cli.sh --connect
. - Na conexão da CLI do JBoss, execute
ls subsystem=datasources/data-source
. Você deve ver a fonte de dados gerada automaticamente chamadaAZURE_MYSQL_CONNECTIONSTRING_DS
. - Obtenha o nome JNDI da fonte de dados com
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. Agora você tem um nome JNDIjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, que pode usar no seu código de aplicativo mais tarde.
Observação
Somente as alterações nos arquivos /home
podem persistir além das reinicializações do aplicativo. Por exemplo, se você editar /opt/eap/standalone/configuration/standalone.xml
ou alterar a configuração do servidor na CLI do JBoss, as alterações não persistirão além de uma reinicialização do aplicativo. Para persistir suas alterações, use um script de inicialização, como demonstrado em Configurar fontes de dados para um aplicativo Tomcat, JBoss ou Java SE no Serviço de Aplicativo do Azure
Está enfrentando problemas? Confira a seção de Solução de problemas.
5. Implantar código de amostra
Nesta etapa, você configurará a implantação do GitHub usando o GitHub Actions. É apenas uma das muitas maneiras de implantar no Serviço de Aplicativo, mas também uma ótima maneira de ter integração contínua em seu processo de implantação. Por padrão, cada git push
em seu repositório GitHub inicia a ação de compilação e implantação.
Como a convenção do JBoss, se você quiser implantar no contexto raiz do JBoss, nomeie seu artefato compilado como ROOT.war.
Etapa 1: De volta à página do Serviço de Aplicativo, no menu à esquerda, selecione Implantação > Centro de Implantação.
Etapa 2: na página Centro de Implantação:
- Em Origem, selecione GitHub. Por padrão, o GitHub Actions é selecionado como o provedor de build.
- Entre em sua conta do GitHub e siga o prompt para autorizar o Azure.
- Em Organização, selecione sua conta.
- Em Repositório, selecione msdocs-jboss-mysql-sample-app.
- Em Ramificação, selecione starter-no-infra. Essa é a mesma ramificação em que você trabalhou com seu aplicativo de exemplo, sem nenhum arquivo ou configuração relacionada ao Azure.
- Para Tipo de autenticação, selecione Identidade atribuída pelo usuário.
- No menu superior, selecione Salvar. O Serviço de Aplicativo confirma um arquivo de fluxo de trabalho no repositório GitHub escolhido, no diretório
.github/workflows
. Por padrão, o centro de implantação cria uma identidade atribuída pelo usuário para que o fluxo de trabalho seja autenticado usando o Microsoft Entra (autenticação OIDC). Para obter opções alternativas de autenticação, consulte Implantar no Serviço de Aplicativo usando o GitHub Actions.
Etapa 3: De volta ao codespace do GitHub da sua bifurcação de exemplo, execute git pull origin starter-no-infra
.
Isso puxa o arquivo de fluxo de trabalho recém-confirmado para o seu codespace. Você pode modificá-lo conforme suas necessidades em .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.
Etapa 4 (Opção 1: com o GitHub Copilot):
- Inicie uma nova sessão de chat clicando no modo de exibição Chat e, em seguida, clicando em +.
- Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?". O Copilot pode fornecer uma explicação sobre a fonte de dados
java:jboss/MySQLDS
e como ela está configurada. - Diga, "A fonte de dados no JBoss no Azure usa o nome JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS." O Copilot pode dar uma sugestão de código semelhante à da Opção 2: sem o GitHub Copilot etapas abaixo e até mesmo dizer para você fazer a alteração na classe. O GitHub Copilot não oferece a mesma resposta todas as vezes; talvez seja necessário fazer mais perguntas para ajustar sua resposta. Para obter dicas, confira O que posso fazer com o GitHub Copilot no meu codespace?
Etapa 4 (Opção 2: sem o GitHub Copilot):
- Abra src/main/resources/META-INF/persistence.xml no explorador. Quando o aplicativo iniciar, ele carregará as configurações do banco de dados neste arquivo.
- Altere o valor de
<jta-data-source>
dejava:jboss/MySQLDS
parajava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, que é a fonte de dados que você encontrou com a CLI do JBoss anteriormente no shell SSH.
Etapa 5:
- Selecione a extensão Controle do código-fonte.
- Na caixa de texto, digite uma mensagem de commit, como
Configure Azure JNDI name
. - Selecione Confirmare confirme com Sim.
- Selecione Sincronizar alterações 1e confirme com OK.
Etapa 6: De volta à página do Centro de Implantação no portal do Azure:
- Selecione Logs. Uma nova execução de implantação já foi iniciada após as alterações confirmadas.
- No item de log da execução da implantação, selecione a entrada Compilar/Implantar Logs com o carimbo de data/hora mais recente.
Etapa 7: você será levado para o repositório do GitHub e verá que a ação do GitHub está em execução. O arquivo do fluxo de trabalho define dois estágios separados, compilar e implantar. Aguarde a execução do GitHub para mostrar um status de Concluído. Ela leva cerca de 5 minutos.
Está enfrentando problemas? Confira a seção de Solução de problemas.
6. Navegar até o aplicativo
Etapa 1: na página Serviço de Aplicativo:
- No menu esquerdo, selecione Visão geral.
- Em Domínio Padrão, selecione a URL do seu aplicativo.
Etapa 2: adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com a conectividade segura do Banco de Dados do Azure para MySQL.
Está enfrentando problemas? Confira a seção de Solução de problemas.
7. Logs de diagnóstico de fluxo
O Serviço de Aplicativo do Azure captura todas as mensagens geradas no console para ajudar você a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo inclui instruções de log padrão do Log4j para demonstrar essa funcionalidade, conforme mostrado no snippet a seguir:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
Na página do Serviço de Aplicativo, no menu à esquerda, selecione Fluxo de Log. Você verá os logs do seu aplicativo, incluindo os logs de plataforma e os logs de dentro do contêiner.
Saiba mais sobre o registro em log em aplicativos Java na série em Habilitar o OpenTelemetry do Azure Monitor para aplicativos.NET, Node.js, Python e Java.
Está enfrentando problemas? Confira a seção de Solução de problemas.
8. Limpar os recursos
Quando tiver terminado, você poderá excluir todos os recursos de sua assinatura do Azure ao excluir o grupo de recursos.
Etapa 1: na barra de pesquisa, na parte superior do portal do Azure:
- Insira o nome do grupo de recursos msdocs-jboss-mysql_group.
- Selecione o grupo de recursos.
Etapa 2: na página Grupo de recursos, selecione Excluir grupo de recursos.
Etapa 3:
- Confirme sua exclusão digitando o nome do grupo de recursos.
- Selecione Excluir.
- Confirme com Excluir novamente.
2. Criar recursos do Azure e implantar um aplicativo de amostra
Nesta etapa, você criará os recursos do Azure e implantará um aplicativo de amostra no Serviço de Aplicativo no Linux. As etapas usadas neste tutorial criam um conjunto de recursos seguros por padrão que incluem o Serviço de Aplicativo e o Banco de Dados do Azure para MySQL.
O contêiner de desenvolvimento já tem a CLI do Desenvolvedor do Azure (AZD).
Na raiz do repositório, execute
azd init
.azd init --template jboss-app-service-mysql-infra
Quando solicitado, dê as seguintes respostas:
Pergunta Resposta Continuar inicializando um aplicativo em ' <your-directory>
'?Y O que você gostaria de fazer com esses arquivos? Manter meus arquivos existentes inalterados Insira um novo nome do ambiente Digite um nome exclusivo. O modelo do AZD usa esse nome como parte do nome DNS do seu aplicativo Web no Azure ( <app-name>-<hash>.azurewebsites.net
). São permitidos caracteres alfanuméricos e hífens.Entre em sua conta do Azure usando o comando
azd auth login
e seguindo o prompt:azd auth login
Crie os recursos necessários do Azure e implante o código do aplicativo com o comando
azd up
. Siga o prompt para selecionar a assinatura e o local desejados para os recursos do Azure.azd up
O comando
azd up
leva cerca de 15 minutos para ser concluído (o cache Redis leva mais tempo). Ele também compila e implanta o código do aplicativo, mas você modificará seu código posteriormente para trabalhar com o Serviço de Aplicativo. Durante a execução, o comando fornece mensagens sobre o processo de provisionamento e implantação, incluindo um link para a implantação no Azure. Quando ele é concluído, o comando também exibe um link para o aplicativo de implantação.Esse modelo do AZD contém arquivos (azure.yaml e o diretório infra) que geram uma arquitetura segura por padrão com os seguintes recursos do Azure:
- Grupo de recursos: o contêiner para todos os recursos criados.
- Plano do Serviço de Aplicativo: define os recursos de computação para o Serviço de Aplicativo. É criado um plano do Linux na camada B1.
- Serviço de Aplicativo: representa seu aplicativo e é executado no plano de Serviço de Aplicativo.
- Rede virtual: integrada ao aplicativo do Serviço de Aplicativo e isola o tráfego de rede de back-end.
- Servidor flexível do Banco de Dados do Azure para MySQL: acessível somente da rede virtual. Um banco de dados é criado para você no servidor.
- Cache do Azure para Redis: acessível somente de dentro da rede virtual.
- Pontos de extremidade privados: acesse os pontos de extremidade para o cofre de chaves e o Cache Redis na rede virtual.
- Zonas DNS privadas: habilite a resolução DNS do cofre de chaves, do servidor de banco de dados e do cache Redis na rede virtual.
- Workspace do Log Analytics: atua como o contêiner de destino para seu aplicativo enviar seus logs, em que também poderá consultar os logs.
- Cofre de chaves: usado para manter a mesma senha do banco de dados ao reimplantar com o AZD.
Quando o comando terminar de criar os recursos e implantar o código do aplicativo pela primeira vez, o aplicativo de exemplo implantado ainda não funciona, pois você deve fazer pequenas alterações para conectá-lo ao banco de dados no Azure.
Está enfrentando problemas? Confira a seção de Solução de problemas.
3. Verificar cadeias de conexão
O modelo do AZD que você usa já gerou as variáveis de conectividade como configurações do aplicativo e as envia para o terminal para sua conveniência. As configurações do aplicativo são uma maneira de manter os segredos de conexão fora do seu repositório de códigos.
Na saída do AZD, localize as configurações do aplicativo
AZURE_MYSQL_CONNECTIONSTRING
. Somente os nomes da configuração são exibidos. Elas têm esta aparência na saída do AZD:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING
AZURE_MYSQL_CONNECTIONSTRING
contém a cadeia de conexão para o banco de dados MySQL no Azure. Você precisa usá-lo em seu código mais tarde.Para sua conveniência, o modelo do AZD mostra o link direto para a página de configurações do aplicativo. Localize o link e abra-o em uma nova guia do navegador.
Se você adicionar uma configuração de aplicativo que contenha uma cadeia de conexão Oracle, SQL Server, PostgreSQL ou MySQL válida, o Serviço de Aplicativo a adicionará como uma fonte de dados JNDI (Java Naming and Directory Interface) no arquivo de context.xml do servidor JBoss.
Está enfrentando problemas? Confira a seção de Solução de problemas.
4. Confirmar fonte de dados JNDI
Nesta etapa, você usará a conexão SSH com o contêiner do aplicativo para verificar a fonte de dados JNDI no servidor JBoss. No processo, você aprenderá a acessar o shell SSH para o contêiner JBoss.
Na saída do AZD, localize a URL da sessão SSH e navegue até ela no navegador. Fica assim na saída:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
No terminal SSH, execute
$JBOSS_HOME/bin/jboss-cli.sh --connect
.Na conexão da CLI do JBoss, execute
ls subsystem=datasources/data-source
. Você deve ver a fonte de dados gerada automaticamente chamadaAZURE_MYSQL_CONNECTIONSTRING_DS
.Obtenha o nome JNDI da fonte de dados com
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. Agora você tem um nome JNDIjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, que pode usar no seu código de aplicativo mais tarde.
Observação
Somente as alterações nos arquivos /home
podem persistir além das reinicializações do aplicativo. Por exemplo, se você editar /opt/eap/standalone/configuration/standalone.xml
ou alterar a configuração do servidor na CLI do JBoss, as alterações não persistirão além de uma reinicialização do aplicativo. Para persistir suas alterações, use um script de inicialização, como demonstrado em Configurar fontes de dados para um aplicativo Tomcat, JBoss ou Java SE no Serviço de Aplicativo do Azure
Está enfrentando problemas? Confira a seção de Solução de problemas.
5. Modificar o código de exemplo do aplicativo e reimplantar
No codespace do GitHub, inicie uma nova sessão de chat clicando no modo de exibição de Chat e clicando em +.
Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?". O Copilot pode fornecer uma explicação sobre a fonte de dados
java:jboss/MySQLDS
e como ela está configurada.Pergunte: "@workspace quero substituir a fonte de dados definida em persistence.xml por uma fonte de dados JNDI existente no JBoss." O Copilot pode fornecer uma sugestão de código semelhante à da Opção 2: sem as etapas do GitHub Copilot abaixo e até mesmo dizer para você fazer a alteração no arquivo persistence.xml.
Abra src/main/resources/META-INF/persistence.xml no explorer e faça a alteração de JNDI sugerida.
O GitHub Copilot não oferece a mesma resposta todas as vezes; talvez seja necessário fazer outras perguntas para ajustar sua resposta. Para obter dicas, confira O que posso fazer com o GitHub Copilot no meu codespace?
No terminal do codespace, execute
azd deploy
.azd deploy
Dica
Você também pode usar azd up
sempre, o que faz tudo azd package
, azd provision
, e azd deploy
.
Para descobrir como o arquivo War é empacotado, você pode executar azd package --debug
sozinho.
Está enfrentando problemas? Confira a seção de Solução de problemas.
6. Navegar até o aplicativo
Na saída do AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL fica assim na saída do AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Adicione algumas tarefas à lista.
Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com a conectividade segura do Banco de Dados do Azure para MySQL.
Está enfrentando problemas? Confira a seção de Solução de problemas.
7. Logs de diagnóstico de fluxo
O Serviço de Aplicativo do Azure pode capturar logs de console para ajudá-lo a diagnosticar problemas com o aplicativo. Por conveniência, o modelo do AZD já habilitou o registro em log ao sistema de arquivos local e está enviando para um workspace do Log Analytics.
O aplicativo de exemplo inclui instruções de log padrão do Log4j para demonstrar essa funcionalidade, conforme mostrado no snippet a seguir:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
Na saída do AZD, localize o link para transmitir logs do Serviço de Aplicativo e navegue até ele no navegador. O link tem esta aparência na saída do AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Saiba mais sobre o registro em log em aplicativos Java na série em Habilitar o OpenTelemetry do Azure Monitor para aplicativos.NET, Node.js, Python e Java.
Está enfrentando problemas? Confira a seção de Solução de problemas.
8. Limpar os recursos
Para excluir todos os recursos do Azure no ambiente de implantação atual, execute azd down
e siga os prompts.
azd down
Solução de problemas
- Vejo o erro 'não autorizado a usar o recurso Traga sua própria licença' no assistente de criação.
- A exibição de implantação do portal para o Servidor Flexível do Banco de Dados do Azure para MySQL mostra um status de Conflito.
- O diálogo Criar conexão mostra um botão Criar no Cloud Shell, mas não está habilitado.
- Meu aplicativo falhou ao iniciar e vejo 'Acesso negado para o usuário... (usando senha: NÃO)' nos logs.
- O aplicativo de exemplo implantado não mostra o aplicativo de lista de tarefas.
- Vejo um erro "A tabela 'Tarefa' já existe" nos logs de diagnóstico.
Vejo o erro 'não autorizado a usar o recurso Traga sua própria licença' no assistente de criação.
Se você vir o erro: The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the application
, isso significa que você selecionou Licença BYO do Red Hat JBoss EAP 7/8 em Pilha de servidor da Web Java, mas não configurou sua conta do Azure no Red Hat Cloud Access ou não tem uma licença JBoss EAP ativa no Red Hat Cloud Access.
A exibição de implantação do portal para o Servidor Flexível do Banco de Dados do Azure para MySQL mostra um status de Conflito.
Dependendo da sua assinatura e da região selecionada, você poderá ver o status de implantação do Servidor Flexível do Banco de Dados do Azure para MySQL como Conflict
, com a seguinte mensagem nos detalhes da operação:
InternalServerError: An unexpected error occured while processing the request.
Esse erro provavelmente é causado por um limite em sua assinatura para a região selecionada. Tente escolher uma região diferente para sua implantação.
O diálogo Criar conexão mostra um botão Criar no Cloud Shell, mas não está habilitado.
Você também pode ver uma mensagem de erro no diálogo: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.
A automação do conector de serviço precisa de acesso à rede para o servidor MySQL. Verifique nas configurações de sistema de rede do recurso do seu servidor MySQL e certifique-se de que Permitir acesso público a esse recurso pela internet usando um endereço IP público esteja selecionado no mínimo. O Conector de Serviço pode assumir a partir daí.
Se você não vir essa caixa de seleção, talvez tenha criado a implantação usando o Assistente de aplicativo da Web + banco de dados em vez disso, e a implantação bloqueia todo o acesso à rede pública ao servidor MySQL. Não há como modificar a configuração. Como o contêiner Linux do aplicativo pode acessar o MySQL através da integração com a rede virtual, você pode instalar a CLI do Azure na sessão SSH do aplicativo e executar os comandos do Cloud Shell fornecidos lá.
O aplicativo de amostra implantado não exibe o aplicativo de lista de tarefas.
Se você vir a página inicial do JBoss em vez do aplicativo de lista de tarefas, o Serviço de Aplicativo provavelmente ainda estará carregando o contêiner atualizado da sua implantação de código mais recente. Aguarde alguns minutos e atualize a página.
Meu aplicativo falhou ao iniciar e vejo 'Acesso negado para o usuário... (usando senha: NÃO)' nos logs.
Esse erro é provavelmente porque você não adicionou o plug-in de autenticação sem senha à cadeia de conexão (veja o código de exemplo Java para Integrar o Banco de Dados do Azure para MySQL com o Conector de Serviço). Altere a cadeia de conexão MySQL seguindo as instruções em 3. Criar uma conexão sem senha.
Vejo um erro "A tabela 'Tarefa' já existe" nos logs de diagnóstico.
Você pode ignorar este erro de Hibernação porque ele indica que o código do aplicativo está conectado ao banco de dados MySQL. O aplicativo está configurado para criar as tabelas necessárias quando iniciar (consulte src/main/resources/META-INF/persistence.xml). Quando o aplicativo iniciar pela primeira vez, ele deverá criar as tabelas com sucesso, mas em reinicializações subsequentes, você verá esse erro porque as tabelas já existem.
Perguntas frequentes
- Quanto custa essa configuração?
- Como me conectar ao servidor MySQL por trás da rede virtual com outras ferramentas?
- Como fazer para obter um token de acesso válido para a conexão MySQL usando a autenticação do Microsoft Entra?
- Como o desenvolvimento de aplicativos local funciona com o GitHub Actions?
- Não tenho permissões para criar uma identidade atribuída pelo usuário
- O que posso fazer com o GitHub Copilot no meu codespace?
Quanto custa essa configuração?
O preço dos recursos criados são os seguintes:
- O plano do Serviço de Aplicativo é criado na transferência P0v3 e pode ser dimensionado para cima ou para baixo. Confira Preço do Serviço de Aplicativo.
- O servidor flexível MySQL é criado na transferência D2ds e pode ser dimensionado para cima ou para baixo. Veja os preços do Banco de Dados do Azure para MySQL.
- O Cache do Azure para Redis é criado na camada Básico com o tamanho mínimo do cache. Há um pequeno custo associado a essa camada. Você pode dimensioná-la para níveis de desempenho mais altos para maior disponibilidade, clustering e outros recursos. Consulte Preço do Cache do Azure para Redis.
- A rede virtual não incorre em cobrança, a menos que você configure uma funcionalidade extra, como emparelhamento. Consulte os Preços da Rede Virtual do Azure.
- A zona DNS privada incorre em uma pequena cobrança. Consulte os Preços do DNS do Azure.
Como me conectar ao servidor MySQL por trás da rede virtual com outras ferramentas?
Neste tutorial, o aplicativo do Serviço de Aplicativo já tem conectividade de rede com o servidor MySQL e pode se autenticar com o Microsoft Entra usando a respectiva identidade gerenciada atribuída pelo sistema. Você pode se conectar ao MySQL diretamente de dentro do contêiner do aplicativo executando os seguintes comandos na sessão SSH (obtenha seus valores <server>
, <user>
e <database>
da configuração do aplicativo AZURE_MYSQL_CONNECTIONSTRING
):
apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`
Algumas considerações:
- As ferramentas instaladas na sessão SSH não persistem nas reinicializações do aplicativo.
- Se você tiver seguido as etapas do portal e configurado o MySQL usando o usuário do Microsoft Entra como administrador, poderá se conectar ao MySQL usando o usuário do Microsoft Entra.
- Para se conectar a partir de uma ferramenta de área de trabalho como o MySQL Workbench, seu computador precisa estar dentro da rede virtual, como uma VM do Azure implantada na mesma rede virtual. Você também precisa configurar a autenticação separadamente, com uma identidade gerenciada ou com um usuário do Microsoft Entra.
- Para se conectar a partir de um computador em uma rede local que tenha uma conexão VPN site a site com a rede virtual do Azure, você não pode configurar a autenticação com uma identidade gerenciada, mas pode configurar a autenticação usando um usuário do Microsoft Entra.
- Você também pode integrar o Azure Cloud Shell e se conectar usando a CLI do Azure ou a CLI do MySQL. Para autenticar, você pode configurar um usuário do Microsoft Entra.
Como fazer para obter um token de acesso válido para a conexão MySQL usando a autenticação do Microsoft Entra?
Para um usuário do Microsoft Entra, uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário autorizada a acessar o banco de dados MySQL, a CLI do Azure pode ajudar você a gerar um token de acesso. No caso de uma identidade gerenciada, a identidade precisa ser configurada no aplicativo do Serviço de Aplicativo ou na VM em que você executa a CLI do Azure.
# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>
# Get an access token
az account get-access-token --resource-type oss-rdbms
Se desejar, você também pode usar o comando az mysql flexible-server connect da CLI do Azure para se conectar ao MySQL. Quando solicitado, use o token de acesso como a senha.
az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive
Para saber mais, veja:
- Como usar identidades gerenciadas para o Serviço de Aplicativo e o Azure Functions
- Autenticar no Azure usando a CLI do Azure
- Conecte-se ao Servidor Flexível do Banco de Dados do Azure para MySQL usando o Microsoft Entra ID
Como o desenvolvimento de aplicativos local funciona com o GitHub Actions?
Usando como exemplo o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo, cada git push
inicia uma nova compilação e execução de implantação. A partir de um clone local do repositório do GitHub, você faz as atualizações desejadas e efetua push para o GitHub. Por exemplo:
git add .
git commit -m "<some-message>"
git push origin starter-no-infra
Não tenho permissões para criar uma identidade atribuída pelo usuário
Consulte Configurar a implantação do GitHub Actions no Centro de Implantação.
O que posso fazer com o GitHub Copilot em meu codespace?
Você deve ter percebido que o modo de exibição de chat do GitHub Copilot já estava lá quando você criou o codespace. Para sua conveniência, incluímos a extensão de chat do GitHub Copilot na definição de contêiner (confira .devcontainer/devcontainer.json). No entanto, você precisa de uma conta do GitHub Copilot (avaliação gratuita de 30 dias disponível).
Algumas dicas para você ao falar com o GitHub Copilot:
- Em uma única sessão de chat, as perguntas e respostas se baseiam umas nas outras e você pode ajustar suas perguntas para ajustar a resposta que receber.
- Por padrão, o GitHub Copilot não tem acesso a nenhum arquivo em seu repositório. Para fazer perguntas sobre um arquivo, abra o arquivo no editor primeiro.
- Para permitir que o GitHub Copilot tenha acesso a todos os arquivos no repositório ao preparar suas respostas, comece sua pergunta com
@workspace
. Para obter mais informações, consulte Use the @workspace agent. - Na sessão de chat, o GitHub Copilot pode sugerir alterações e (com
@workspace
) até mesmo onde fazer as alterações, mas não tem permissão para fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.
Veja algumas outras coisas que você pode dizer para ajustar a resposta que você recebe:
- Altere esse código para usar a fonte de dados jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
- Algumas importações em seu código estão usando javax, mas eu tenho um aplicativo Jakarta.
- Quero que esse código seja executado somente se a variável de ambiente AZURE_MYSQL_CONNECTIONSTRING estiver definida.
- Quero que esse código seja executado somente no Serviço de Aplicativo do Azure e não localmente.
Próximas etapas
Saiba mais sobre como executar aplicativos Java no Serviço de Aplicativo no guia do desenvolvedor.
Saiba como proteger seu aplicativo com um domínio e um certificado personalizados.