Compartilhar via


Implantar um aplicativo Java com o Open Liberty ou o WebSphere Liberty nos Aplicativos de Contêiner do Azure

Este artigo mostra como executar o Open Liberty ou o WebSphere Liberty nos Aplicativos de Contêiner do Azure. Você faz as seguintes atividades neste artigo:

  • Execute seu aplicativo Java, Java EE, Jakarta EE ou MicroProfile no runtime do Open Liberty ou WebSphere Liberty.
  • Crie a imagem Docker do aplicativo usando imagens de container Liberty.
  • Implante o aplicativo em contêineres nos Aplicativos de Contêiner do Azure.

Para obter mais informações sobre o Open Liberty, consulte a página do projeto Open Liberty. Para mais informações sobre o IBM WebSphere Liberty, consulte a página de produto WebSphere Liberty.

Este artigo destina-se a ajudá-lo a chegar rapidamente à fase de implantação. Antes de acessar a produção, você deve explorar o Ajuste do Liberty.

Se você estiver interessado em fornecer feedback ou trabalhar em estreita colaboração nos seus cenários de migração com a equipe de engenharia que desenvolve o WebSphere em soluções no Azure, preencha esta breve pesquisa sobre a migração do WebSphere e inclua suas informações de contato. A equipe de gerentes de programas, arquitetos e engenheiros entrará em contato prontamente com você para iniciar uma estreita colaboração.

Pré-requisitos

  • Uma assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Prepare um computador local com o sistema operacional semelhante ao Windows ou Unix instalado (por exemplo, Ubuntu, macOS ou Subsistema do Windows para Linux).
  • Instale a CLI do Azure 2.62.0 ou superior para executar comandos da CLI do Azure.
    • Entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Consulte Entrar no Azure com a CLI do Azure para obter outras opções de login.
    • Quando for solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
    • Execute az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute az upgrade.
  • Instale uma implementação do Java SE versão 17 – por exemplo, build do OpenJDK da Microsoft.
  • Instale Maven 3.9.8 ou superior.
  • Verifique se git está instalado.

Entrar no Azure

Entre em sua assinatura do Azure usando o comando az login e siga as instruções na tela.

az login

Nota

Você pode executar a maioria dos comandos da CLI do Azure no PowerShell da mesma forma que no Bash. A diferença existe somente ao usar variáveis. Nas seções a seguir, quando necessário, a diferença é abordada em abas distintas.

Se você tiver vários locatários do Azure associados às suas credenciais do Azure, deverá especificar em qual locatário deseja entrar. Você pode especificar o locatário usando a opção --tenant – por exemplo, az login --tenant contoso.onmicrosoft.com.

Se você tiver várias assinaturas em um único locatário, verifique se a conexão está estabelecida com aquela que você deseja usar, com az account set --subscription <subscription-id>.

Criar um grupo de recursos

Um grupo de recursos do Azure é um grupo lógico no qual os recursos do Azure são implantados e gerenciados.

Crie um grupo de recursos chamado java-liberty-project usando o comando az group create no local eastus2. Esse grupo de recursos é usado posteriormente para criar a instância do Registro de Contêiner do Azure (ACR) e a instância dos Aplicativos de Contêiner do Azure.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2

Criar uma instância do ACR

Use o comando az acr create para criar a instância do ACR. O exemplo a seguir cria uma instância do ACR chamada youruniqueacrname. Verifique se youruniqueacrname é exclusivo no Azure.

Nota

Este artigo usa o mecanismo de autenticação sem senha recomendado para o Registro de Contêiner. Ainda é possível usar um nome de usuário e senha com docker login depois de usar az acr credential show para obter o nome de usuário e a senha. Usar um nome de usuário e senha é menos seguro do que a autenticação sem senha.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Após um curto período de tempo, você deverá ver uma saída JSON que contém as seguintes linhas:

"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",

Em seguida, use o comando a seguir para recuperar o servidor de logon da instância do Registro de Contêiner. Você precisa desse valor ao implantar a imagem do aplicativo nos Aplicativos de Contêiner do Azure mais tarde.

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

Criar um ambiente

Um ambiente nos Aplicativos de Contêiner do Azure cria um limite seguro em torno de um grupo de aplicativos de contêiner. Os Aplicativos de Contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e gravam logs no mesmo workspace do Log Analytics. Use o comando az containerapp env create para criar um ambiente. O exemplo a seguir cria um ambiente chamado youracaenvname:

