Partilhar via


Tutorial: Criar um aplicativo Web JBoss com o Serviço de Aplicativo do Azure no Linux e no 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 o Banco de Dados do Azure para MySQL). O Serviço de Aplicativo do Azure é um serviço de hospedagem na Web altamente escalável, auto-corrigido que pode implantar facilmente aplicativos no Windows ou Linux. Quando terminar, você terá um aplicativo JBoss em execução no Serviço de Aplicativo do Azure no Linux.

Captura de tela do aplicativo JBoss armazenando dados no MySQL.

Neste tutorial, irá aprender a:

  • Crie uma arquitetura segura por padrão para o Serviço de Aplicativo do Azure e o Banco de Dados do Azure para o servidor flexível MySQL.
  • Proteja a conectividade do banco de dados 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 JBoss no Serviço de Aplicativo a partir de um repositório GitHub.
  • Acesse as configurações do aplicativo 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 a CLI do Azure Developer.
  • Otimize seu fluxo de trabalho de desenvolvimento com o GitHub Codespaces e o GitHub Copilot.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
  • Uma conta GitHub. Você também pode obter um gratuitamente.
  • Conhecimento de Java com desenvolvimento JBoss.
  • (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.
  • Uma conta do Azure com uma subscrição ativa. Se não tiver uma conta do Azure, pode criar uma gratuitamente.
  • CLI do Desenvolvedor do Azure instalada. Você pode seguir as etapas com o Azure Cloud Shell porque ele já tem a CLI do Desenvolvedor do Azure instalada.
  • Conhecimento de Java com desenvolvimento JBoss.
  • (Opcional) Para experimentar o GitHub Copilot, uma conta do GitHub Copilot. Está disponível uma versão experimental gratuita de 30 dias.

Saltar para o fim

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 controlado por dados de exemplo como ponto de partida. Para sua conveniência, o repositório de exemplo 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 espaço de código GitHub, o que significa que você pode executar o exemplo em qualquer computador com um navegador da Web.

Passo 1: Em uma nova janela do navegador:

  1. Iniciar sessão na sua conta do GitHub.
  2. Navegar para https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
  3. Desmarque Copiar somente a ramificação principal. Você quer todos os ramos.
  4. Selecione Criar bifurcação.

Uma captura de tela mostrando como criar uma bifurcação do repositório GitHub de exemplo.

Passo 2: Na bifurcação do GitHub:

  1. Selecione o starter-no-infra principal>para o ramo inicial. Esta ramificação contém apenas o projeto de exemplo e nenhum arquivo ou configuração relacionados ao Azure. Selecione Code>Create codespace on starter-no-infra. O codespace leva alguns minutos para ser configurado.

Uma captura de tela mostrando como criar um espaço de código no GitHub.

Passo 3: No terminal codespace:

  1. Execute o mvn clean wildfly:run.
  2. Quando vir a notificação Your application running on port 8080 is available., aguarde mais alguns segundos para que o servidor WildFly termine de carregar a aplicação. Em seguida, selecione Abrir no navegador. Você deve ver o aplicativo de exemplo em uma nova guia do navegador. Para parar o servidor WildFly, digite Ctrl+C.

Uma captura de tela mostrando como executar o aplicativo de exemplo dentro do espaço de código GitHub.

Gorjeta

Você pode perguntar ao GitHub Copilot sobre este repositório. Por exemplo:

  • @workspace O que faz este projeto?
  • @workspace O que faz a pasta .devcontainer?

Tem problemas? Verifique a seção Solução de problemas.

2. Criar Serviço de Aplicativo e 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ê especifica:

  • O Nome do aplicativo Web. Ele é usado como parte do nome DNS do seu aplicativo na forma de https://<app-name>-<hash>.<region>.azurewebsites.net.
  • A região para executar o aplicativo fisicamente no mundo. Ele também é usado como parte do nome DNS do seu aplicativo.
  • A pilha de tempo de execução para o aplicativo. É onde você seleciona a versão do Java a ser usada para seu aplicativo.
  • O plano de hospedagem para o aplicativo. É a camada de preço que inclui o conjunto de recursos e a capacidade de dimensionamento para seu aplicativo.
  • O Grupo de Recursos para o aplicativo. Um grupo de recursos permite agrupar (em um contêiner lógico) todos os recursos do Azure necessários 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:

  1. Na barra de pesquisa superior, digite serviço de aplicativo.
  2. Selecione o item rotulado Serviço de Aplicativo sob o título Serviços.
  3. Selecione Criar>aplicativo Web. Você também pode navegar diretamente para o assistente de criação.

Uma captura de tela mostrando como usar a caixa de pesquisa na barra de ferramentas superior para localizar o assistente de criação de aplicativo Web.

Etapa 2: Na página Criar aplicativo Web, preencha o formulário da seguinte maneira.

  1. Nome: msdocs-jboss-mysql. Um grupo de recursos chamado msdocs-jboss-mysql_group será gerado para você.
  2. Pilha de tempo de execução: Java 17.
  3. Pilha de servidores web Java: Red Hat JBoss EAP 8. Se você já configurou sua assinatura Red Hat com o Azure, selecione Red Hat JBoss EAP 8 BYO License.
  4. Região: qualquer região do Azure perto de você.
  5. Plano Linux: Crie novos e use o nome msdocs-jboss-mysql.
  6. Plano de preços: Premium V3 P0V3. Quando estiver pronto, você poderá escalar para um nível de preço diferente.
  7. Implantar com seu aplicativo: selecione Banco de dados. O Banco de Dados do Azure para MySQL - Servidor Flexível é selecionado para você por padrão. É um banco de dados MySQL totalmente gerenciado como um serviço no Azure, compatível com as edições mais recentes da comunidade.
  8. Selecione Rever + criar.
  9. Após a conclusão da validação, selecione Criar.

Uma captura de tela mostrando como configurar um novo aplicativo e banco de dados no assistente de Aplicativo Web.

Etapa 3: A implantação leva alguns minutos para ser concluída. Quando 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. Um plano Linux na camada Basic é criado.
  • Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
  • Rede virtual: integrada ao aplicativo Serviço de Aplicativo e isola o tráfego de rede back-end.
  • Banco de Dados do Azure para servidor flexível MySQL: Acessível apenas a partir da rede virtual. Um banco de dados e um usuário são criados para você no servidor.
  • Zonas DNS privadas: habilite a resolução DNS do servidor de banco de dados na rede virtual.
  • Pontos de extremidade privados: pontos de extremidade de acesso para o servidor de banco de dados na rede virtual.

Uma captura de tela mostrando o processo de implantação concluído.

Tem problemas? Verifique a seção Solução de problemas.

3. Crie uma conexão sem senha

Nesta etapa, você gera uma conexão de serviço baseada em identidade gerenciada, que pode ser usada posteriormente para criar uma fonte de dados no servidor JBoss. Usando uma identidade gerenciada para se conectar ao banco de dados MySQL, seu código está protegido contra vazamento acidental de segredos.

Etapa 1: crie uma identidade gerenciada.

  1. Na barra de pesquisa superior, digite identidade gerenciada.
  2. Selecione o item rotulado Identidades Gerenciadas no título Serviços.
  3. Selecione Criar.
  4. Em Grupo de recursos, selecione msdocs-jboss-mysql_group.
  5. Em Região, selecione a mesma região que você usou para seu aplicativo Web.
  6. Em Nome, digite msdocs-jboss-mysql-server-identity.
  7. Selecione Rever + criar.
  8. Selecione Criar.

Uma captura de tela mostrando como configurar uma nova identidade gerenciada.

Passo 2: Habilite a autenticação do Microsoft Entra no servidor MySQL.

  1. Na barra de pesquisa superior, digite msdocs-jboss-mysql-server.
  2. Selecione o recurso de servidor flexível do Banco de Dados do Azure para MySQL chamado msdocs-jboss-mysql-server.
  3. No menu à esquerda, selecione Autenticação de Segurança>.
  4. Em Atribuir acesso a, selecione Somente autenticação do Microsoft Entra.
  5. Em Identidade gerenciada atribuída ao usuário, selecione Selecionar.
  6. Selecione msdocs-jboss-mysql-server-identity e, em seguida, selecione Adicionar. Leva um momento para que a identidade seja atribuída ao servidor MySQL.
  7. Em Nome do administrador do Microsoft Entra, selecione Selecionar.
  8. Localize a sua conta do Azure e selecione-a e, em seguida, selecione Selecionar.
  9. Selecione Salvar e aguarde a conclusão da operação.

Uma captura de tela mostrando como configurar a autenticação do Microsoft Entra para o Banco de Dados do Azure para o servidor flexível MySQL.

Etapa 3: Adicione um conector de serviço gerenciado baseado em identidade.

  1. Na barra de pesquisa superior, digite msdocs-jboss-mysql.
  2. Selecione o recurso do Serviço de Aplicativo chamado msdocs-jboss-mysql.
  3. Na página Serviço de Aplicativo, no menu à esquerda, selecione Configurações > do Conector de Serviço.
  4. Selecione Criar.
  5. Na guia Noções básicas:
  6. Defina Tipo de serviço como DB para servidor flexível MySQL.
  7. Defina o servidor flexível MySQL para msdocs-jboss-mysql-server.
  8. Defina o banco de dados MySQL como msdocs-jboss-mysql-database.
  9. Defina Tipo de cliente como Java.
  10. Selecione a guia Autenticação .
  11. Selecione Identidade gerenciada atribuída ao sistema.
  12. Selecione a guia Revisão + Criar .
  13. Quando a validação for concluída, selecione Criar no Cloud Shell e aguarde a conclusão da operação no Cloud Shell.
  14. Quando você vir o JSON de saída, poderá fechar o Cloud Shell. Além disso, feche a caixa de diálogo Criar conexão .
  15. Selecione Atualizar para mostrar o novo conector de serviço.

Uma captura de tela mostrando um conector de serviço completamente configurado, pronto para ser criado com o shell da nuvem.

Etapa 4: Adicione plug-ins de autenticação à cadeia de conexão.

  1. No menu à esquerda, selecione Variáveis de ambiente.
  2. Selecione AZURE_MYSQL_CONNECTIONSTRING. O campo Valor deve conter um user mas não password. O usuário é uma identidade gerenciada.
  3. O servidor JBoss em seu aplicativo do Serviço de Aplicativo tem os plug-ins de autenticação que autenticam a identidade gerenciada, mas você ainda precisa adicioná-la à cadeia de conexão. Desloque-se para o final do valor e acrescente &defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin.
  4. Selecione Aplicar.
  5. Selecione Aplicar e, em seguida , Confirmar.

Uma captura de tela mostrando como alterar o valor da variável de ambiente MySQL no Azure.

Tem problemas? Verifique a seção Solução de problemas.

4. Confirme a 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 Java Naming and Directory Interface (JNDI) para ela no servidor JBoss. Nesta etapa, você usa a conexão SSH com o contêiner do aplicativo para verificar a fonte de dados JNDI. No processo, você aprende como acessar o shell SSH e executar a CLI do JBoss.

Etapa 1: De volta à página do Serviço de Aplicativo:

  1. No menu à esquerda, selecione Ferramentas > de Desenvolvimento SSH.
  2. Selecione Ir.

Uma captura de tela mostrando como abrir o shell SSH para seu aplicativo no portal do Azure.

Passo 2: No terminal SSH:

  1. Execute o $JBOSS_HOME/bin/jboss-cli.sh --connect.
  2. Na conexão JBoss CLI, execute ls subsystem=datasources/data-source. Você deve ver a fonte de dados gerada automaticamente chamada AZURE_MYSQL_CONNECTIONSTRING_DS.
  3. 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 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI , que você pode usar no código do aplicativo mais tarde.

Uma captura de tela mostrando os comandos da CLI do JBoss a serem executados no shell SSH e sua saída.

Nota

Somente as alterações nos /home arquivos 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 após a reinicialização do aplicativo. Para persistir as 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

Tem problemas? Verifique a seção Solução de problemas.

5. Implantar código de exemplo

Nesta etapa, você configura a implantação do GitHub usando as Ações do GitHub. É 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 um no repositório do GitHub inicia a ação de compilação e implantação.

Como a convenção JBoss, se você quiser implantar no contexto raiz do JBoss, nomeie seu artefato construído como ROOT.war.

Etapa 1: De volta à página Serviço de Aplicativo, no menu à esquerda, selecione Centro de Implantação de Implantação>.

Uma captura de tela mostrando como abrir o centro de implantação no Serviço de Aplicativo.

Etapa 2: Na página Centro de Implantação:

  1. Em Source, selecione GitHub. Por padrão, as Ações do GitHub são selecionadas como o provedor de compilação.
  2. Entre na sua conta do GitHub e siga o prompt para autorizar o Azure.
  3. Em Organização, selecione sua conta.
  4. No Repositório, selecione msdocs-jboss-mysql-sample-app.
  5. Em Ramo, 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.
  6. Em Tipo de autenticação, selecione Identidade atribuída pelo usuário.
  7. No menu superior, selecione Salvar. O Serviço de Aplicativo confirma um arquivo de fluxo de trabalho no repositório GitHub escolhido, no .github/workflows diretório. 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 de autenticação alternativas, consulte Implantar no Serviço de Aplicativo usando ações do GitHub.

Uma captura de tela mostrando como configurar o CI/CD usando as Ações do GitHub.

Passo 3: De volta ao espaço de código do GitHub da sua bifurcação de exemplo, execute git pull origin starter-no-infra. Isso extrai o arquivo de fluxo de trabalho recém-confirmado para seu espaço de código. Você pode modificá-lo de acordo com suas necessidades em .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.

Uma captura de tela mostrando o git pull dentro de um espaço de código do GitHub.

Passo 4 (Opção 1: com o GitHub Copilot):

  1. Inicie uma nova sessão de chat clicando na vista Chat e, em seguida, clicando em +.
  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?" O Copilot pode fornecer algumas explicações sobre a java:jboss/MySQLDS fonte de dados e como ela é configurada.
  3. Diga: "A fonte de dados no JBoss no Azure usa o nome JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS." O Copilot pode lhe dar uma sugestão de código semelhante à da Opção 2: sem as etapas do Copilot do GitHub abaixo e até mesmo dizer para você fazer a alteração na classe. O GitHub Copilot não lhe dá sempre a mesma resposta, talvez seja necessário fazer mais perguntas para ajustar a resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.

Uma captura de tela mostrando como fazer uma pergunta em uma nova sessão de bate-papo do GitHub Copilot.

Passo 4 (Opção 2: sem o Copilot do GitHub):

  1. Abra src/main/resources/META-INF/persistence.xml no explorador. Quando o aplicativo é iniciado, ele carrega as configurações do banco de dados nesse arquivo.
  2. Altere o valor de de de java:jboss/MySQLDS para java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, que é a fonte de <jta-data-source> dados encontrada com a CLI do JBoss anteriormente no shell SSH.

Uma captura de tela mostrando um espaço de código do GitHub e o arquivo ContextListener.java aberto.

Passo 5:

  1. Selecione a extensão Controle do código-fonte.
  2. Na caixa de texto, digite uma mensagem de confirmação como Configure Azure JNDI name.
  3. Selecione Confirmar e, em seguida, confirme com Sim.
  4. Selecione Sincronizar alterações 1 e, em seguida, confirme com OK.

Uma captura de tela mostrando as alterações que estão sendo confirmadas e enviadas por push para o GitHub.

Etapa 6: De volta à página Centro de Implantação no portal do Azure:

  1. Selecione Registos. Uma nova execução de implantação já foi iniciada a partir de suas alterações confirmadas.
  2. No item de log para a execução da implantação, selecione a entrada Compilar/Implantar Logs com o carimbo de data/hora mais recente.

Uma captura de tela mostrando como abrir logs de implantação no centro de implantação.

Etapa 7: Você é levado ao repositório do GitHub e vê que a ação do GitHub está em execução. O arquivo de fluxo de trabalho define dois estágios separados, build e deploy. Aguarde até que a execução do GitHub mostre um status de Concluído. Demora cerca de 5 minutos.

Uma captura de tela mostrando uma execução do GitHub em andamento.

Tem problemas? Verifique a seção Solução de problemas.

6. Navegue até o aplicativo

Etapa 1: Na página Serviço de Aplicativo:

  1. No menu à esquerda, selecione Visão geral.
  2. Em Domínio padrão, selecione a URL do seu aplicativo.

Uma captura de tela mostrando como iniciar um Serviço de Aplicativo a partir do portal do Azure.

Passo 2: Adicione algumas tarefas à lista. Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com conectividade segura ao Banco de Dados do Azure para MySQL.

Uma captura de tela do aplicativo Web JBoss com o MySQL em execução no Azure.

Tem problemas? Verifique a seção Solução de problemas.

7. Logs de diagnóstico de fluxo

O Serviço de Aplicativo do Azure captura todas as mensagens enviadas para o console para ajudá-lo a diagnosticar problemas com seu aplicativo. O aplicativo de exemplo inclui instruções de log Log4j padrão para demonstrar essa capacidade, conforme mostrado no trecho 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 Serviço de Aplicativo, no menu à esquerda, selecione Fluxo de log. Você vê os logs do seu aplicativo, incluindo logs da plataforma e logs de dentro do contêiner.

Uma captura de tela mostrando como exibir o fluxo de log no portal do Azure.

Saiba mais sobre como fazer logon em aplicativos Java na série em Habilitar o Azure Monitor OpenTelemetry para aplicativos .NET, Node.js, Python e Java.

Tem problemas? Verifique a seção Solução de problemas.

8. Limpar os recursos

Quando terminar, pode eliminar todos os recursos da sua subscrição do Azure eliminando o grupo de recursos.

Etapa 1: Na barra de pesquisa na parte superior do portal do Azure:

  1. Digite o nome do grupo de recursos msdocs-jboss-mysql_group.
  2. Selecione o grupo de recursos.

Uma captura de tela mostrando como pesquisar e navegar para um grupo de recursos no portal do Azure.

Etapa 2: na página do grupo de recursos, selecione Excluir grupo de recursos.

Uma captura de tela mostrando o local do botão **Excluir Grupo de Recursos** no portal do Azure.

Passo 3:

  1. Confirme sua exclusão digitando o nome do grupo de recursos.
  2. Selecione Eliminar.
  3. Confirme com Excluir novamente.

Uma captura de tela da caixa de diálogo de confirmação para excluir um grupo de recursos no portal do Azure.

2. Crie recursos do Azure e implante um aplicativo de exemplo

Nesta etapa, você cria os recursos do Azure e implanta um aplicativo de exemplo 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).

  1. A partir da raiz do repositório, execute azd init.

    azd init --template jboss-app-service-mysql-infra
    
  2. 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 os meus ficheiros existentes inalterados
    Insira um novo nome de ambiente Escreva um nome exclusivo. O modelo 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ífenes.
  3. Entre no Azure executando o azd auth login comando e seguindo o prompt:

    azd auth login
    
  4. Crie os recursos necessários do Azure e implante o código do aplicativo com o azd up comando. Siga o prompt para selecionar a assinatura desejada e o local para os recursos do Azure.

    azd up
    

    O azd up comando 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á o código mais tarde para trabalhar com o Serviço de Aplicativo. Enquanto está em execução, o comando fornece mensagens sobre o processo de provisionamento e implantação, incluindo um link para a implantação no Azure. Quando terminar, o comando também exibirá um link para o aplicativo deploy.

    Este modelo 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. Um plano Linux na camada B1 é criado.
    • Serviço de Aplicativo: representa seu aplicativo e é executado no plano do Serviço de Aplicativo.
    • Rede virtual: integrada ao aplicativo Serviço de Aplicativo e isola o tráfego de rede back-end.
    • Banco de Dados do Azure para servidor flexível MySQL: Acessível apenas a partir da rede virtual. Um banco de dados é criado para você no servidor.
    • Cache do Azure para Redis: acessível apenas a partir da rede virtual.
    • Pontos de extremidade privados: pontos de extremidade de acesso 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.
    • Espaço de trabalho do Log Analytics: atua como o contêiner de destino para seu aplicativo enviar seus logs, onde você também pode consultar os logs.
    • Cofre de chaves: usado para manter a mesma senha do banco de dados quando você reimplanta com o AZD.

    Quando o comando terminar de criar recursos e implantar o código do aplicativo pela primeira vez, o aplicativo de exemplo implantado ainda não funcionará porque você deve fazer pequenas alterações para que ele se conecte ao banco de dados no Azure.

