Implantar um aplicativo Java com o Quarkus em um aplicativo de contêiner do Azure
Este artigo mostra como implantar rapidamente o Red Hat Quarkus em aplicativos de contêiner do Microsoft Azure com um aplicativo CRUD simples. O aplicativo é uma "lista de tarefas" com um front-end JavaScript e um ponto de extremidade REST. O Banco de Dados do Azure para Servidor Flexível PostgreSQL fornece a camada de persistência para o aplicativo. O artigo mostra como testar seu aplicativo localmente e implantá-lo em Aplicativos de Contêiner.
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 Unix-like instalado - por exemplo, Ubuntu, macOS ou Windows Subsystem para Linux.
- Instale uma implementação Java SE versão 17 ou posterior - por exemplo, compilação Microsoft do OpenJDK.
- Instale o Maven, versão 3.9.8 ou superior.
- Instale Docker para seu sistema operacional.
- Instale o jq.
- Instale o cURL.
- Instale a CLI do Quarkus, versão 3.12.1 ou superior.
- Instale a CLI do Azure para executar comandos da CLI do Azure.
- Entre na CLI do Azure usando 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 no Azure 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 extensões, consulte Usar e gerenciar extensões com a 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.61.0 da CLI do Azure.
Criar o projeto de aplicativo
Use o comando a seguir para clonar o projeto Java de exemplo para este artigo. O exemplo está no GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2024-10-14
cd aca-quarkus
Se você vir uma mensagem sobre estar no estado HEAD desanexado, essa mensagem é segura para ignorar. Como este artigo não requer nenhuma confirmação, o estado HEAD destacado é apropriado.
Teste seu aplicativo Quarkus localmente
As etapas nesta seção mostram como executar o aplicativo localmente.
O Quarkus suporta o provisionamento automático de serviços não configurados no modo de desenvolvimento e teste. O Quarkus refere-se a esse recurso como serviços de desenvolvimento. Digamos que você inclua um recurso do Quarkus, como conectar-se a um serviço de banco de dados. Você deseja testar o aplicativo, mas ainda não configurou totalmente a conexão com um banco de dados real. O Quarkus inicia automaticamente uma versão de stub do serviço relevante e conecta seu aplicativo a ele. Para obter mais informações, consulte Visão geral dos serviços de desenvolvimento na documentação do Quarkus.
Verifique se o ambiente de contêiner está em execução e use o seguinte comando para entrar no modo de desenvolvimento do Quarkus:
quarkus dev
Em vez de quarkus dev
, você pode realizar a mesma coisa com o Maven usando mvn quarkus:dev
.
Você pode ser perguntado se deseja enviar telemetria do seu uso do modo de desenvolvimento do Quarkus. Se sim, responda como quiser.
O modo de desenvolvimento do Quarkus permite a recarga ao vivo com compilação em segundo plano. Se você modificar qualquer aspeto do código-fonte do aplicativo e atualizar o navegador, poderá ver as alterações. Se houver algum problema com a compilação ou implantação, uma página de erro informará você. O modo de desenvolvimento do Quarkus escuta um depurador na porta 5005. Se você quiser esperar que o depurador anexe antes de executar, passe -Dsuspend
a linha de comando. Se você não quiser o depurador, você pode usar -Ddebug=false
o .
A saída deve ser semelhante ao exemplo a seguir:
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aca 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 14.826s. Listening on: http://localhost:8080
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Pressione w no terminal onde o modo de desenvolvimento do Quarkus está sendo executado. A tecla w abre o navegador da Web padrão para mostrar o Todo
aplicativo. Você também pode acessar a GUI do aplicativo diretamente http://localhost:8080
.
Tente selecionar alguns itens de todo na lista de tarefas. A interface do usuário indica a seleção com um estilo de texto tachado. Você também pode adicionar um novo item todo à lista todo digitando Verify Todo apps e pressionando ENTER, conforme mostrado na captura de tela a seguir:
Acesse a API RESTful (/api
) para obter todos os itens que são armazenados no banco de dados PostgreSQL local:
curl --verbose http://localhost:8080/api | jq .
A saída deve ser semelhante ao exemplo a seguir:
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100 664 100 664 0 0 13278 0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
{
"id": 1,
"title": "Introduction to Quarkus Todo App",
"completed": false,
"order": 0,
"url": null
},
{
"id": 2,
"title": "Quarkus on Azure App Service",
"completed": false,
"order": 1,
"url": "https://learn.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"
},
{
"id": 3,
"title": "Quarkus on Azure Container Apps",
"completed": false,
"order": 2,
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"id": 4,
"title": "Quarkus on Azure Functions",
"completed": false,
"order": 3,
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"id": 5,
"title": "Verify Todo apps",
"completed": false,
"order": 5,
"url": null
}
]
Pressione q para sair do modo de desenvolvimento do Quarkus.
Criar os recursos do Azure para executar o aplicativo Quarkus
As etapas nesta seção mostram como criar os seguintes recursos do Azure para executar o aplicativo de exemplo Quarkus:
- Banco de Dados do Azure para Servidor Flexível PostgreSQL
- Registo de Contentores do Azure
- Azure Container Apps
Alguns desses recursos devem ter nomes exclusivos dentro do escopo da assinatura do Azure. Para garantir essa exclusividade, você pode usar as iniciais, sequência, data, padrão de sufixo. Para aplicar esse padrão, nomeie seus recursos listando suas iniciais, algum número de sequência, a data de hoje e algum tipo de sufixo específico de recurso - por exemplo, rg
para "grupo de recursos". As variáveis de ambiente a seguir usam esse padrão. Substitua os valores de espaço reservado em UNIQUE_VALUE
e LOCATION
por seus próprios valores e execute os comandos em seu terminal.
export UNIQUE_VALUE=<your unique value, such as mjg101424>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg-passwordless
export LOCATION=<your desired Azure region for deploying your resources - for example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}regpasswordless
export DB_SERVER_NAME=${UNIQUE_VALUE}dbpasswordless
export DB_NAME=demodb
export ACA_ENV=${UNIQUE_VALUE}envpasswordless
export ACA_NAME=${UNIQUE_VALUE}acapasswordless
Em seguida, crie um grupo de recursos usando o seguinte comando:
az group create \
--name $RESOURCE_GROUP_NAME \
--location $LOCATION
Criar um Banco de Dados do Azure para o Servidor Flexível PostgreSQL
O Azure Database for PostgreSQL Flexible Server é um serviço de banco de dados totalmente gerenciado projetado para fornecer controle e flexibilidade mais granulares sobre funções de gerenciamento de banco de dados e definições de configuração. Esta seção mostra como criar um Banco de Dados do Azure para a instância do Servidor Flexível PostgreSQL usando a CLI do Azure. Para obter mais informações, consulte Guia de início rápido: criar um banco de dados do Azure para PostgreSQL - instância de servidor flexível usando a CLI do Azure.
Crie um Banco de Dados do Azure para instância de servidor flexível do PostgreSQL usando o seguinte comando:
az postgres flexible-server create \
--name $DB_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--database-name $DB_NAME \
--public-access None \
--sku-name Standard_B1ms \
--tier Burstable \
--active-directory-auth Enabled
Leva alguns minutos para criar o servidor, o banco de dados, o usuário administrador e as regras de firewall. Se o comando for bem-sucedido, a saída será semelhante ao exemplo a seguir:
{
"connectionString": "postgresql://REDACTED:REDACTED@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
"databaseName": "<DB_NAME>",
"host": "<DB_SERVER_NAME>.postgres.database.azure.com",
"id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
"location": "East US",
"password": "REDACTED",
"resourceGroup": "<RESOURCE_GROUP_NAME>",
"skuname": "Standard_B1ms",
"username": "REDACTED",
"version": "13"
}
Adicione o usuário conectado atual como Microsoft Entra Admin à instância do Servidor Flexível do Banco de Dados do Azure para PostgreSQL usando os seguintes comandos:
ENTRA_ADMIN_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $DB_SERVER_NAME \
--display-name $ENTRA_ADMIN_NAME \
--object-id $(az ad signed-in-user show --query id -o tsv)
A saída bem-sucedida é um objeto JSON que inclui a propriedade "type": "Microsoft.DBforPostgreSQL/flexibleServers/administrators"
.
Criar uma instância do Registro de Contêiner do Microsoft Azure
Como o Quarkus é uma tecnologia nativa da nuvem, ele tem suporte interno para a criação de contêineres que são executados em aplicativos de contêiner. Aplicativos de contêiner depende inteiramente de ter um registro de contêiner a partir do qual ele encontra as imagens de contêiner para executar. As Aplicações de Contentor têm suporte incorporado para o Registo de Contentores do Azure.
Use o comando az acr create para criar a instância do Container Registry. O exemplo a seguir cria n instância do Registro de Contêiner nomeada com o valor da variável ${REGISTRY_NAME}
de ambiente :
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $REGISTRY_NAME \
--sku Basic
Após um curto período de tempo, você verá a saída JSON que contém as seguintes linhas:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "<YOUR_RESOURCE_GROUP>",
Obtenha o servidor de logon para a instância do Registro de Contêiner usando o seguinte comando:
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
echo $LOGIN_SERVER
Conecte seu docker à instância do Registro de Contêiner
Entre na instância do Registro de Contêiner. Iniciar sessão permite-lhe enviar uma imagem por push. Use o seguinte comando para entrar no registro:
az acr login --name $REGISTRY_NAME
Se você entrou na instância do Registro de Contêiner com êxito, deverá ver Login Succeeded
no final da saída do comando.
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, conforme mostrado no exemplo a seguir:
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--name $ACA_ENV
Se lhe for pedido para instalar uma extensão, responda Y.
Personalizar a configuração nativa da nuvem
Como uma tecnologia nativa da nuvem, o Quarkus oferece a capacidade de gerar automaticamente imagens de contêiner. Para obter mais informações, consulte Imagens de contêiner. Os desenvolvedores podem implantar a imagem do aplicativo em uma plataforma conteinerizada de destino - por exemplo, Aplicativos de Contêiner do Azure.
Para gerar a imagem do contêiner, use o seguinte comando para adicionar a container-image-jib
extensão no terminal local:
quarkus ext add container-image-jib
O Quarkus modifica o POM para garantir que a extensão seja incluída entre os <dependencies>
. Se você for solicitado a instalar algo chamado JBang
, responda sim e permita que ele seja instalado.
A saída deve ser semelhante ao exemplo a seguir:
[SUCCESS] ✅ Extension io.quarkus:quarkus-container-image-jib has been installed
Abra o arquivo pom.xml e você verá as seguintes dependências adicionadas container-image-jib
pela extensão:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-container-image-jib</artifactId>
</dependency>
Em seguida, adicione as seguintes dependências ao arquivo pom.xml para dar suporte à autenticação sem senha com o Banco de Dados do Azure para Servidor Flexível PostgreSQL:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.20</version>
</dependency>
Como uma tecnologia nativa da nuvem, o Quarkus suporta a noção de perfis de configuração. O Quarkus tem os seguintes três perfis integrados:
-
dev
- Ativado quando em modo de desenvolvimento. -
test
- Ativado durante a execução de testes. -
prod
- O perfil padrão quando não está em execução no modo de desenvolvimento ou teste.
O Quarkus suporta qualquer número de perfis nomeados, conforme necessário.
As etapas restantes nesta seção direcionam você para descomentar e personalizar valores no arquivo src/main/resources/application.properties . Certifique-se de que todas as linhas que começam com # %prod.
não são comentadas, removendo a entrelinha #
.
O %prod.
prefixo indica que essas propriedades estão ativas quando executadas prod
no perfil. Para obter mais informações sobre perfis de configuração, consulte a documentação do Quarkus.
Examinar a configuração do banco de dados
Depois de descomentar as propriedades, a configuração do banco de dados no arquivo src/main/resources/application.properties deve se parecer com o exemplo a seguir:
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=
%prod.quarkus.datasource.username=
%prod.quarkus.datasource.password=
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
Remova a propriedade %prod.quarkus.datasource.password
porque ela não é necessária ao usar a autenticação sem senha com o Banco de Dados do Azure para o Servidor Flexível PostgreSQL. Atualize as outras propriedades %prod.quarkus.datasource.jdbc.url
relacionadas à conexão de banco de dados e %prod.quarkus.datasource.username
com os valores, conforme mostrado no exemplo a seguir. A configuração final deve ser semelhante ao exemplo a seguir:
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
&sslmode=require
%prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
O valor de , ${AZURE_POSTGRESQL_HOST}
, ${AZURE_POSTGRESQL_PORT}
e são fornecidos pelo ambiente de Aplicativos de ${AZURE_POSTGRESQL_DATABASE}
Contêiner do Azure em tempo de execução usando a extensão sem senha do Service Connector mais adiante ${AZURE_POSTGRESQL_USERNAME}
neste artigo.
Geralmente, você não espera que os dados persistentes no banco de dados sejam descartados e preenchidos novamente com os dados de exemplo em um ambiente de produção. É por isso que você pode ver que o esquema para quarkus.hibernate-orm.database.generation
é especificado de create
modo que o aplicativo só cria o esquema quando ele não existe na inicialização inicial. Além disso, o banco de dados não é pré-preenchido com nenhum dado de exemplo porque hibernate-orm.sql-load-script
é especificado como no-file
. Essa configuração é diferente de quando você executou o aplicativo localmente no modo de desenvolvimento anteriormente. Os valores padrão no modo de desenvolvimento para e são e respectivamente, o que significa que o aplicativo sempre descarta e recria o esquema de banco de dados e carrega os dados definidos em quarkus.hibernate-orm.database.generation
.hibernate-orm.sql-load-script
drop-and-create
import.sql
O arquivo import.sql é uma facilidade de conveniência do Quarkus. Se o arquivo src/main/resources/import.sql existir no jar do Quarkus e o hibernate-orm.sql-load-script
valor da propriedade for import.sql
, as instruções SQL DML nesse arquivo serão executadas no momento da inicialização do aplicativo.
Teste seu aplicativo Quarkus localmente com o Banco de Dados do Azure para Servidor Flexível PostgreSQL
Antes de implantar o aplicativo Quarkus em Aplicativos de Contêiner do Azure, teste a conexão com o Banco de Dados do Azure para instância do Servidor Flexível PostgreSQL localmente.
Primeiro, adicione o endereço IP local ao Banco de Dados do Azure para regras de firewall de instância do Servidor Flexível PostgreSQL usando os seguintes comandos:
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az postgres flexible-server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
Em seguida, defina as seguintes variáveis de ambiente no seu terminal anterior. Essas variáveis de ambiente são usadas para se conectar à instância do Servidor Flexível do Banco de Dados do Azure para PostgreSQL a partir do aplicativo Quarkus em execução localmente:
export AZURE_POSTGRESQL_HOST=${DB_SERVER_NAME}.postgres.database.azure.com
export AZURE_POSTGRESQL_PORT=5432
export AZURE_POSTGRESQL_DATABASE=${DB_NAME}
export AZURE_POSTGRESQL_USERNAME=${ENTRA_ADMIN_NAME}
Execute o aplicativo Quarkus localmente para testar a conexão com o Banco de Dados do Azure para a instância do Servidor Flexível PostgreSQL. Use o seguinte comando para iniciar o aplicativo no modo de produção:
mvn clean package -DskipTests
java -jar target/quarkus-app/quarkus-run.jar
Abra um novo navegador da Web para http://localhost:8080
acessar o aplicativo Todo. Você deve ver o mesmo aplicativo Todo que viu quando executou o aplicativo localmente no modo de desenvolvimento, sem nenhum item Todo.
Pressione Control+C para parar o aplicativo.
Crie a imagem do contêiner e envie-a para o Registro do Contêiner
Agora, use o seguinte comando para criar o próprio aplicativo. Este comando usa a extensão Jib para criar a imagem do contêiner.
export TODO_QUARKUS_IMAGE_NAME=todo-quarkus-aca
export TODO_QUARKUS_IMAGE_TAG=${LOGIN_SERVER}/${TODO_QUARKUS_IMAGE_NAME}:1.0
quarkus build -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${TODO_QUARKUS_IMAGE_TAG} --no-tests
A saída deve terminar com BUILD SUCCESS
.
Você pode verificar se a imagem do contêiner também é gerada usando a linha de comando docker
(CLI), conforme mostrado no exemplo a seguir:
docker images | grep ${TODO_QUARKUS_IMAGE_NAME}
A saída é semelhante ao exemplo a seguir:
<LOGIN_SERVER_VALUE>/todo-quarkus-aca 1.0 0804dfd834fd 2 minutes ago 407MB
Envie as imagens de contêiner para o Registro de contêiner usando o seguinte comando:
docker push ${TODO_QUARKUS_IMAGE_TAG}
O resultado deverá ter um aspeto semelhante ao seguinte exemplo:
The push refers to repository [<LOGIN_SERVER_VALUE>/todo-quarkus-aca]
188a550fce3d: Pushed
4e3afea591e2: Pushed
1db0eba807a6: Pushed
c72d9ccda0b2: Pushed
d7819b8a2d18: Pushed
d0e5cba6b262: Pushed
e0bac91f0f10: Pushed
1.0: digest: sha256:f9ccb476e2388efa0dfdf817625a94f2247674148a69b7e4846793e63c8be994 size: 1789
Implantar o aplicativo Quarkus em Aplicativos de Contêiner do Azure
Agora que você enviou a imagem do aplicativo para o Registro de Contêiner, use o seguinte comando para criar uma instância de Aplicativos de Contêiner para executar o aplicativo depois de extrair a imagem do Registro de Contêiner:
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image $TODO_QUARKUS_IMAGE_TAG \
--environment $ACA_ENV \
--registry-server $LOGIN_SERVER \
--registry-identity system \
--target-port 8080 \
--ingress 'external' \
--min-replicas 1
A saída bem-sucedida é um objeto JSON que inclui a propriedade "type": "Microsoft.App/containerApps"
.
Em seguida, conecte a instância do Banco de Dados do Azure para Servidor Flexível PostgreSQL ao aplicativo de contêiner usando o Service Connector usando as seguintes etapas:
Instale a extensão sem senha do Service Connector 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 postgres-flexible \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME
A saída bem-sucedida é um objeto JSON que inclui a propriedade
"type": "microsoft.servicelinker/linkers"
.
Obtenha uma url totalmente qualificada para acessar o aplicativo Todo usando o seguinte comando:
export QUARKUS_URL=https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn -o tsv)
echo $QUARKUS_URL
Abra um novo navegador da Web com o valor de ${QUARKUS_URL}
. Se a página da Web não renderizar corretamente, aguarde um pouco e atualize a página.
Em seguida, adicione um novo item todo com o texto Deployed the Todo app to Container Apps
. Selecione este item para marcá-lo como concluído.
Acesse a API RESTful (/api
) para obter todos os itens de todo armazenados no Banco de Dados do Azure para PostgreSQL, conforme mostrado no exemplo a seguir:
curl --verbose -k ${QUARKUS_URL}/api | jq .
A saída deve ser semelhante ao exemplo a seguir:
* Connected to <aca-name>.<random-id>.eastus.azurecontainerapps.io (20.231.235.79) port 443 (#0)
> GET /api HTTP/2
> Host: <aca-name>.<random-id>.eastus.azurecontainerapps.io
> user-agent: curl/7.88.1
> accept: */*
>
< HTTP/2 200
< content-length: 88
< content-type: application/json;charset=UTF-8
<
[
{
"id": 1,
"title": "Deployed the Todo app to Container Apps",
"completed": true,
"order": 1,
"url": null
}
]
Verifique se o banco de dados foi atualizado
Execute o seguinte comando para verificar se o banco de dados foi atualizado com o novo item todo:
export ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
--admin-user $ENTRA_ADMIN_NAME \
--admin-password $ACCESS_TOKEN \
--name $DB_SERVER_NAME \
--database-name $DB_NAME \
--querytext "select * from todo;"
Se lhe for pedido para instalar uma extensão, responda Y.
A saída deve ser semelhante ao exemplo a seguir e deve incluir o mesmo item na GUI do aplicativo Todo mostrada anteriormente:
Successfully connected to <DB_SERVER_NAME>.
Ran Database Query: 'select * from todo;'
Retrieving first 30 rows of query output, if applicable.
Closed the connection to <DB_SERVER_NAME>
[
{
"completed": true,
"id": 1,
"ordering": 1,
"title": "Deployed the Todo app to Container Apps",
"url": null
}
]
Quando terminar, exclua a regra de firewall que permite que seu endereço IP local acesse a instância do Servidor Flexível do Banco de Dados do Azure para PostgreSQL usando o seguinte comando:
az postgres flexible-server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--yes
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 serviço de contêiner, o registro de contêiner e todos os recursos relacionados.
git reset --hard
docker rmi ${TODO_QUARKUS_IMAGE_TAG}
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Você também pode querer usar docker rmi
para excluir as postgres
imagens e testcontainers
contêiner geradas pelo modo de desenvolvimento do Quarkus.