Definir variáveis de ambiente em instâncias de contentor

Definir variáveis de ambiente nas suas instâncias de contentor permite-lhe oferecer configuração dinâmica da aplicação ou do script executado pelo contentor. Isto é semelhante ao argumento da --env linha de comandos para docker run.

Para definir variáveis de ambiente num contentor, especifique-as quando criar uma instância de contentor. Este artigo mostra exemplos de definição de variáveis de ambiente quando inicia um contentor com a CLI do Azure, Azure PowerShell e o portal do Azure.

Por exemplo, se executar a imagem de contentor microsoft aci-wordcount , pode modificar o respetivo comportamento ao especificar as seguintes variáveis de ambiente:

NumWords: o número de palavras enviadas para STDOUT.

MinLength: o número mínimo de carateres numa palavra para que seja contado. Um número mais elevado ignora palavras comuns como "de" e "o".

Se precisar de transmitir segredos como variáveis de ambiente, Azure Container Instances suporta valores seguros para contentores do Windows e do Linux.

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Exemplo da CLI do Azure

Para ver o resultado predefinido do contentor aci-wordcount, execute-o primeiro com este comando az container create (sem variáveis de ambiente especificadas):

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

Para modificar o resultado, inicie um segundo contentor com o --environment-variables argumento adicionado, especificando valores para as variáveis NumWords e MinLength . (Este exemplo pressupõe que está a executar a CLI numa shell do Bash ou no Azure Cloud Shell. Se utilizar a Linha de Comandos do Windows, especifique as variáveis com aspas duplas, como --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'

Assim que o estado de ambos os contentores for apresentado como Terminado (utilize az container show para verificar o estado), apresente os registos com az container logs para ver a saída.

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

As saídas dos contentores mostram como modificou o comportamento do script do segundo contentor ao definir variáveis de ambiente.

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 exemplo

Definir variáveis de ambiente no PowerShell é semelhante à CLI, mas utiliza o -EnvironmentVariable argumento da linha de comandos.

Primeiro, inicie o contentor aci-wordcount na configuração predefinida com este comando New-AzContainerGroup :

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

Agora, execute o seguinte comando New-AzContainerGroup . Esta especifica as variáveis de ambiente NumWords e MinLength após preencher uma variável de matriz: envVars

$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
    )

Assim que o estado de ambos os contentores estiver Terminado (utilize Get-AzContainerInstanceLog para verificar o estado), puxe os registos com o comando Get-AzContainerInstanceLog .

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

O resultado de cada contentor mostra como modificou o script executado pelo contentor ao definir variáveis de ambiente.

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:\

portal do Azure exemplo

Para definir variáveis de ambiente quando inicia um contentor no portal do Azure, especifique-as na página Avançadas quando criar o contentor.

  1. Na página Avançadas, defina a política Reiniciar como Falha ativada
  2. Em Variáveis de ambiente, introduza NumWords com um valor de 5 para a primeira variável e introduza MinLength com um valor de 8 para a segunda variável.
  3. Selecione Rever + criar para verificar e, em seguida, implementar o contentor.

Página do portal a mostrar a variável de ambiente Ativar botões e caixas de texto

Para ver os registos do contentor, em Definições , selecione Contentores e, em seguida, Registos. Semelhante ao resultado apresentado nas secções anteriores da CLI e do PowerShell, pode ver como o comportamento do script foi modificado pelas variáveis de ambiente. São apresentadas apenas cinco palavras, cada uma com um comprimento mínimo de oito carateres.

Portal a mostrar a saída do registo de contentor

Valores seguros

Os objetos com valores seguros destinam-se a conter informações confidenciais, como palavras-passe ou chaves para a sua aplicação. Utilizar valores seguros para variáveis de ambiente é mais seguro e flexível do que incluí-lo na imagem do contentor. Outra opção é utilizar volumes secretos, descritos em Montar um volume secreto no Azure Container Instances.

As variáveis de ambiente com valores seguros não são visíveis nas propriedades do contentor– os respetivos valores só podem ser acedidos a partir do contentor. Por exemplo, as propriedades de contentor visualizadas no portal do Azure ou na CLI do Azure apresentam apenas o nome de uma variável segura e não o respetivo valor.

Defina uma variável de ambiente seguro ao especificar a secureValue propriedade em vez da normal value para o tipo da variável. As duas variáveis definidas no YAML seguinte demonstram os dois tipos de variáveis.

Implementação YAML

Crie um secure-env.yaml ficheiro com o seguinte fragmento.

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

Execute o seguinte comando para implementar o grupo de contentores com YAML (ajuste o nome do grupo de recursos conforme necessário):

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

Verificar variáveis de ambiente

Execute o comando az container show para consultar as variáveis de ambiente do contentor:

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

A resposta JSON mostra a chave e o valor da variável de ambiente insegura, mas apenas o nome da variável de ambiente seguro:

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

Com o comando az container exec , que permite executar um comando num contentor em execução, pode verificar se a variável de ambiente seguro foi definida. Execute o seguinte comando para iniciar uma sessão de bash interativa no contentor:

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

Depois de abrir uma shell interativa no contentor, pode aceder ao SECRET valor da variável:

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

Passos seguintes

Os cenários baseados em tarefas, como o processamento em lote de um conjunto de dados grande com vários contentores, podem beneficiar de variáveis de ambiente personalizadas no runtime. Para obter mais informações sobre a execução de contentores baseados em tarefas, veja Executar tarefas em contentores com políticas de reinício.