Übung: Festlegen von Umgebungsvariablen

Abgeschlossen

Umgebungsvariablen ermöglichen eine dynamische Konfiguration der Anwendung oder des Skripts, die bzw. das der Container ausführt. Sie können entweder die Azure-Befehlszeilenschnittstelle, PowerShell oder das Azure-Portal verwenden, um Variablen bei der Containererstellung festzulegen. Abgesicherte Umgebungsvariablen werden zum Schutz vor der Preisgabe vertraulicher Informationen in der Ausgabe von Containern verwendet.

Erstellen Sie eine Azure Cosmos DB-Instanz, und verwenden Sie Umgebungsvariablen, um die Verbindungsinformationen an eine Azure-Containerinstanz zu übergeben. Eine Anwendung im Container nutzt die Variablen, um Azure Cosmos DB-Daten zu schreiben und zu lesen. Erstellen Sie sowohl eine Umgebungsvariable als auch eine abgesicherte Umgebungsvariable, damit Sie den Unterschied zwischen den beiden sehen.

Bereitstellen von Azure Cosmos DB

  1. Wenn Sie Azure Cosmos DB bereitstellen, geben Sie einen eindeutigen Datenbanknamen an. Führen Sie zu Lernzwecken diesen Befehl in Cloud Shell aus, um so eine Bash-Variable zu erstellen, die einen eindeutigen Namen enthält:

    COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
    
  2. Führen Sie den Befehl az cosmosdb create aus, um die Azure Cosmos DB-Instanz zu erstellen:

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

    Die Ausführung dieses Befehls kann einige Minuten dauern.

    $COSMOS_DB_NAME gibt den Namen der eindeutigen Datenbank an. Der Befehl gibt die Endpunktadresse für Ihre Datenbank aus. Hier speichert der Befehl diese Adresse in der Bash-Variable COSMOS_DB_ENDPOINT.

  3. Führen Sie az cosmosdb keys list aus, um den Azure Cosmos DB-Verbindungsschlüssel abzurufen und ihn in einer Bash-Variable namens COSMOS_DB_MASTERKEY zu speichern:

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

Bereitstellen eines Containers für die Verwendung mit Ihrer Datenbank

Erstellen Sie eine Azure-Containerinstanz, die Datensätze lesen und in die Azure Cosmos DB-Instanz schreiben kann.

Die beiden Umgebungsvariablen, die Sie im letzten Teil erstellt haben, COSMOS_DB_ENDPOINT und COSMOS_DB_MASTERKEY, enthalten die Werte, die Sie für die Verbindung mit der Azure Cosmos DB-Instanz benötigen.

  1. Führen Sie den folgenden Befehl az container create aus, um den Container zu erstellen:

    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 bezieht sich auf ein Containerimage, das eine fiktive Abstimmungsanwendung ausführt.

    Achten Sie auf das Argument --environment-variables. Dieses Argument gibt Umgebungsvariablen an, die an den Container bei dessen Start übergeben werden. Das Containerimage ist für die Suche nach diesen Umgebungsvariablen konfiguriert. Übergeben Sie den Namen des Azure Cosmos DB-Endpunkts und den zugehörigen Verbindungsschlüssel.

  2. Führen Sie den Befehl az container show aus, um die öffentliche IP-Adresse des Containers abzurufen:

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query ipAddress.ip \
      --output tsv
    
  3. Navigieren Sie in einem Browser zur IP-Adresse Ihres Containers.

    Wichtig

    Manchmal dauert es einige Minuten, bis Container vollständig betriebsbereit sind und Verbindungen annehmen können. Wenn beim Navigieren zur IP-Adresse in Ihrem Browser keine Reaktion erfolgt, warten Sie einen Moment, und aktualisieren Sie dann die Seite.

    Wenn die App verfügbar ist, wird diese Seite angezeigt:

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

    Geben Sie testweise eine Stimme für Katzen oder Hunde ab. Jede Abstimmung wird in der Azure Cosmos DB-Instanz gespeichert.

Verwenden sicherer Umgebungsvariablen zum Ausblenden von Verbindungsinformationen

Im vorherigen Abschnitt haben Sie zwei Umgebungsvariablen verwendet, um Ihren Container zu erstellen. Standardmäßig sind diese Umgebungsvariablen im Azure-Portal und in Befehlszeilentools als Nur-Text verfügbar.

In diesem Teil erfahren Sie, wie Sie verhindern können, dass vertrauliche Informationen, z. B. Verbindungsschlüssel, als Nur-Text angezeigt werden.

  1. Sehen Sie sich zunächst das aktuelle Verhalten in Aktion an. Führen Sie den folgenden Befehl az container show aus, um die Umgebungsvariablen für den Container anzuzeigen:

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

    Sie erhalten die Ausgabe mit beiden Werten im Nur-Text-Format. Hier sehen Sie ein Beispiel:

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

    Diese Werte werden Ihren Benutzer*innen in der Abstimmungsanwendung nicht angezeigt. Dennoch ist es in Hinblick auf die Sicherheit eine gute Übung, darauf zu achten, dass vertrauliche Informationen wie Verbindungsschlüssel nicht im Nur-Text-Format gespeichert werden.

    Abgesicherte Umgebungsvariablen verhindern die Klartextausgabe. Verwenden Sie das Argument --secure-environment-variables statt --environment-variables, um sichere Umgebungsvariablen zu verwenden.

  2. Führen Sie den folgenden Befehl aus, um einen zweiten Container mit dem Namen aci-demo-secure zu erstellen, der abgesicherte Umgebungsvariablen verwendet:

    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
    

    Achten Sie auf die Verwendung des Arguments --secure-environment-variables.

  3. Führen Sie den folgenden Befehl az container show aus, um die Umgebungsvariablen für den Container anzuzeigen:

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

    Diesmal können Sie sehen, dass die Umgebungsvariablen nicht als Nur-Text angezeigt werden:

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

    Tatsächlich werden die Werte der Umgebungsvariablen gar nicht angezeigt. Das ist in Ordnung, denn diese Werte beziehen sich auf vertrauliche Informationen. An dieser Stelle müssen Sie nur wissen, dass die Umgebungsvariablen vorhanden sind.