Compartilhar via


Implantar 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 em Aplicativos de Contêiner do Azure. Neste artigo, você realizará as seguintes atividades:

  • Executar seu aplicativo Java, Java EE, Jacarta EE ou MicroProfile no runtime do Open Liberty ou do WebSphere Liberty.
  • Criar a imagem de Docker do aplicativo usando imagens de contêiner do Liberty.
  • Implantar aplicativos conteinerizados em Aplicativos de Contêiner do Azure.

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

Este artigo tem o objetivo de ajudá-lo a iniciar rapidamente a implementação. Antes de acessar a produção, você deve explorar o Ajuste do Liberty.

Se você tiver interesse em fornecer feedback ou trabalhar em seus cenários de migração em estreita colaboração com a equipe de engenharia que desenvolve o WebSphere para as soluções do Azure, responda a essa breve pesquisa sobre migração para o WebSphere e inclua seus dados de contato. A equipe de gerentes de programas, arquitetos e engenheiros entrará em contato prontamente com você para dar início a 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.53.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 no terminal. Para ver outras opções de entrada, consulte Conectar-se ao Azure com a CLI do Azure.
    • Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
    • Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
  • Instale uma implementação Java SE versão 17 ou posterior – por exemplo, o build da Microsoft do OpenJDK.
  • Instale o Maven 3.5.0 ou posterior.
  • Instalar o Docker para o seu sistema operacional.
  • Verifique se o Git está instalado.

Entrar no Azure

Se ainda não tiver feito isso, acesse assinatura do Azure usando o comando az login e siga as instruções na tela.

az login

Observação

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

Se houver vários locatários do Azure associados às suas credenciais do Azure, você deverá especificar em qual locatário deseja entrar. Por exemplo, faça isso com a opção --tenant, 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.

Vamos criar um grupo de recursos, java-liberty-project usando o comando az group create na localização eastus. Esse grupo de recursos é usado posteriormente para criar a instância do ACR (Registro de Contêiner do Azure) 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 de ACR

Use o comando az acr create para criar a instância de ACR. O exemplo a seguir cria uma instância de ACR chamada youruniqueacrname. Certifique-se de que youruniqueacrname seja 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 breve período, você verá uma saída JSON que contém as seguintes linhas:

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

Conecte-se à instância de ACR

Você precisará entrar na instância de ACR antes de poder enviar uma imagem por push a ela. Se você optar por executar comandos localmente, verifique se o daemon do 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ê deverá ver Login Succeeded no final da saída do comando se tiver feito logon na instância de ACR com êxito.

Criar um ambiente

Um ambiente em aplicativos de contêiner do Azure cria um limite seguro em 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 \
    --location eastus \
    --name $ACA_ENV

Se aparecer a pergunta sobre instalação de uma extensão, responda Y.

Após um breve período, você 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 SQL do Azure

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

Crie um banco de dados individual no Banco de Dados SQL do Azure seguindo as etapas da CLI do Azure em Início Rápido: criar um banco de dados individual - Banco de Dados SQL do Azure. Execute as etapas até, mas não incluindo, Consultar o banco de dados. Execute as etapas a seguir ao ler o artigo e, em seguida, retorne a este documento depois de criar e configurar o servidor de banco de dados:

Quando você acessar a seção Definir valores de parâmetro do início rápido, gere e salve os valores das variáveis no exemplo de código rotulado Variable block, incluindo resourceGroup, server, database, login e password. Defina as seguintes variáveis de ambiente após substituir os espaços reservados <resourceGroup>, <server>, <database>, <login> e <password> por 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 quiser testar o aplicativo localmente mais adiante, execute as seguintes etapas para que o endereço IPv4 do cliente tenha permissão para se conectar:

  1. No portal, pesquise e selecione bancos de dados SQL e selecione seu banco de dados na lista.

  2. Selecione Visã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 Salvar.

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

    Captura de tela das regras de firewall - permitir acesso do cliente.

Configurar e compilar a imagem do aplicativo

Para implantar e executar seu aplicativo do 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 runtime do Liberty. Essas etapas usam o Maven.

Fazer check-out do 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 você vir uma mensagem sobre estar no estado detached HEAD, essa mensagem pode ser ignorada com segurança. Isso significa que você verificou uma tag.

Este artigo usa java-app. Esta é 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 o Open Liberty ou o WebSphere Liberty.

No diretório liberty/config, o arquivo server.xml é usado para configurar a conexão do banco de dados para o cluster do Open Liberty e do WebSphere Liberty.

Compilar o projeto

Use o comando a seguir para compilar o aplicativo:

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

Se o build for bem-sucedido, você deverá ver uma saída semelhante à seguinte no final do build.

[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.

(Opcional) Testar o projeto localmente

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

Observação

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. Faça isso entrando no editor de consultas do banco de dados, conforme descrito em Início Rápido: Usar 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. 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ê deverá ver uma mensagem semelhante a [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. na saída do comando, se tiver êxito. Acesse http://localhost:9080/ no navegador para verificar se o aplicativo está acessível e se todas as funções estão operantes.

  3. Pressione Ctrl+C para parar.

Criar a imagem

Agora você pode executar o comando docker buildx build 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 etapas a seguir para testar a imagem do Docker localmente antes de implantar no Azure:

  1. Execute a imagem usando o comando a seguir. 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, acesse http://localhost:9080/ no navegador para acessar o aplicativo.

  3. Pressione Ctrl+C para parar.

Carregar imagem no ACR

Então, carregue a imagem compilada no ACR criado nas etapas anteriores.

Se você 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 a imagem do contêiner por push:

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

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 e executar o aplicativo depois de efetuar pull da imagem do ACR. Este exemplo cria uma instância dos 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-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 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)

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.

Limpar os recursos

Para evitar cobranças do Azure, limpe 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 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óximas etapas

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

Para explorar as 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?