Festlegen von Umgebungsvariablen in Container Instances

Das Festlegen von Umgebungsvariablen in Ihren Containerinstanzen ermöglicht es Ihnen, eine dynamische Konfiguration der Anwendung oder des Skripts bereitzustellen, die bzw. das vom Container ausgeführt wird. Dies ist vergleichbar mit dem Befehlszeilenargument --env für docker run.

Um Umgebungsvariablen in einem Container festzulegen, geben Sie diese bei der Erstellung einer Containerinstanz an. Dieser Artikel enthält Beispiele zum Festlegen von Umgebungsvariablen beim Starten eines Containers über die Azure CLI, mit Azure PowerShell und im Azure-Portal.

Wenn Sie z.B. das Microsoft-Containerimage aci-wordcount ausführen, können Sie dessen Verhalten ändern, indem Sie die folgenden Umgebungsvariablen angeben:

NumWords: Die Anzahl der Wörter, die an STDOUT gesendet wird.

MinLength: Die Mindestanzahl von Zeichen in einem Wort, damit es gezählt wird. Bei einem höheren Wert werden häufige Wörter wie „von“ und „das“ ignoriert.

Wenn Sie Geheimnisse als Umgebungsvariablen weitergeben müssen, unterstützt Azure Container Instances sichere Werte sowohl für Windows- als auch Linux-Container.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren des Azure Az PowerShell-Moduls. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Azure CLI-Beispiel

Um die Standardausgabe des Containers aci-wordcount anzuzeigen, führen Sie ihn zunächst mit diesem az container create-Befehl aus (ohne Umgebungsvariablen):

az container create \
    --resource-group myResourceGroup \
    --name mycontainer1 \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Um die Ausgabe zu ändern, starten Sie einen zweiten Container, wobei Sie das Argument --environment-variables hinzufügen und Werte für die Variablen NumWords und MinLength angeben. (In diesem Beispiel wird vorausgesetzt, dass Sie die CLI in einer Bash-Shell oder Azure Cloud Shell ausführen. Wenn Sie die Windows-Eingabeaufforderung verwenden, geben Sie die Variablen in doppelten Anführungszeichen an, z. B. --environment-variables "NumWords"="5" "MinLength"="8".)

az container create \
    --resource-group myResourceGroup \
    --name mycontainer2 \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure \
    --environment-variables 'NumWords'='5' 'MinLength'='8'

Sobald für beide Container der Status Beendet angezeigt wird, (verwenden Sie az container show zum Überprüfen des Status), zeigen Sie deren Protokolle mit az container logs an, um die Ausgabe zu sehen.

az container logs --resource-group myResourceGroup --name mycontainer1
az container logs --resource-group myResourceGroup --name mycontainer2

Die Ausgaben der Container zeigen, wie Sie die das Skriptverhalten des zweiten Containers durch Festlegen von Umgebungsvariablen geändert haben.

mycontainer1

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

mycontainer2

[('CLAUDIUS', 120),
 ('POLONIUS', 113),
 ('GERTRUDE', 82),
 ('ROSENCRANTZ', 69),
 ('GUILDENSTERN', 54)]

Azure PowerShell-Beispiel

Das Festlegen von Umgebungsvariablen in PowerShell ähnelt dem Vorgang über die Befehlszeilenschnittstelle, es wird jedoch das Befehlszeilenargument -EnvironmentVariable verwendet.

Starten Sie zuerst den Container aci-wordcount in seiner Standardkonfiguration mit diesem New-AzContainerGroup-Befehl:

New-AzContainerGroup `
    -ResourceGroupName myResourceGroup `
    -Name mycontainer1 `
    -Image mcr.microsoft.com/azuredocs/aci-wordcount:latest

Führen Sie nun den folgenden New-AzContainerGroup-Befehl aus. Dieser gibt die Umgebungsvariablen NumWords und MinLength nach dem Auffüllen einer Arrayvariablen (envVars) an:

$envVars = @(
    New-AzContainerInstanceEnvironmentVariableObject -Name "NumWords" -Value "5"
    New-AzContainerInstanceEnvironmentVariableObject -Name "MinLength" -Value "8"
)

$containerGroup = New-AzContainerGroup -ResourceGroupName "myResourceGroup" `
    -Name "mycontainer2" `
    -Image "mcr.microsoft.com/azuredocs/aci-wordcount:latest" `
    -RestartPolicy "OnFailure" `
    -Container @(
        New-AzContainerGroupContainer -Name "mycontainer2" `
            -EnvironmentVariable $envVars
    )

Sobald für beide Container der Status Beendet angezeigt wird (verwenden Sie Get-AzContainerInstanceLog zum Überprüfen des Status), rufen Sie mit dem Get-AzContainerInstanceLog-Befehl deren Protokolle ab.

Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2

Die Ausgabe für jeden Container zeigt, wie Sie das vom Container ausgeführte Skript durch Festlegen von Umgebungsvariablen geändert haben.

PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

Azure:\
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
[('CLAUDIUS', 120),
 ('POLONIUS', 113),
 ('GERTRUDE', 82),
 ('ROSENCRANTZ', 69),
 ('GUILDENSTERN', 54)]

Azure:\

Azure-Portal-Beispiel

Um Umgebungsvariablen beim Starten eines Containers im Azure-Portal festzulegen, geben Sie diese auf der Seite Erweitert an, wenn Sie den Container erstellen.

  1. Legen Sie auf der Seite Erweitert die Neustartrichtlinie auf Bei einem Fehler fest.
  2. Geben Sie unter Umgebungsvariablen die Variable NumWords mit dem Wert 5 als erste Variable und MinLength mit dem Wert 8 als zweite Variable ein.
  3. Wählen Sie Überprüfen + erstellen aus, um den Container zu überprüfen, und stellen Sie ihn dann bereit.

Portalseite mit Umgebungsvariable, Aktivieren-Schaltfläche und Textfeldern

Wählen Sie zum Anzeigen der Protokolle des Containers unter Einstellungen die Option Container und dann Protokolle aus. Ähnlich wie in der in den vorherigen Abschnitten zur Befehlszeilenschnittstelle und zu PowerShell angezeigten Ausgabe sehen Sie, wie das Skriptverhalten durch die Umgebungsvariablen geändert wurde. Nur fünf Wörter werden angezeigt, jeweils mit einer minimalen Länge von acht Zeichen.

Portal mit der Containerprotokollausgabe

Sichere Werte

Objekte mit sicheren Werten sind zur Aufbewahrung sensibler Informationen wie Passwörter oder Schlüssel für Ihre Anwendung gedacht. Die Verwendung von sicheren Werten für Umgebungsvariablen ist sowohl sicherer als auch flexibler als die Einbindung in Ihr Containerimage. Eine andere Möglichkeit ist die Verwendung von geheimen Volumes, wie in Einbinden eines geheimen Volumes in Azure Container Instances beschrieben.

Umgebungsvariablen mit sicheren Werten sind in den Eigenschaften Ihres Containers nicht sichtbar – der Zugriff auf ihre Werte ist nur von innerhalb des Containers möglich. Beispielsweise wird in den Containereigenschaften, die im Azure-Portal oder in der Azure CLI angezeigt werden, nur der Name einer sicheren Variablen angezeigt, nicht ihr Wert.

Legen Sie eine sichere Umgebungsvariable fest, indem Sie für den Variablentypen den secureValue-Wert anstelle des normalen value angeben. Die in der folgenden YAML definierten zwei Variablen veranschaulichen die zwei Variablentypen.

YAML-Bereitstellung

Erstellen Sie eine secure-env.yaml-Datei mit dem folgenden Ausschnitt.

apiVersion: 2019-12-01
location: eastus
name: securetest
properties:
  containers:
  - name: mycontainer
    properties:
      environmentVariables:
        - name: 'NOTSECRET'
          value: 'my-exposed-value'
        - name: 'SECRET'
          secureValue: 'my-secret-value'
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Führen Sie den folgenden Befehl zum Bereitstellen der Containergruppe mit YAML aus (passen Sie den Namen der Ressourcengruppe nach Bedarf an):

az container create --resource-group myResourceGroup --file secure-env.yaml

Überprüfen von Umgebungsvariablen

Führen Sie den Befehl az container show aus, um die Umgebungsvariablen für Ihren Container abzufragen:

az container show --resource-group myResourceGroup --name securetest --query 'containers[].environmentVariables'

Die JSON-Antwort zeigt Schlüssel und Wert der unsicheren Umgebungsvariablen an, aber nur den Namen der sicheren Umgebungsvariablen:

[
  [
    {
      "name": "NOTSECRET",
      "secureValue": null,
      "value": "my-exposed-value"
    },
    {
      "name": "SECRET",
      "secureValue": null,
      "value": null
    }
  ]
]

Mit dem Befehl az container exec, der die Ausführung eines Befehls aus einem laufenden Container heraus ermöglicht, können Sie überprüfen, ob die sichere Umgebungsvariable festgelegt wurde. Führen Sie den folgenden Befehl aus, um eine interaktive Bash-Sitzung im Container zu starten:

az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/sh"

Wenn Sie eine interaktive Shell innerhalb des Containers geöffnet haben, können Sie auf den Wert der SECRET-Variablen zugreifen:

root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET
my-secret-value

Nächste Schritte

Aufgabenbasierte Szenarien, z. B. Stapelverarbeitung eines großen Datasets mit mehreren Containern, können von benutzerdefinierten Umgebungsvariablen zur Laufzeit profitieren. Weitere Informationen zum Ausführen aufgabenbasierter Container finden Sie unter Ausführen von Aufgaben in Containern mit Neustartrichtlinien.