Tem problemas? Verifique a seção Solução de problemas.

3. Verificar cadeias de conexão

O modelo AZD que você usa gerou as variáveis de conectividade para você já 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ódigo.

  1. Na saída AZD, localize a configuração AZURE_MYSQL_CONNECTIONSTRINGdo aplicativo . Somente os nomes das configurações são exibidos. Eles se parecem com isso na saída 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 com o banco de dados MySQL no Azure. Você precisa usá-lo em seu código mais tarde.

  2. Para sua conveniência, o modelo AZD mostra o link direto para a página de configurações do aplicativo. Encontre 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 válida do Oracle, SQL Server, PostgreSQL ou MySQL, o Serviço de Aplicativo a adicionará como uma fonte de dados JNDI (Java Naming and Directory Interface) no arquivo context.xml do servidor JBoss.

Tem problemas? Verifique a seção Solução de problemas.

4. Confirme a fonte de dados JNDI

Nesta etapa, você usa a conexão SSH com o contêiner do aplicativo para verificar a fonte de dados JNDI no servidor JBoss. No processo, você aprende a acessar o shell SSH para o contêiner JBoss.

  1. Na saída AZD, localize o URL da sessão SSH e navegue até ele no navegador. Tem esta aparência na saída:

     Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
     
  2. No terminal SSH, execute $JBOSS_HOME/bin/jboss-cli.sh --connect.

  3. Na conexão JBoss CLI, execute ls subsystem=datasources/data-source. Você deve ver a fonte de dados gerada automaticamente chamada AZURE_MYSQL_CONNECTIONSTRING_DS.

  4. 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 java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI , que você pode usar no código do aplicativo mais tarde.

    Uma captura de tela mostrando os comandos a serem executados no shell SSH e sua saída.

