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.
- Na página Avançadas, defina a política Reiniciar como Falha ativada
- Em Variáveis de ambiente, introduza
NumWords
com um valor de5
para a primeira variável e introduzaMinLength
com um valor de8
para a segunda variável. - Selecione Rever + criar para verificar e, em seguida, implementar o contentor.
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.
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.