export ACA_ENV=youracaenvname
az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_ENV

Se for solicitado que você instale uma extensão, responda Y.

Após um curto período de tempo, você deverá ver uma saída JSON que contém as seguintes linhas:

"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",

Criar um banco de dados individual no Banco de Dados SQL do Azure

Nesta seção, você criará um banco de dados individual no Banco de Dados SQL do Azure para uso com seu aplicativo.

Primeiro, use os comandos a seguir para definir variáveis de ambiente relacionadas ao banco de dados. Substitua <your-unique-sql-server-name> por um nome exclusivo para o servidor do Banco de Dados SQL do Azure.

export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb

Em seguida, use os comandos a seguir para criar um banco de dados individual no Banco de Dados SQL do Azure e definir o usuário conectado atual como um administrador do Microsoft Entra. Para obter mais informações, consulte Início Rápido: Criar um banco de dados individual – Banco de Dados SQL do Azure.

export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)

az sql server create \
    --name $SQL_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --enable-ad-only-auth \
    --external-admin-principal-type User \
    --external-admin-name $ENTRA_ADMIN_NAME \
    --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name $DB_NAME \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Em seguida, use os comandos a seguir para adicionar o endereço IP local às regras de firewall do servidor do Banco de Dados SQL do Azure para permitir que seu computador local se conecte ao banco de dados para teste local posteriormente.

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Nota

Crie um SQL Server do Azure com a autenticação SQL desabilitada para considerações de segurança. Somente a ID do Microsoft Entra é usada para autenticar no servidor. Se você precisar habilitar a autenticação do SQL, consulte az sql server create.

Configurar e criar a imagem do aplicativo

Para implantar e executar seu aplicativo Liberty nos Aplicativos de Contêiner do Azure, conteinerize seu aplicativo como uma imagem do Docker usando imagens de contêiner do Open Liberty ou imagens de contêiner do WebSphere Liberty.

Siga as etapas nesta seção para implantar o aplicativo de exemplo no runtime do Liberty. Estas etapas utilizam Maven.

Confira o aplicativo

Use os comandos a seguir para preparar o código de exemplo para este guia. O exemplo está em do GitHub.

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
export BASE_DIR=$PWD
git checkout 20241118

Se você vir uma mensagem sobre estar no estado detached HEAD, essa mensagem pode ser ignorada com segurança. Isso apenas significa que você fez check-out de uma tag.

Este artigo usa java-app. Aqui está a estrutura de arquivos dos arquivos importantes do aplicativo:

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
├─ pom-azure-identity.xml

Os diretórios java, recursose webapp contêm o código-fonte do aplicativo de exemplo. O código declara e usa uma fonte de dados chamada jdbc/JavaEECafeDB.

No diretório raiz java-app, há dois arquivos para criar a imagem do aplicativo com o Open Liberty ou o WebSphere Liberty.

No diretório liberty/config, o arquivo server.xml é usado para configurar a conexão de banco de dados para o cluster Open Liberty e WebSphere Liberty. Ele define uma variável azure.sql.connectionstring usada para se conectar ao Banco de Dados SQL do Azure.

O arquivo pom.xml é o arquivo POM (modelo de objeto de projeto) do Maven que contém as informações de configuração do projeto. O arquivo pom-azure-identity.xml declara a dependência azure-identity, que é usada para autenticar nos serviços do Azure usando a ID do Microsoft Entra.

Nota

Este exemplo usa azure-identity biblioteca para autenticar no Banco de Dados SQL do Azure usando a autenticação do Microsoft Entra, que é recomendada para considerações de segurança. Se você precisar usar a autenticação SQL em seu aplicativo Liberty, consulte conexões de bancos de dados relacionais com o JDBC.

Compilar o projeto

Use os seguintes comandos para criar o aplicativo:

cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Se a compilação for bem-sucedida, você deverá ver uma saída semelhante à seguinte no final da compilação.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------

Se você não vir essa saída, resolva o problema antes de prosseguir.

Testar seu projeto localmente

Agora você pode usar as etapas a seguir para executar e testar o projeto localmente antes de implantar no Azure. Para conveniência, use o liberty-maven-plugin. Para saber mais sobre o liberty-maven-plugin, consulte Criando um aplicativo Web com o Maven. Para seu aplicativo, você pode fazer algo semelhante usando qualquer outro mecanismo, como o IDE local.

Nota