Nota

Somente as alterações nos /home arquivos 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 após a reinicialização do aplicativo. Para persistir as 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

Tem problemas? Verifique a seção Solução de problemas.

5. Modifique o código de exemplo e reimplante

  1. No espaço de código do GitHub, inicie uma nova sessão de chat clicando na vista Chat e, em seguida, clicando em +.

  2. Pergunte: "@workspace Como o aplicativo se conecta ao banco de dados?" O Copilot pode fornecer algumas explicações sobre a java:jboss/MySQLDS fonte de dados e como ela é configurada.

  3. Pergunte: "@workspace quero substituir a fonte de dados definida no persistence.xml por uma fonte de dados JNDI existente no JBoss." O Copilot pode lhe dar uma sugestão de código semelhante à da Opção 2: sem as etapas do Copilot do GitHub abaixo e até mesmo dizer para você fazer a alteração no arquivo persistence.xml .

  4. Abra src/main/resources/META-INF/persistence.xml no explorador e faça a alteração JNDI sugerida.

    O GitHub Copilot não lhe dá a mesma resposta todas as vezes, você pode precisar fazer outras perguntas para ajustar sua resposta. Para obter dicas, consulte O que posso fazer com o GitHub Copilot no meu codespace?.

  5. No terminal codespace, execute azd deploy.

    azd deploy
    

