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
- Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Prepare uma máquina local com o sistema operacional Windows ou Unix instalado - por exemplo, Ubuntu, macOS ou Windows Subsystem for 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 os passos apresentados no seu terminal. Consulte Entrar no Azure com a CLI do Azure para obter outras opções de entrada. - Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. 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 que estão instaladas. Para atualizar para a versão mais recente, executeaz upgrade
.
- Entre com a CLI do Azure usando o comando
- Instale uma implementação da versão 17 do Java SE - por exemplo, compilação da Microsoft do OpenJDK.
- Instale o Maven 3.9.8 ou superior.
- Verifique se o Git está instalado.
Iniciar sessão no Azure
Entre na 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 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 especificar o locatário usando a opção --tenant
- 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>
.
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 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 ACR
Use o comando az acr create
para criar a instância ACR. O exemplo a seguir cria uma instância ACR chamada youruniqueacrname
. Certifique-se de que 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 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ê 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 para a instância do Registro de Contêiner. Você precisa desse valor quando implanta 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 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 \
--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 um único banco de dados no Banco de Dados SQL do Azure
Nesta seção, você cria um único banco de dados 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 seu 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 único banco de dados 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 Guia de início rápido: criar um único banco de dados - 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 sua máquina 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
Você cria um servidor SQL do Azure com a autenticação SQL desabilitada por considerações de segurança. Somente o Microsoft Entra ID é usado para autenticar no servidor. Se você precisar habilitar a autenticação SQL, consulte az sql server create
.
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
export BASE_DIR=$PWD
git checkout 20241118
Se vir uma mensagem sobre estar no detached HEAD
estado, é seguro ignorá-la. Isso significa apenas que verificaste uma tag.
Este artigo usa java-app. Aqui está a estrutura de 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, 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 do banco de dados para o cluster Open Liberty e WebSphere Liberty. Ele define uma variável azure.sql.connectionstring
que é usada para se conectar ao Banco de Dados SQL do Azure.
O arquivo pom.xml é o arquivo de modelo de objeto de projeto (POM) Maven que contém as informações de configuração para o 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 banco de dados relacional com 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ê 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.
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-plugin
arquivo . Para saber mais sobre o , consulte Criando um aplicativo Web com o liberty-maven-plugin
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 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.
Inicie o aplicativo usando
liberty:run
o .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
Verifique se o aplicativo funciona conforme o esperado. Se for bem-sucedido, você verá uma mensagem semelhante a
[INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.
na saída do comando. Vá parahttp://localhost:9080/
em seu navegador para verificar se o aplicativo está acessível e todas as funções estão funcionando.Pressione Ctrl+C para parar. Selecione e se for solicitado a terminar 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 a implantação dos Aplicativos de Contêiner do Azure
Agora você pode executar o az acr build
comando 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 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-identity system \
--target-port 9080 \
--ingress 'external' \
--min-replicas 1
A saída bem-sucedida é um objeto JSON que inclui 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:
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 Service Connector? Instale a extensão sem senha para a CLI do Azure usando o seguinte comando:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
Conecte o banco de dados ao aplicativo 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 que inclui a propriedade
"type": "microsoft.servicelinker/linkers"
.
Nota
O Service Connector cria um segredo no aplicativo de contêiner que contém o valor para AZURE_SQL_CONNECTIONSTRING
, que é uma cadeia de conexão sem senha para o Banco de Dados SQL do Azure. Para mais informações, consulte o valor de exemplo da seção sobre a identidade gerenciada atribuída pelo usuário de Integrar o Banco de Dados SQL do Azure com o Service Connector.
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)
Para acessar e testar o aplicativo, abra um navegador da Web para a URL. A captura de tela a seguir mostra o aplicativo em execução:
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
Próximos passos
Você pode aprender mais com as referências usadas neste guia:
- Aplicativos de contêiner do Azure
- Integrar o Banco de Dados SQL do Azure com o Service Connector
- Conectar usando a autenticação do Microsoft Entra
- Liberdade Aberta
- Abrir Configuração do Liberty Server
- Liberty Maven Plugin
- Abrir imagens do Liberty Container
- Imagens do WebSphere Liberty Container
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?