Esercizio - Impostare le variabili di ambiente
Le variabili di ambiente consentono di configurare in modo dinamico l'applicazione o lo script eseguiti dal contenitore. Per impostare le variabili quando si crea il contenitore, è possibile usare l'interfaccia della riga di comando di Azure, PowerShell o il portale di Azure. Le variabili di ambiente protetto evitano che informazioni sensibili vengano visualizzate nell'output del contenitore.
Creare un'istanza di Azure Cosmos DB e usare variabili di ambiente per passare le informazioni di connessione a un'istanza di contenitore di Azure. Un'applicazione nel contenitore usa le variabili per scrivere e leggere i dati da Azure Cosmos DB. Creare sia una variabile di ambiente che una variabile di ambiente protetto in modo da poterne comprendere le differenze.
Distribuire Azure Cosmos DB
Quando si distribuisce Azure Cosmos DB viene specificato un nome di database univoco. Ai fini dell'apprendimento, eseguire questo comando in Cloud Shell per creare una variabile Bash contenente un nome univoco:
COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
Eseguire il comando
az cosmosdb create
per creare l'istanza di Azure Cosmos DB:COSMOS_DB_ENDPOINT=$(az cosmosdb create \ --resource-group learn-deploy-aci-rg \ --name $COSMOS_DB_NAME \ --query documentEndpoint \ --output tsv)
Il completamento del comando può richiedere alcuni minuti.
$COSMOS_DB_NAME
specifica il nome di database univoco. Il comando stampa l'indirizzo dell'endpoint per il database. In questo caso, il comando salva questo indirizzo nella variabile BashCOSMOS_DB_ENDPOINT
.Eseguire
az cosmosdb keys list
per ottenere la chiave di connessione di Azure Cosmos DB e archiviarla in una variabile Bash denominataCOSMOS_DB_MASTERKEY
:COSMOS_DB_MASTERKEY=$(az cosmosdb keys list \ --resource-group learn-deploy-aci-rg \ --name $COSMOS_DB_NAME \ --query primaryMasterKey \ --output tsv)
Distribuire un contenitore da usare con il database
Creare un'istanza di contenitore di Azure in grado di leggere e scrivere record sull'istanza di Azure Cosmos DB.
Le due variabili di ambiente create nell'ultima parte, COSMOS_DB_ENDPOINT
e COSMOS_DB_MASTERKEY
, contengono i valori necessari per la connessione all'istanza di Azure Cosmos DB.
Eseguire il comando
az container create
seguente per creare il contenitore:az container create \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \ --ip-address Public \ --location eastus \ --environment-variables \ COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \ COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
azuredocs/azure-vote-front:cosmosdb si riferisce a un'immagine del contenitore che esegue un'app di voto fittizia.
Si noti l'argomento
--environment-variables
. Questo argomento specifica le variabili di ambiente passate al contenitore al momento dell'avvio. L'immagine del contenitore è configurata per la ricerca di queste variabili di ambiente. Passare il nome dell'endpoint di Azure Cosmos DB e la relativa chiave di connessione.Eseguire il comando
az container show
per ottenere l'indirizzo IP pubblico del contenitore:az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --query ipAddress.ip \ --output tsv
In un browser accedere all'indirizzo IP del contenitore.
Importante
A volte l'avvio completo dei contenitori richiede uno o due minuti prima che siano in grado di ricevere connessioni. Se non si riceve alcuna risposta quando si passa all'indirizzo IP nel browser, attendere qualche istante e aggiornare la pagina.
Quando l'app è disponibile, viene visualizzata questa pagina:
Provare a votare per cani o gatti. Ogni voto viene archiviato nell'istanza di Azure Cosmos DB.
Usare le variabili di ambiente protetto per nascondere le informazioni di connessione
Nella sezione precedente sono state usate due variabili di ambiente per creare il contenitore. Per impostazione predefinita, queste variabili di ambiente sono accessibili tramite il portale di Azure e gli strumenti da riga di comando in testo normale.
In questa sezione si apprenderà come evitare che informazioni riservate, ad esempio le chiavi di connessione, siano visualizzate in testo normale.
Iniziare osservando il comportamento attuale. Eseguire il comando
az container show
seguente per visualizzare le variabili di ambiente del contenitore:az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --query containers[0].environmentVariables
Si ottiene l'output con entrambi i valori in testo normale. Ecco un esempio:
[ { "name": "COSMOS_DB_ENDPOINT", "secureValue": null, "value": "https://aci-cosmos.documents.azure.com:443/" }, { "name": "COSMOS_DB_MASTERKEY", "secureValue": null, "value": "abcdefghijklmnopqrztuvwxyz0123456789==" } ]
Anche se questi valori non vengono visualizzati agli utenti tramite l'applicazione di voto, è buona norma garantire che le informazioni sensibili, ad esempio le chiavi di connessione, non vengono archiviate in testo normale.
Le variabili di ambiente protetto impediscono l'output di testo non crittografato. Per usare le variabili di ambiente protetto, usare l'argomento
--secure-environment-variables
anziché l'argomento--environment-variables
.Eseguire il comando seguente per creare un secondo contenitore denominato aci-demo-secure che usa le variabili di ambiente protetto:
az container create \ --resource-group learn-deploy-aci-rg \ --name aci-demo-secure \ --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \ --ip-address Public \ --location eastus \ --secure-environment-variables \ COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \ COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
Si noti l'uso dell'argomento
--secure-environment-variables
.Eseguire il comando
az container show
seguente per visualizzare le variabili di ambiente del contenitore:az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo-secure \ --query containers[0].environmentVariables
Si può notare che questa volta le variabili di ambiente non vengono visualizzate in testo normale:
[ { "name": "COSMOS_DB_ENDPOINT", "secureValue": null, "value": null }, { "name": "COSMOS_DB_MASTERKEY", "secureValue": null, "value": null } ]
In realtà i valori delle variabili di ambiente non vengono visualizzati affatto. Questo comportamento è corretto poiché questi valori si riferiscono a informazioni riservate. In questo caso è sufficiente sapere che le variabili di ambiente esistono.