Gorjeta

Você também pode usar azd up sempre, o que faz tudo de azd package, azd provisione azd deploy.

Para descobrir como o arquivo War é empacotado, você pode executar azd package --debug sozinho.

Tem problemas? Verifique a seção Solução de problemas.

6. Navegue até o aplicativo

  1. Na saída AZD, localize a URL do seu aplicativo e navegue até ela no navegador. O URL tem esta aparência na saída AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
     
  2. Adicione algumas tarefas à lista.

    Uma captura de tela do aplicativo Web JBoss com o MySQL em execução no Azure mostrando tarefas.

    Parabéns, você está executando um aplicativo Web no Serviço de Aplicativo do Azure, com conectividade segura ao Banco de Dados do Azure para MySQL.

Tem problemas? Verifique a seção Solução de problemas.

7. Logs de diagnóstico de fluxo

O Serviço de Aplicativo do Azure pode capturar logs do console para ajudá-lo a diagnosticar problemas com seu aplicativo. Por conveniência, o modelo AZD já habilitava o registro no sistema de arquivos local e está enviando os logs para um espaço de trabalho do Log Analytics.

O aplicativo de exemplo inclui instruções de log Log4j padrão para demonstrar essa capacidade, conforme mostrado no trecho 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 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 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 como fazer logon em aplicativos Java na série em Habilitar o Azure Monitor OpenTelemetry para aplicativos .NET, Node.js, Python e Java.

