Implementar um aplicativo Java com Open Liberty ou WebSphere Liberty em Aplicativos de Contêiner do Azure

Este artigo mostra como executar o Open Liberty ou o WebSphere Liberty no Azure Container Apps. Você faz as seguintes atividades neste artigo:

  • Execute seu aplicativo Java, Java EE, Jakarta EE ou MicroProfile no tempo de execução do Open Liberty ou WebSphere Liberty.
  • Crie a imagem do Docker do aplicativo usando imagens de contêiner do Liberty.
  • Implante o aplicativo em contêiner 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 obter mais informações sobre o IBM WebSphere Liberty, consulte a página do produto WebSphere Liberty.

Este artigo destina-se a ajudá-lo a chegar rapidamente à implantação. Antes de ir para a produção, você deve explorar Tuning Liberty.

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

Pré-requisitos

Se você estiver executando os comandos neste guia localmente (em vez do Azure Cloud Shell):

  • Prepare uma máquina local com Windows ou Linux instalado.
  • Instale uma implementação Java SE, versão 17 ou posterior (por exemplo, Eclipse Open J9).
  • Instale o Maven 3.5.0 ou superior.
  • Instale o Docker para seu sistema operacional.

Prepare o seu ambiente para o CLI do Azure

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Este artigo requer pelo menos a versão 2.53.0 da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada. Você pode iniciar comandos da CLI do Azure no Bash ou no Azure PowerShell, localmente ou no Azure Cloud Shell.

Iniciar sessão no Azure

Se ainda não o fez, inicie sessão na sua subscrição do Azure utilizando o comando az login e siga as instruções no ecrã.

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 apenas quando se utilizam variáveis. Nas seções a seguir, a diferença é abordada em guias diferentes quando necessário.

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 fazer isso com a --tenant opção - por exemplo, az login --tenant contoso.onmicrosoft.com.

Se tiver várias subscrições num único inquilino, certifique-se de que tem sessão iniciada com a que pretende utilizar utilizando az account set --subscription <subscription-id>o .

Criar um grupo de recursos

Um grupo de recursos do Azure é um grupo lógico, no qual os recursos do Azure são implementados e geridos.

Crie um grupo de recursos chamado java-liberty-project usando o comando az group create no local eastus. 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 eastus

Criar uma instância ACR

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

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

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

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

Conectar-se à instância ACR

