Exercício - Configurar Aplicativos de Contêiner do Azure

Concluído

Nesta unidade, você cria um grupo de recursos do Azure que contém os recursos para o aplicativo. Em seguida, configure o banco de dados PostgreSQL usando a CLI do Azure. Finalmente, você configura o aplicativo Quarkus para acessar o banco de dados remoto PostgreSQL. Use um terminal de sua escolha para executar os comandos.

Preparar o ambiente de trabalho

Você precisa configurar algumas variáveis de ambiente. Aqui estão algumas notas sobre as variáveis que você criará:

Variável Descrição
AZ_PROJECT O nome do projeto. Para manter esse valor exclusivo, recomendamos que você use AZ_PROJECT_<your initials>.
AZ_RESOURCE_GROUP O nome do grupo de recursos que contém os recursos.
AZ_LOCATION A região do Azure. Recomendamos que você use uma região próxima de onde você mora. Para ver a lista de regiões disponíveis, digite az account list-locations em um prompt de comando.
AZ_CONTAINERAPP O nome da instância dos Aplicativos de Contêiner do Azure que contém os contêineres.
AZ_CONTAINERAPP_ENV O nome do ambiente de Aplicações de Contentores do Azure.
AZ_POSTGRES_SERVER_NAME O nome do seu servidor PostgreSQL. Não são permitidos caracteres não alfanuméricos: -, _, !, $, #, %. O nome deve ser exclusivo no Azure. Certifique-se de usar um identificador exclusivo.
AZ_POSTGRES_DB_NAME O nome do banco de dados PostgreSQL. O nome padrão do banco de dados PostgreSQL é postgres.
AZ_POSTGRES_USERNAME O nome de usuário administrador padrão para seu servidor de banco de dados PostgreSQL.
AZ_POSTGRES_PASSWORD A senha padrão para seu servidor de banco de dados PostgreSQL. Utilize uma palavra-passe segura.

Observação

Você pode nomear seus recursos do Azure da maneira que desejar, mas recomendamos que você revise exemplos de abreviatura para recursos do Azure. Este artigo fornece abreviaturas de exemplo para muitos recursos do Azure (por exemplo, rg para grupos de recursos e ca para aplicativos de contêiner).

Use os comandos a seguir para configurar as variáveis. Certifique-se de modificar os valores conforme descrito na tabela anterior.

export AZ_PROJECT_<your initials>="azure-deploy-quarkus"
export AZ_RESOURCE_GROUP="rg${AZ_PROJECT_<your initials>}"
export AZ_LOCATION="eastus"
export AZ_CONTAINERAPP="ca${AZ_PROJECT_<your initials>}"
export AZ_CONTAINERAPP_ENV="cae${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_DB_NAME="postgres${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_USERNAME="<user-name>"
export AZ_POSTGRES_PASSWORD="<secure-password>"
export AZ_POSTGRES_SERVER_NAME="psql${AZ_PROJECT_<your initials>}"

Essas variáveis de ambiente são usadas durante o resto deste módulo.

Em seguida, crie um grupo de recursos:

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

Criar uma instância do Banco de Dados do Azure para PostgreSQL

Agora você criará um servidor PostgreSQL gerenciado. Execute o seguinte comando para criar uma pequena instância do Banco de Dados do Azure para PostgreSQL:

Se você nunca criou um PostgreSQL Server antes, você precisa registrar o provedor. Para registrar o provedor PostgreSQL, execute o seguinte comando:

az provider register --namespace Microsoft.DBforPostgreSQL

Em seguida, crie o PostgreSQL Server.

az postgres flexible-server create \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --location "$AZ_LOCATION" \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --public-access "All" \
    --tier "Burstable" \
    --sku-name "Standard_B1ms" \
    --storage-size 32 \
    --version "16"

Este comando cria um pequeno servidor PostgreSQL que usa as variáveis que você configurou anteriormente.

Configurar o Quarkus para acessar o banco de dados PostgreSQL

Agora você conectará o aplicativo Quarkus ao banco de dados PostgreSQL. Para fazer isso, primeiro você precisa obter a cadeia de conexão para o banco de dados:

export POSTGRES_CONNECTION_STRING=$(
    az postgres flexible-server show-connection-string \
    --server-name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --query "connectionStrings.jdbc" \
    --output tsv
)

export POSTGRES_CONNECTION_STRING_SSL="$POSTGRES_CONNECTION_STRING&ssl=true"

echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"

Observe a cadeia de conexão retornada.

Observação

A Microsoft recomenda o uso do fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como para bancos de dados, caches, mensagens ou serviços de IA, requer um alto grau de confiança no aplicativo e acarreta riscos não presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de máquina local, prefira identidades de usuário para conexões sem senha ou sem chave.

Configurar o aplicativo Quarkus para se conectar ao banco de dados PostgreSQL

Atualize o arquivo application.properties na pasta src/main/resources do projeto para configurar a cadeia de conexão com o banco de dados PostgreSQL. Para fazer isso, defina a propriedade quarkus.datasource.jdbc.url para o valor anteriormente produzido por $POSTGRES_CONNECTION_STRING_SSL. A parte &ssl=true&sslmode=require da cadeia de conexão força o driver a usar SSL, um requisito para o Banco de Dados do Azure para PostgreSQL.

quarkus.hibernate-orm.database.generation=update
quarkus.datasource.jdbc.url=<the POSTGRES_CONNECTION_STRING_SSL value>

Execute o aplicativo Quarkus localmente para testar a conexão de banco de dados remoto

Use este comando para executar o aplicativo localmente:

./mvnw clean quarkus:dev    # On Mac or Linux
mvnw.cmd clean quarkus:dev  # On Windows

Quando o Quarkus estiver em execução, crie algumas tarefas usando os seguintes comandos cURL em uma janela de terminal separada:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Quarkus MS Learn","details":"Take the MS Learn on deploying Quarkus to Azure Container Apps","done": "true"}' \
    http://127.0.0.1:8080/api/todos

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Azure Container Apps MS Learn","details":"Take the ACA Learn module","done": "false"}' \
    http://127.0.0.1:8080/api/todos

Em seguida, verifique se as tarefas pendentes estão no banco de dados acessando o endpoint GET definido na aplicação to-do.

curl http://127.0.0.1:8080/api/todos

Você deve ver a seguinte saída:

[
  {
    "id": 1,
    "description": "Take Quarkus MS Learn",
    "details": "Take the MS Learn on deploying Quarkus to Azure Container Apps",
    "done": true,
    "createdAt": "2025-02-26T08:03:28.390854Z"
  },
  {
    "id": 2,
    "description": "Take Azure Container Apps MS Learn",
    "details": "Take the ACA Learn module",
    "done": false,
    "createdAt": "2025-02-26T08:03:34.142249Z"
  }
]

Se você vir essa saída, você executou com êxito o aplicativo Quarkus e se conectou ao banco de dados remoto PostgreSQL.