Tem problemas? Verifique a seção 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

Resolução de Problemas

Vejo o erro 'não tem direito a usar o recurso Bring Your Own License' 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 a licença Red Hat JBoss EAP 7/8 BYO na pilha do servidor Web Java, mas não configurou sua conta do Azure no Red Hat Cloud Access ou não tem uma licença ativa do JBoss EAP no Red Hat Cloud Access.

A exibição de implantação do portal do Banco de Dados do Azure para Servidor Flexível MySQL mostra um status de Conflito.

Dependendo da sua assinatura e da região selecionada, você poderá ver o status de implantação do Banco de Dados do Azure para Servidor Flexível MySQL como Conflict, com a seguinte mensagem em Detalhes da operação:

InternalServerError: An unexpected error occured while processing the request.

Este erro é provavelmente causado por um limite na sua subscrição para a região que selecionou. Tente escolher uma região diferente para sua implantação.

A caixa de 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 na caixa de 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. Olhe nas configurações de rede do seu recurso de servidor MySQL e certifique-se de que Permitir acesso público a este recurso através da Internet usando um endereço IP público está selecionado no mínimo. O Service Connector pode levá-lo a partir daí.

Se você não vir essa caixa de seleção, você pode ter criado a implantação usando o assistente Web App + Database em vez disso, e a implantação bloqueia todo o acesso de 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 por meio da integração de rede virtual, você pode instalar a CLI do Azure na sessão SSH do aplicativo e executar os comandos fornecidos do Cloud Shell lá.

