Condividi tramite


Creare un database di Azure per PostgreSQL con un'app Web in una rete virtuale

Questo articolo illustra come creare un'app Web del servizio app di Azure con un server flessibile di Database di Azure per PostgreSQL all'interno di una rete virtuale.

In questo articolo vengono illustrate le operazioni seguenti:

  • Creare un’istanza del server flessibile di Database di Azure per PostgreSQL in una rete virtuale
  • Creare un'app Web
  • Aggiungere l'app Web alla rete virtuale
  • Connettersi al server flessibile di Database di Azure per PostgreSQL dall'app Web

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Installa Azure CLI versione 2.0 o successiva localmente (o usa Azure Cloud Shell, che include Azure CLI preinstallato). Per vedere la versione installata, eseguire il comando az --version.

  • Accedere all'account con il comando az login. Si noti la proprietà id dell'output del comando per il nome della sottoscrizione corrispondente.

    az login
    
  • Se sono presenti più sottoscrizioni, scegliere la sottoscrizione appropriata per la fatturazione della risorsa. Selezionare l'ID sottoscrizione specifico nell'account usando il comando az account set.

    az account set --subscription <subscription ID>
    

Creare un'istanza del server flessibile

Creare un database Azure privato per un'istanza server flessibile PostgreSQL all'interno di una rete virtuale utilizzando il comando seguente:

az postgres flexible-server create --resource-group demoresourcegroup --name demoserverpostgres --vnet demoappvnet --location westus2

Questo comando esegue le azioni seguenti, che potrebbero richiedere alcuni minuti:

  • Crea il gruppo di risorse se non esiste già.
  • Genera un nome del server se non ne viene specificato uno.
  • Crea una rete virtuale e una subnet per l'istanza del server flessibile di Database di Azure per PostgreSQL.
  • Crea il nome utente e la password dell'amministratore per il server, se non li fornisci.
  • Crea un database vuoto denominato postgres.

Di seguito è riportato l'output di esempio.

Creating Resource Group 'demoresourcegroup'...
Creating new Vnet "demoappvnet" in resource group "demoresourcegroup"
Creating new Subnet "Subnetdemoserverpostgres" in resource group "demoresourcegroup"
Creating a private dns zone demoserverpostgres.private.postgres.database.azure.com in resource group "demoresourcegroup"
Creating PostgreSQL Server 'demoserverpostgres' in group 'demoresourcegroup'...
Your server 'demoserverpostgres' is using sku 'Standard_D2s_v3' (Paid Tier). Please refer to https://aka.ms/postgres-pricing for pricing details
Creating PostgreSQL database 'flexibleserverdb'...
Make a note of your password. If you forget, you would have to reset your password with "az postgres flexible-server update -n demoserverpostgres -g demoresourcegroup -p <new-password>".
Try using 'az postgres flexible-server connect' command to test out connection.
{
  "connectionString": "postgresql://generated-username:generated-password@demoserverpostgres.postgres.database.azure.com/postgres?sslmode=require",
  "host": "demoserverpostgres.postgres.database.azure.com",
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/demoresourcegroup/providers/Microsoft.DBforPostgreSQL/flexibleServers/demoserverpostgres",
  "location": "East US",
  "password": "generated-password",
  "resourceGroup": "demoresourcegroup",
  "skuname": "Standard_D2s_v3",
  "subnetId": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/demoresourcegroup/providers/Microsoft.Network/virtualNetworks/demoappvnet/subnets/Subnetdemoserverpostgres",
  "username": "generated-username",
  "version": "12"
}

Creare un'app Web

In questa sezione si crea un host di app in un'app del Servizio app, si connette l'app al database Azure per PostgreSQL in modalità server flessibile e quindi si distribuisce il codice in tale host. Nel terminale assicurarsi di trovarsi nella radice del repository del codice dell'applicazione. Il piano Basic non supporta l'integrazione della rete virtuale. Usare il piano Standard o Premium.

Creare un'app di App Service (processo host) utilizzando il comando az webapp up.

az webapp up --resource-group demoresourcegroup --location westus2 --plan testappserviceplan --sku P2V2 --name mywebapp

Annotazioni

  • Per il _--location_ argument, utilizzare la stessa posizione usata per il database nella sezione precedente.
  • Sostituire <app-name> con un nome univoco in tutto Azure. I caratteri consentiti per <app-name> sono A-Z, 0-9 e -. Un criterio valido consiste nell'usare una combinazione del nome della società e di un identificatore dell'app.

Questo comando esegue le azioni seguenti, che potrebbero richiedere alcuni minuti:

  • Crea il gruppo di risorse se non esiste già. In questo comando si usa lo stesso gruppo di risorse in cui è stato creato il database in precedenza.
  • Crea l'app del Servizio app se non esiste.
  • Abilita la registrazione predefinita per l'app, se non è già abilitata.
  • Carica il repository usando la distribuzione ZIP con l'automazione della compilazione abilitata.

Creare una subnet per l'app web

Prima di abilitare l'integrazione della rete virtuale, è necessaria una subnet delegata ad App Service Web App. Prima di creare la subnet, visualizzare l'indirizzo della subnet del database per evitare di usare lo stesso prefisso di indirizzo per la subnet dell'app Web.

az network vnet show --resource-group demoresourcegroup -n demoappvnet

Esegui il seguente comando per creare una nuova subnet nella stessa rete virtuale dell'istanza flessibile del server di Database di Azure per PostgreSQL. Aggiornare il prefisso dell'indirizzo per evitare conflitti con la subnet del server flessibile di Azure Database per PostgreSQL.

az network vnet subnet create --resource-group demoresourcegroup --vnet-name demoappvnet --name webappsubnet  --address-prefixes 10.0.1.0/24  --delegations Microsoft.Web/serverFarms

Aggiungere l'app Web alla rete virtuale

Usare il comando az webapp vnet-integration per aggiungere un'integrazione di rete virtuale a livello di area a un'app Web.

az webapp vnet-integration add --resource-group demoresourcegroup -n  mywebapp --vnet demoappvnet --subnet webappsubnet

Configurare le variabili di ambiente per la connessione del database

Dopo aver distribuito il codice in App Service, collegare l'app all'istanza server flessibile Database di Azure per PostgreSQL in Azure. Il codice dell'app prevede di trovare informazioni sul database in numerose variabili di ambiente. Per impostare le variabili di ambiente nel servizio app, usare il comando az webapp config appsettings set .

az webapp config appsettings set  --name mywebapp --settings DBHOST="<postgres-server-name>.postgres.database.azure.com" DBNAME="postgres" DBUSER="<username>" DBPASS="<password>"
  • Sostituire postgres-server-name, nome utente e password con i valori per l'istanza del server flessibile di Database di Azure per PostgreSQL appena creata.

  • Sostituire <username> e <password> con le credenziali generate automaticamente dal comando.

  • Il gruppo di risorse e il nome dell'app provengono dai valori memorizzati nella cache nel file .azure/config.

  • Il comando crea impostazioni denominate DBHOST, DBNAME, DBUSER e DBPASS. Se il codice dell'applicazione usa nomi diversi per le informazioni sul database, usare tali nomi per le impostazioni dell'app come indicato nel codice.

Configurare l'app Web in modo da consentire tutte le connessioni in uscita dalla rete virtuale.

az webapp config set --name mywebapp --resource-group demoresourcegroup --generic-configurations '{"vnetRouteAllEnabled": true}'

Pulire le risorse

Pulire tutte le risorse create nell'articolo usando il comando seguente. Questo comando elimina tutte le risorse incluse in questo gruppo di risorse.

az group delete -n demoresourcegroup