Definir variáveis de ambiente em instâncias de contêiner

A definição de variáveis de ambiente nas suas instâncias de contêiner permitem fornecer a configuração dinâmica do aplicativo ou script executado pelo contêiner. Isso é semelhante ao argumento de linha de comando --env para docker run.

Para definir variáveis de ambiente em um contêiner, especifique-as ao criar uma instância de contêiner. Este artigo mostra exemplos da definição de variáveis de ambiente ao iniciar um contêiner com a CLI do Azure, o Azure PowerShell e o portal do Azure.

Por exemplo, se você executar a imagem de contêiner aci-wordcount da Microsoft, poderá modificar o comportamento especificando as variáveis de ambiente a seguir:

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

MinLength: O número mínimo de caracteres em uma palavra a serem contados. Um número mais alto ignora palavras comuns como "de" e "a" ou “o”.

Se for necessário passar segredos como variáveis de ambiente, as Instâncias de Contêiner do Azure dão suporte a valores seguros para contêineres do Windows e do Linux.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Exemplos de CLI do Azure

Para ver a saída padrão do contêiner aci-wordcount, execute-a primeiro com o 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 a saída, inicie um segundo contêiner com o argumento --environment-variables incluído, especificando valores para as variáveis NumWords e MinLength. (Este exemplo pressupõe que você esteja executando a CLI em um shell do Bash ou Azure Cloud Shell. Se você está usando o prompt de comando 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'

Quando o estado de ambos os contêineres for exibido como Encerrado (use az container show para verificar o estado), exiba os registros 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 contêineres mostram como você modificou o comportamento do script do segundo contêiner definindo 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)]

Exemplo de Azure PowerShell

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

Primeiro, inicie o contêiner aci-wordcount na configuração padrão com o comando New-AzContainerGroup:

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

Em seguida, execute o comando New-AzContainerGroup. Este especifica as variáveis de ambiente NumWords e MinLength depois de 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
    )

Quando o estado de ambos os contêineres for Encerrado (use Get-AzContainerInstanceLog para verificar o estado), efetue pull dos logs com o comando Get-AzContainerInstanceLog.

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

A saída de cada contêiner mostra como você modificou o script executado pelo contêiner, definindo 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:\

Exemplo do portal do Azure

Para definir variáveis de ambiente ao iniciar um contêiner no portal do Azure, especifique-as na página Avançado ao criar o contêiner.

  1. Na página Avançado, defina a Política de reinicialização como Em caso de falha
  2. Em Variáveis de ambiente, insira NumWords com um valor de 5 para a primeira variável e digite MinLength com um valor de 8 para a segunda variável.
  3. Selecione Examinar + criar para verificar o contêiner e depois implantá-lo.

Página do portal mostrando a variável de ambiente Habilitar botão e caixas de texto

Para exibir os logs do contêiner, em Configurações, selecione Contêineres e, em seguida, Logs. Semelhante à saída mostrada nas seções CLI e PowerShell anteriores, é possível ver como o comportamento do script foi modificado pelas variáveis de ambiente. Apenas cinco palavras são exibidas, cada uma com um comprimento mínimo de oito caracteres.

Portal mostrando a saída do log de contêiner

Valores seguros

Objetos com valores seguros servem para proteger informações confidenciais como senhas ou chaves para seu aplicativo. Usar valores seguros para variáveis de ambiente é mais seguro e flexível do que incluí-los na imagem de contêiner. Outra opção é usar os volumes secretos, descritos em Montar um volume secreto em Instâncias de Contêiner do Azure.

Variáveis de ambiente com valores seguros não são visíveis nas propriedades do contêiner – os valores podem ser acessados somente por dentro do contêiner. Por exemplo, as propriedades de contêiner exibidas no portal do Azure ou na CLI do Azure exibirão apenas o nome de uma variável segura, mas não o valor.

A variável de ambiente seguro podem ser definida especificando a propriedade secureValue em vez de value para o tipo da variável. As duas variáveis definidas no YAML a seguir demonstram os dois tipos de variável.

Implantação do YAML

Crie um arquivo secure-env.yaml com o snippet a seguir.

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 implantar o grupo de contêineres com YAML (ajuste o nome do grupo de recursos conforme necessário):

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

Verifique as variáveis de ambiente

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

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

A resposta JSON mostra a chave e o valor de ambiente não seguro, 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 dentro de um contêiner em execução, é possível verificar se a variável de ambiente seguro foi definida. Execute o comando a seguir para iniciar uma sessão interativa de busca no contêiner:

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

Depois de abrir um shell interativo dentro do contêiner, é possível acessar o valor da variável SECRET:

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

Próximas etapas

Cenários baseados em tarefas, como o processamento em lote de um grande conjunto de dados com vários contêineres, podem se beneficiar de variáveis de ambiente personalizadas no runtime. Para obter mais informações sobre a execução de contêineres com base em tarefas, consulte Executar tarefas em contêineres com políticas de reinicialização.