O aplicativo de exemplo implantado não mostra 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 está 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 (consulte o código de exemplo Java para Integrar o Banco de Dados do Azure para MySQL com o Service Connector). Altere a cadeia de conexão MySQL seguindo as instruções em 3. Crie uma conexão sem senha.

Vejo um erro "Tabela 'Tarefa' já existe" nos logs de diagnóstico.

Você pode ignorar esse erro de hibernação porque indica que o código do aplicativo está conectado ao banco de dados MySQL. O aplicativo é configurado para criar as tabelas necessárias quando é iniciado (consulte src/main/resources/META-INF/persistence.xml). Quando o aplicativo é iniciado pela primeira vez, ele deve criar as tabelas com êxito, mas em reinicializações subsequentes, você verá esse erro porque as tabelas já existem.

Perguntas mais frequentes

Quanto custa esta configuração?

O preço dos recursos criados é o seguinte:

  • O plano do Serviço de Aplicativo é criado na camada P0v3 e pode ser dimensionado para cima ou para baixo. Consulte Preços do Serviço de Aplicativo.
  • O servidor flexível MySQL é criado na camada D2ds e pode ser escalado para cima ou para baixo. Consulte Banco de Dados do Azure para obter preços do MySQL.
  • O Cache Redis do Azure é criado na camada Básica com o tamanho mínimo do cache. Há um pequeno custo associado a este nível. Você pode dimensioná-lo para níveis de desempenho mais altos para maior disponibilidade, clustering e outros recursos. Consulte Preços 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 Preços da Rede Virtual do Azure.
  • A zona DNS privada incorre em uma pequena cobrança. Consulte Preços do DNS do Azure.

