Esercizio - Impostare le variabili di ambiente

Completato

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

  1. 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
    
  2. 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 Bash COSMOS_DB_ENDPOINT.

  3. Eseguire az cosmosdb keys list per ottenere la chiave di connessione di Azure Cosmos DB e archiviarla in una variabile Bash denominata COSMOS_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.

  1. 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.

  2. 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
    
  3. 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:

    Screenshot that shows the Azure voting application with two choices in a browser. Cats and Dogs.

    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.

  1. 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": "Xm5BwdLlCllBvrR26V00000000S2uOusuglhzwkE7dOPMBQ3oA30n3rKd8PKA13700000000095ynys863Ghgw=="
      }
    ]
    

    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.

  2. 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.

  3. 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.