Se você selecionou uma implantação de banco de dados "sem servidor", verifique se o banco de dados SQL não entrou no modo de pausa. Uma maneira de executar a verificação é entrar no editor de consultas de banco de dados, conforme descrito em Início Rápido: use o editor de consultas do portal do Azure (versão prévia) para consultar o Banco de Dados SQL do Azure.

  1. Inicie o aplicativo usando liberty:run.

    cd $BASE_DIR/java-app
    
    # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml.
    export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
    mvn liberty:run
    
  2. Verifique se o aplicativo funciona conforme o esperado. Se tiver êxito, você deverá ver uma mensagem semelhante a [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds. na saída do comando. Vá para http://localhost:9080/ no navegador para verificar se o aplicativo está acessível e todas as funções estão funcionando.

  3. Pressione Ctrl+C para parar. Selecione Y se for solicitado que você encerre o trabalho em lote.

Quando terminar, exclua a regra de firewall que permite que seu endereço IP local acesse o Banco de Dados SQL do Azure usando o seguinte comando:

az sql server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP

Criar a imagem para implantação de Aplicativos de Contêiner do Azure

Agora você pode executar o comando az acr build para criar a imagem, conforme mostrado no exemplo a seguir:

cd $BASE_DIR/java-app

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

O comando az acr build carrega os artefatos especificados no Dockerfile para a instância do Registro de Contêiner, cria a imagem e a armazena na instância do Registro de Contêiner.

Implantar o aplicativo nos Aplicativos de Contêiner do Azure

Use os comandos a seguir para criar uma instância dos Aplicativos de Contêiner do Azure para executar o aplicativo depois de extrair a imagem do ACR. Este exemplo cria uma instância de Aplicativos de Contêiner do Azure chamada youracainstancename:

export ACA_NAME=youracainstancename
az containerapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
    --environment $ACA_ENV \
    --registry-server $ACR_LOGIN_SERVER \
    --registry-identity system \
    --target-port 9080 \
    --ingress 'external' \
    --min-replicas 1

A saída bem-sucedida é um objeto JSON, incluindo a propriedade "type": "Microsoft.App/containerApps".

Em seguida, conecte o servidor do Banco de Dados SQL do Azure ao aplicativo de contêiner usando o Service Connector usando as seguintes etapas:

  1. Este exemplo usa o Service Connector para facilitar a conexão com o banco de dados. Para obter mais informações sobre o Service Connector, consulte O que é o Conector de Serviço? Instalar a extensão sem senha para a CLI do Azure usando o seguinte comando:

    az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
    
  2. Conecte o banco de dados ao aplicativo de contêiner com uma identidade gerenciada atribuída pelo sistema usando o seguinte comando:

    az containerapp connection create sql \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $ACA_NAME \
        --target-resource-group $RESOURCE_GROUP_NAME \
        --server $SQL_SERVER_NAME \
        --database $DB_NAME \
        --system-identity \
        --container $ACA_NAME \
        --client-type java
    

    A saída bem-sucedida é um objeto JSON, incluindo a propriedade "type": "microsoft.servicelinker/linkers".

Nota

O Conector de Serviço cria um segredo no aplicativo de contêineres que contém o valor para AZURE_SQL_CONNECTIONSTRING, que é uma cadeia de caracteres de conexão sem senha para o Banco de Dados SQL do Azure. Para obter mais informações, consulte o valor de exemplo da seção Identidade Gerenciada Atribuída pelo Usuário da Integração do Banco de Dados SQL do Azure com o Conector do Serviço.

Testar o aplicativo

Use o seguinte comando para obter uma URL totalmente qualificada para acessar o aplicativo:

echo https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

Para acessar e testar o aplicativo, abra um navegador da Web na URL. A captura de tela a seguir mostra o aplicativo em execução:

Captura de tela que mostra o aplicativo Java Liberty implantado com êxito nos Aplicativos de Contêiner do Azure.

Limpar recursos

Para evitar encargos do Azure, você deve limpar recursos desnecessários. Quando o cluster não for mais necessário, use o comando az group delete para remover o grupo de recursos, o registro de contêiner, os aplicativos de contêiner, o servidor de banco de dados e todos os recursos relacionados.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Próximas etapas

Você pode saber mais com as referências usadas neste guia:

Para explorar as opções para executar produtos do WebSphere no Azure, consulte Quais são as soluções para executar a família de produtos do WebSphere no Azure?