Como faço para 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 sua identidade gerenciada atribuída ao sistema. Você pode se conectar ao MySQL diretamente de dentro do contêiner do aplicativo executando os seguintes comandos na sessão SSH (obtenha <server>seus valores , <user>e <database> da AZURE_MYSQL_CONNECTIONSTRING configuração do aplicativo):

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ê seguiu as etapas do portal e configurou o MySQL usando seu usuário do Microsoft Entra como administrador, você pode 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, sua máquina deve estar dentro da rede virtual, como uma VM do Azure implantada na mesma rede virtual. Você também deve configurar a autenticação separadamente, seja com uma identidade gerenciada ou com um usuário do Microsoft Entra.
  • Para se conectar a partir de uma máquina 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 conectar-se usando a CLI do Azure ou a CLI do MySQL. Para autenticar, você pode configurar um usuário do Microsoft Entra.

Como faço 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 ao sistema ou uma identidade gerenciada atribuída pelo usuário autorizada a acessar o banco de dados MySQL, a CLI do Azure pode ajudá-lo a gerar um token de acesso. No caso de uma identidade gerenciada, a identidade deve 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 Azure CLI para se conectar ao MySQL. Quando solicitado, use o token de acesso como senha.

az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive

Para obter mais informações, consulte:

Como funciona o desenvolvimento de aplicativos locais com o GitHub Actions?

Usando o arquivo de fluxo de trabalho gerado automaticamente do Serviço de Aplicativo como exemplo, cada git push um inicia uma nova compilação e execução de implantação. A partir de um clone local do repositório GitHub, você faz as atualizações desejadas e envia por 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 utilizador

Consulte Configurar a implantação de ações do GitHub a partir do Centro de Implantação.

O que posso fazer com o GitHub Copilot no meu codespace?

Você pode notar que a visualização de bate-papo do GitHub Copilot já estava lá para você quando você criou o espaço de código. Para sua conveniência, incluímos a extensão de chat do GitHub Copilot na definição de contêiner (consulte .devcontainer/devcontainer.json). No entanto, você precisa de uma conta GitHub Copilot (teste gratuito de 30 dias disponível).

Algumas dicas para você quando falar com o GitHub Copilot:

  • Em uma única sessão de bate-papo, as perguntas e respostas se baseiam umas nas outras e você pode ajustar suas perguntas para ajustar a resposta obtida.
  • 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, veja 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 é permitido fazer as alterações para você. Cabe a você adicionar as alterações sugeridas e testá-las.

Aqui estão algumas outras coisas que você pode dizer para ajustar a resposta que obtém:

  • 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 de Jacarta.
  • 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óximos passos

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.