Você precisa entrar na instância do ACR antes de enviar uma imagem para ela. Se você optar por executar comandos localmente, verifique se o daemon docker está em execução e execute os seguintes comandos para verificar a conexão:

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
export ACR_USER_NAME=$(az acr credential show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
export ACR_PASSWORD=$(az acr credential show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $ACR_LOGIN_SERVER -u $ACR_USER_NAME -p $ACR_PASSWORD

Você deve ver Login Succeeded no final da saída do comando se você fez login na instância ACR com êxito.

Criar um ambiente

Um ambiente em 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 espaço de trabalho 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 \
    --location eastus \
    --name $ACA_ENV

Se lhe for pedido para instalar uma extensão, responda Y.

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

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

Criar uma Base de Dados SQL do Azure

Nesta seção, você cria um banco de dados único do Banco de Dados SQL do Azure para uso com seu aplicativo.

Crie um único banco de dados no Banco de Dados SQL do Azure seguindo as etapas da CLI do Azure em Guia de início rápido: criar um banco de dados único do Banco de Dados SQL do Azure. Execute as etapas até, mas não incluindo Consultar o banco de dados. Use as seguintes etapas ao percorrer o artigo e, em seguida, retorne a este documento depois de criar e configurar o servidor de banco de dados:

Quando você chegar à seção Definir valores de parâmetro do início rápido, produza e salve de lado os valores das variáveis no exemplo de código rotulado Variable block, incluindo resourceGroup,server, database, logine password. Defina as seguintes variáveis de ambiente depois de substituir os espaços reservados <resourceGroup>,<server>, <database>, <login>e <password> com esses valores.

export DB_RESOURCE_GROUP=<resourceGroup>
export DB_SERVER_NAME=<server>.database.windows.net
export DB_NAME=<database>
export DB_USER=<login>
export DB_PASSWORD=<password>

Se você quiser testar o aplicativo localmente mais tarde, use as seguintes etapas para garantir que o endereço IPv4 do cliente tenha permissão para se conectar:

  1. No portal, procure e selecione bancos de dados SQL e, em seguida, selecione seu banco de dados na lista.

  2. Selecione Descrição geral.

  3. Verifique se a guia Introdução está selecionada no meio da página.

  4. Em Configurar acesso, selecione Configurar.

  5. Selecione Adicionar o endereço IPv4 do cliente.

  6. Selecione Guardar.

  7. Você pode encontrar e configurar regras de Firewall no painel Rede e na guia Acesso público.

    Captura de ecrã das regras de firewall - permitir o acesso do cliente.

Configurar e compilar a imagem do aplicativo

Para implementar e executar seu aplicativo Liberty em 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 tempo de execução do Liberty. Estas etapas usam o Maven.

Confira o aplicativo

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

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
git checkout 20231026

Se vir uma mensagem sobre estar no detached HEAD estado, é seguro ignorá-la. Isso significa apenas que você fez check-out de uma tag.

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

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

Os diretórios java, resources e 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 Open Liberty ou 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.

Compilar o projeto

Use o seguinte comando para criar o aplicativo:

cd <path-to-your-repo>/java-app
mvn clean install

Se a compilação for bem-sucedida, você 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, solucione e resolva o problema antes de continuar.

(Opcional) Teste o seu projeto localmente

Agora você pode usar as etapas a seguir para executar e testar o projeto localmente antes de implantar no Azure. Por conveniência, use o liberty-maven-pluginarquivo . Para saber mais sobre o , consulte Criando um aplicativo Web com o liberty-maven-pluginMaven. 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 fazer isso é fazer logon no editor de consultas de banco de dados, conforme descrito em Guia de início rápido: use o editor de consultas do portal do Azure (visualização) para consultar o Banco de Dados SQL do Azure.

  1. Inicie o aplicativo usando liberty:runo . liberty:run usa as variáveis de ambiente relacionadas ao banco de dados definidas na etapa anterior.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Verifique se o aplicativo funciona conforme o esperado. Você verá uma mensagem semelhante na [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. saída do comando, se for bem-sucedida. Vá para http://localhost:9080/ no seu navegador para verificar se o aplicativo está acessível e todas as funções estão funcionando.

  3. Pressione Ctrl+C para parar.

Criar a imagem

Nota

Se você optar por usar o ambiente Bash no Azure Cloud Shell, use o az acr build comando para criar e enviar imagem por push de um arquivo do Docker. Para obter mais informações, consulte a seção Criar e enviar imagem por push de um Dockerfile de Guia de início rápido: criar e executar uma imagem de contêiner usando as Tarefas do Registro de Contêiner do Azure. Depois disso, vá diretamente para a seção Implantar o aplicativo em Aplicativos de Contêiner do Azure. Se você optar por executar comandos localmente, use as seguintes orientações.

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

cd <path-to-your-repo>/java-app

# If you are running with Open Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .

(Opcional) Testar a imagem do Docker localmente

Agora você pode usar as seguintes etapas para testar a imagem do Docker localmente antes de implantar no Azure:

  1. Execute a imagem usando o seguinte comando. Este comando usa as variáveis de ambiente relacionadas ao banco de dados definidas anteriormente.

    docker run -it --rm -p 9080:9080 \
        -e DB_SERVER_NAME=${DB_SERVER_NAME} \
        -e DB_NAME=${DB_NAME} \
        -e DB_USER=${DB_USER} \
        -e DB_PASSWORD=${DB_PASSWORD} \
        javaee-cafe:v1
    
  2. Depois que o contêiner for iniciado, vá para http://localhost:9080/ em seu navegador para acessar o aplicativo.

  3. Pressione Ctrl+C para parar.

Carregar imagem para o ACR

Em seguida, carregue a imagem construída para o ACR que você criou nas etapas anteriores.

Se ainda não tiver feito isso, use o seguinte comando para entrar no ACR:

docker login -u ${ACR_USER_NAME} -p ${ACR_PASSWORD} ${ACR_LOGIN_SERVER}

Use os seguintes comandos para marcar e enviar por push a imagem do contêiner:

docker tag javaee-cafe:v1 ${ACR_LOGIN_SERVER}/javaee-cafe:v1
docker push ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Implantar o aplicativo em Aplicativos de Contêiner do Azure

Use os comandos a seguir para criar uma instância do Azure Container Apps para executar o aplicativo depois de extrair a imagem do ACR. Este exemplo cria uma instância do Azure Container Apps 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-username $ACR_USER_NAME \
    --registry-password $ACR_PASSWORD \
    --target-port 9080 \
    --env-vars \
        DB_SERVER_NAME=${DB_SERVER_NAME} \
        DB_NAME=${DB_NAME} \
        DB_USER=${DB_USER} \
        DB_PASSWORD=${DB_PASSWORD} \
    --ingress 'external'

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

Testar a aplicação

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)

Abra um navegador da Web para a URL para acessar e testar o aplicativo. 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.

Clean up resources (Limpar recursos)

Para evitar cobranças 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
az group delete --name $DB_RESOURCE_GROUP --yes --no-wait

Em seguida, use o seguinte comando para remover a imagem do contêiner do servidor Docker local:

docker rmi -f ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Próximos passos

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

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