Esercizio - Configurare App contenitore di Azure

Completato

In questa unità viene creato un gruppo di risorse di Azure che contiene le risorse per l'applicazione. Quindi si configura il database PostgreSQL usando l'interfaccia della riga di comando di Azure. Infine, si configurerà quindi l'applicazione Quarkus per accedere al database PostgreSQL remoto. Usare un terminale di propria scelta per eseguire i comandi.

Preparare l'ambiente di lavoro

È necessario configurare alcune variabili di ambiente. Di seguito sono riportate alcune note sulle variabili che verranno create:

Variabile Descrizione
AZ_PROJECT Nome del progetto. Per mantenere questo valore univoco, è consigliabile usare AZ_PROJECT_<your initials>.
AZ_RESOURCE_GROUP Nome del gruppo di risorse che contiene le risorse.
AZ_LOCATION Area di Azure. È consigliabile usare un'area vicina al luogo in cui si vive. Per vedere l'elenco delle aree disponibili, immettere az account list-locations al prompt dei comandi.
AZ_CONTAINERAPP Nome dell’istanza di App contenitore di Azure che contiene i contenitori.
AZ_CONTAINERAPP_ENV Nome dell'ambiente App contenitore di Azure.
AZ_POSTGRES_SERVER_NAME il nome del server PostgreSQL. I caratteri non alfanumerici non sono consentiti: -, _, !, $, #, %. Il nome in Azure deve essere univoco. Assicurarsi di usare un identificatore univoco.
AZ_POSTGRES_DB_NAME Nome del database PostgreSQL. Il nome predefinito del database PostgreSQL è postgres.
AZ_POSTGRES_USERNAME Nome dell’utente amministratore predefinito per il server di database PostgreSQL.
AZ_POSTGRES_PASSWORD Password predefinita per il server di database PostgreSQL. Usare una password di protezione.

Nota

È possibile assegnare alle risorse Azure il nome che si desidera, ma si consiglia di consultare Esempi di abbreviazione per le risorse di Azure. Questo articolo fornisce abbreviazioni di esempio per molte risorse di Azure, ad esempio rg per i gruppi di risorse e ca per le app contenitore.

Usare i comandi seguenti per configurare le variabili. Assicurarsi di modificare i valori come descritto nella tabella precedente.

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>}"

Queste variabili di ambiente vengono nel resto del modulo.

Successivamente, creare un gruppo di risorse:

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

Creare un'istanza di Database di Azure per PostgreSQL

A questo punto, verrà creato un server PostgreSQL gestito. Eseguire il comando seguente per creare una piccola istanza di Database di Azure per 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"

Questo comando crea un piccolo server PostgreSQL che usa le variabili configurate in precedenza.

Configurare Quarkus per accedere al database PostgreSQL

A questo punto si connetterà l'applicazione Quarkus al database PostgreSQL. A tale scopo, è prima necessario ottenere la stringa di connessione per il database:

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&sslmode=require"

echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"

Notare la stringa di connessione restituita.

Configurare l'applicazione Quarkus per la connessione al database PostgreSQL

Aggiornare il file application.properties nella cartella src/main/resources del progetto per configurare la stringa di connessione al database PostgreSQL. A tale scopo, impostare la proprietà quarkus.datasource.jdbc.url sul valore $POSTGRES_CONNECTION_STRING_SSL output precedente. La parte &ssl=true&sslmode=require della stringa di connessione impone al driver di usare SSL, un requisito di Database di Azure per PostgreSQL.

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

Eseguire l'applicazione Quarkus in locale per testare la connessione dati remota

Usare questo comando per eseguire l'applicazione in locale:

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

Quando Quarkus è in esecuzione, creare alcune attività usando i comandi cURL seguenti in una finestra separata del terminale:

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

Verificare quindi che le attività siano presenti nel database accedendo all'endpoint GET definito nell'app attività:

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

Verrà visualizzato l'output seguente:

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container Apps MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   }
]

Se viene visualizzato questo output, l'applicazione Quarkus è stata eseguita correttamente e si è connessi al database PostgreSQL remoto.