Ejercicio: Configuración de Azure Container Apps

Completado

En esta unidad, creará un grupo de recursos de Azure que contiene los recursos de la aplicación. Después, configure la base de datos postgreSQL mediante la CLI de Azure. Por último, configure la aplicación Quarkus para acceder a la base de datos de PostgreSQL remota. Use un terminal de su elección para ejecutar los comandos.

Preparación del entorno de trabajo

Debe configurar algunas variables de entorno. Estas son algunas notas sobre las variables que creará:

Variable Descripción
AZ_PROJECT Nombre del proyecto. Para mantener este valor único, se recomienda usar AZ_PROJECT_<your initials>.
AZ_RESOURCE_GROUP Nombre del grupo de recursos que contiene los recursos.
AZ_LOCATION Región de Azure. Se recomienda usar una región cercana a la ubicación en la que vive. Para ver la lista de regiones disponibles, escriba az account list-locations en un símbolo del sistema.
AZ_CONTAINERAPP Nombre de la instancia de Azure Container Apps que contiene los contenedores.
AZ_CONTAINERAPP_ENV Nombre del entorno de Azure Container Apps.
AZ_POSTGRES_SERVER_NAME Nombre del servidor postgreSQL. No se permiten caracteres nonalphanumeric: -, _, !, $, #, %. El nombre debe ser único en Azure. Asegúrese de usar un identificador único.
AZ_POSTGRES_DB_NAME Nombre de la base de datos PostgreSQL. El nombre predeterminado de la base de datos postgreSQL es postgres.
AZ_POSTGRES_USERNAME Nombre de usuario de administrador predeterminado para el servidor de base de datos postgreSQL.
AZ_POSTGRES_PASSWORD Contraseña predeterminada para el servidor de base de datos postgreSQL. Use una contraseña segura.

Nota:

Puede asignar un nombre a los recursos de Azure de cualquier manera que desee, pero se recomienda revisar ejemplos de abreviatura para los recursos de Azure. En este artículo se proporcionan abreviaturas de ejemplo para muchos recursos de Azure (por ejemplo, rg para grupos de recursos y ca para aplicaciones contenedoras).

Use los siguientes comandos para configurar las variables. Asegúrese de modificar los valores como se describe en la tabla 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>}"

Estas variables de entorno se usan en el resto de este módulo.

A continuación, cree un grupo de recursos:

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

Creación de una instancia de Azure Database for PostgreSQL

Ahora creará un servidor postgreSQL administrado. Ejecute el comando siguiente para crear una pequeña instancia de Azure Database for PostgreSQL:

Si nunca ha creado un servidor PostgreSQL antes, debe registrar el proveedor. Para registrar el proveedor de PostgreSQL, ejecute el siguiente comando:

az provider register --namespace Microsoft.DBforPostgreSQL

A continuación, cree el servidor PostgreSQL.

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 crea un servidor de PostgreSQL pequeño que usa las variables que configuró anteriormente.

Configuración de Quarkus para acceder a la base de datos postgreSQL

Ahora conectará la aplicación Quarkus a la base de datos postgreSQL. Para ello, primero debe obtener la cadena de conexión de la base de datos:

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"

Tenga en cuenta la cadena de conexión que se devuelve.

Nota:

Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación descrito en este procedimiento, como para bases de datos, cachés, mensajería o servicios de inteligencia artificial, requiere un grado de confianza muy alto en la aplicación y conlleva riesgos que no están presentes en otros flujos. Use este flujo solo cuando las opciones más seguras, como las identidades administradas para conexiones sin contraseña o sin claves, no sean viables. En el caso de las operaciones de máquina local, prefiera identidades de usuario para conexiones sin contraseña o sin claves.

Configuración de la aplicación Quarkus para conectarse a la base de datos postgreSQL

Actualice el archivo application.properties en la carpeta src/main/resources del proyecto para configurar la cadena de conexión en la base de datos PostgreSQL. Para ello, establezca la propiedad quarkus.datasource.jdbc.url en el valor de $POSTGRES_CONNECTION_STRING_SSL de salida anterior. La &ssl=true&sslmode=require parte de la cadena de conexión obliga al controlador a usar SSL, un requisito para Azure Database for PostgreSQL.

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

Ejecute la aplicación Quarkus localmente para probar la conexión remota a la base de datos.

Use este comando para ejecutar la aplicación localmente:

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

Cuando se ejecuta Quarkus, cree unos cuantos para dos mediante los siguientes comandos cURL en una ventana de terminal independiente:

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

A continuación, compruebe que las tareas pendientes están en la base de datos accediendo al punto de conexión GET definido en la aplicación to-do:

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

Deberías ver la siguiente salida:

[
  {
    "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"
  }
]

Si ve esta salida, ha ejecutado correctamente la aplicación Quarkus y se ha conectado a la base de datos de PostgreSQL remota.