Establecimiento de variables de entorno en instancias de contenedor
El establecimiento de variables de entorno en las instancias de contenedor le permite proporcionar configuración dinámica de la aplicación o el script ejecutados por el contenedor. Esta característica es similar al argumento de línea de comandos --env
para docker run
.
Para establecer las variables de entorno en un contenedor, debe especificarlas al crear una instancia del contenedor. En este artículo se muestran ejemplos de cómo establecer variables de entorno cuando se inicia un contenedor con la CLI de Azure, Azure PowerShell y Azure Portal.
Por ejemplo, si ejecuta la imagen de contenedor aci-wordcount, puede modificar su comportamiento mediante la especificación de las siguientes variables de entorno:
NumWords: El número de palabras enviadas a STDOUT.
MinLength: El número mínimo de caracteres en una palabra para que se tenga en cuenta. Un número mayor omite palabras comunes como "de" y "la".
Si tiene que pasar secretos como variables de entorno, Azure Container Instances admite valores seguros tanto en contenedores Windows como Linux.
Nota:
Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Ejemplo de la CLI de Azure
Para ver la salida predeterminada del contenedor aci-wordcount, ejecútelo en primer lugar con el comando az container create (sin variables de entorno especificadas):
az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure
Para modificar la salida, inicie un segundo contenedor con el argumento --environment-variables
agregado y especifique valores para las variables NumWords y MinLength. (En este ejemplo, se supone que ejecuta la CLI en un shell de Bash o en Azure Cloud Shell. Si usa el símbolo del sistema de Windows, especifique las variables con comillas dobles, 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'
Una vez que el estado de ambos contenedores se muestre como Finalizado (use az container show para comprobar el estado), muestre sus registros con az container logs para ver la salida.
az container logs --resource-group myResourceGroup --name mycontainer1
az container logs --resource-group myResourceGroup --name mycontainer2
Las salidas de los contenedores muestra cómo modificó el comportamiento de script del segundo contenedor estableciendo las variables de entorno.
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)]
Ejemplo de Azure PowerShell
El establecimiento de las variables de entorno en PowerShell es similar a la CLI, pero usa el argumento de línea de comandos -EnvironmentVariable
.
En primer lugar, inicie el contenedor aci-wordcount en su configuración predeterminada con el comando New-AzContainerGroup:
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name mycontainer1 `
-Image mcr.microsoft.com/azuredocs/aci-wordcount:latest
Ahora, ejecute el siguiente comando New-AzContainerGroup. Este especifica las variables de entorno NumWords y MinLength después de rellenar una variable 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
)
Una vez que el estado de ambos contenedores es Finalizado (use Get-AzContainerInstanceLog para comprobar dicho estado), extraiga sus registros con el comando Get-AzContainerInstanceLog.
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
La salida de cada contenedor muestra cómo ha modificado la ejecución del script mediante el contenedor estableciendo las variables de entorno.
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:\
Ejemplo de Azure Portal
Para establecer las variables de entorno cuando inicia un contenedor en Azure Portal, especifíquelas en la página Avanzado cuando cree el contenedor.
- En la página Avanzado, establezca Directiva de reinicio en En caso de error.
- En Variables de entorno, escriba
NumWords
con un valor de5
para la primera variable, y escribaMinLength
con un valor de8
para la segunda variable. - Seleccione Revisar y crear para comprobar y, luego, implementar el contenedor.
Para ver los registros del contenedor, en Configuración, seleccione Contenedores y luego Registros. De forma similar a la salida que se muestra en las secciones de la CLI y PowerShell anteriores, puede ver cómo las variables de entorno cambian el comportamiento del script. Se muestran solo cinco palabras, cada una con una longitud mínima de ocho caracteres.
Protección de valores
Los objetos con valores seguros están diseñados para contener información confidencial, como contraseñas o claves de la aplicación. Utilizar valores seguros para las variables de entorno es más confiable y más flexible que incluirlas en la imagen de su contenedor. Otra opción consiste en utilizar volúmenes secretos, según se describe en Montaje de un volumen secreto en Azure Container Instances.
Las variables de entorno con valores seguros no son visibles en las propiedades del contenedor, solo se tiene acceso a los valores desde dentro del contenedor. Por ejemplo, las propiedades del contenedor que se visualizan en Azure Portal o con la CLI de Azure solo muestran el nombre de una variable segura, no su valor.
Establezca una variable de entorno segura especificando la propiedad secureValue
en lugar del valor value
habitual para el tipo de variable. Las dos variables definidas en el siguiente YAML demuestran los dos tipos de variable.
Implementación de YAML
Cree un archivo secure-env.yaml
con el siguiente fragmento de código.
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
Ejecute el siguiente comando para implementar el grupo de contenedores con YAML (ajuste el nombre del grupo de recursos según sea necesario):
az container create --resource-group myResourceGroup --file secure-env.yaml
Verificación de las variables de entorno
Ejecute el comando az container show para consultar las variables de entorno del contenedor:
az container show --resource-group myResourceGroup --name securetest --query 'containers[].environmentVariables'
La respuesta JSON muestra la clave y el valor de la variable de entorno no segura, sino únicamente el nombre de la variable de entorno segura:
[
[
{
"name": "NOTSECRET",
"secureValue": null,
"value": "my-exposed-value"
},
{
"name": "SECRET",
"secureValue": null,
"value": null
}
]
]
Puede comprobar que está establecida la variable de entorno segura con el comando az container exec, que permite ejecutar un comando en un contenedor en ejecución. Ejecute el siguiente comando para iniciar una sesión de Bash interactiva en el contenedor:
az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/sh"
Una vez que abra un shell interactivo dentro del contenedor, tendrá acceso al valor de la variable SECRET
:
root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET
my-secret-value
Pasos siguientes
Los escenarios basados en tareas, como el procesamiento por lotes de un gran conjunto de datos con varios contenedores, pueden aprovechar las variables de entorno personalizadas en tiempo de ejecución. Para más información sobre cómo ejecutar contenedores basados en tareas, consulte Ejecución de tareas en contenedores con directivas de reinicio.