Övning – Ange miljövariabler

Slutförd

Med miljövariabler kan du konfigurera programmet eller skriptet som containern körs dynamiskt. Du kan använda Azure CLI, PowerShell eller Azure-portalen för att ställa in variabler när du skapar containern. Skyddade miljövariabler förhindrar att känslig information visas i containerns utdata.

Skapa en Azure Cosmos DB-instans och använd miljövariabler för att skicka anslutningsinformationen till en Azure-containerinstans. En app i containern använder variablerna till att skriva och läsa data från Cosmos DB. Skapa både en miljövariabel och en skyddad miljövariabel så att du kan se skillnaden mellan dem.

Distribuera Azure Cosmos DB

  1. När du distribuerar Azure Cosmos DB anger du ett unikt databasnamn. I utbildningssyfte kör du det här kommandot i Cloud Shell för att skapa en Bash-variabel som innehåller ett unikt namn:

    COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
    
  2. Kör det här az cosmosdb create kommandot för att skapa din Azure Cosmos DB-instans:

    COSMOS_DB_ENDPOINT=$(az cosmosdb create \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query documentEndpoint \
      --output tsv)
    

    Det kan ta några minuter att köra kommandot.

    $COSMOS_DB_NAME anger ditt unika databasnamn. Kommandot skriver ut slutpunktsadressen för din databas. Här sparar kommandot den här adressen till Bash-variabeln COSMOS_DB_ENDPOINT.

  3. Kör az cosmosdb keys list för att hämta Azure Cosmos DB-anslutningsnyckeln och lagra den i en Bash-variabel med namnet COSMOS_DB_MASTERKEY:

    COSMOS_DB_MASTERKEY=$(az cosmosdb keys list \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query primaryMasterKey \
      --output tsv)
    

Distribuera en container som fungerar med din databas

Skapa en Azure-containerinstans som kan läsa från och skriva poster till din Azure Cosmos DB-instans.

De två miljövariabler som du skapade i den sista delen, COSMOS_DB_ENDPOINT och COSMOS_DB_MASTERKEY, lagrar värdena som du behöver för att ansluta till Azure Cosmos DB-instansen.

  1. Kör följande az container create kommando för att skapa containern:

    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 refererar till en containeravbildning som kör en fiktiv röstningsapp.

    Observera --environment-variables-argumentet. Det här argumentet anger miljövariabler som skickas till containern när containern startas. Containeravbildningen har konfigurerats för att leta efter dessa miljövariabler. Skicka namnet på Azure Cosmos DB-slutpunkten och dess anslutningsnyckel.

  2. az container show Kör kommandot för att hämta containerns offentliga IP-adress:

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query ipAddress.ip \
      --output tsv
    
  3. Gå till containerns IP-adress i en webbläsare.

    Viktigt!

    Ibland tar det en minut eller två containrar att starta helt och kunna ta emot anslutningar. Om det inte finns något svar när du går till IP-adressen i webbläsaren väntar du en stund och uppdaterar sidan.

    När appen är tillgänglig får du den här sidan:

    Skärmbild som visar Azure-röstningsprogrammet med två alternativ i en webbläsare. Katter och hundar.

    Prova att rösta på katter eller hundar. Varje röst lagras i din Azure Cosmos DB-instans.

Dölja anslutningsinformation genom att använda säkra miljövariabler

I föregående avsnitt använde du två miljövariabler för att skapa din container. Som standard är dessa miljövariabler tillgängliga via Azure-portalen och kommandoradsverktygen som oformaterad text.

I det här avsnittet får du lära dig hur du förhindrar att känslig information, till exempel anslutningsnycklar, visas i oformaterad text.

  1. Vi ska börja med att titta på det aktuella beteendet. Kör följande az container show kommando för att visa containerns miljövariabler:

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query containers[0].environmentVariables
    

    Du får utdata med båda värdena i oformaterad text. Här är ett exempel:

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": "https://aci-cosmos.documents.azure.com:443/"
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": "abcdefghijklmnopqrztuvwxyz0123456789=="
      }
    ]
    

    Även om dessa värden inte visas för användarna via röstningsprogrammet är det en bra säkerhetspraxis att se till att känslig information (till exempel anslutningsnycklar) inte lagras i oformaterad text.

    Med säkra miljövariabler förhindrar du att utdata visas i klartext. Använd argumentet i stället för argumentet om --environment-variables du vill använda säkra miljövariabler--secure-environment-variables.

  2. Kör följande kommando för att skapa en andra container med namnet aci-demo-secure som använder skyddade miljövariabler:

    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
    

    Observera användningen av argumentet --secure-environment-variables.

  3. Kör följande az container show kommando för att visa containerns miljövariabler:

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo-secure \
      --query containers[0].environmentVariables
    

    Den här gången kan du se att miljövariablerna inte visas i oformaterad text:

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": null
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": null
      }
    ]
    

    I själva verket visas inte värdena för dina miljövariabler alls. Det är helt i sin ordning eftersom dessa värden refererar till känslig information. Allt du behöver veta här är att miljövariablerna finns.