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. Esse recurso é 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. Para começar, consulte Instalar o Azure PowerShell. 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ê execute a CLI em um Shell do Bash ou no Azure Cloud Shell. Se você usar 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 de 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.
- Na página Avançado, defina a Política de reinicialização como Em caso de falha
- Em Variáveis de ambiente, insira
NumWords
com um valor de5
para a primeira variável e digiteMinLength
com um valor de8
para a segunda variável. - Selecione Examinar + criar para verificar o contêiner e depois implantá-lo.
Para exibir os logs do contêiner, em Configurações, selecione Contêineres e, em seguida, Logs. Semelhante à saída mostrada nas seções anteriores da CLI e do PowerShell, você pode ver como as variáveis de ambiente alteram o comportamento do script. Apenas cinco palavras são exibidas, cada uma com um comprimento mínimo de oito caracteres.
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 a execução de um comando em um contêiner em execução, você pode verificar se a variável de ambiente seguro está 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, você poderá 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.