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. Esto es casi lo mismo que el 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. Consulte Instalación de Azure PowerShell para empezar. 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, por ejemplo --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 ha modificado 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.

  1. En la página Avanzado, establezca Directiva de reinicio en En caso de error.
  2. En Variables de entorno, escriba NumWords con un valor de 5 para la primera variable, y escriba MinLength con un valor de 8 para la segunda variable.
  3. Seleccione Revisar y crear para comprobar y, luego, implementar el contenedor.

Página del portal que muestra el botón Habilitar de la entorno variable y cuadros de texto

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 se ha modificado el comportamiento del script mediante las variables de entorno. Se muestran solo cinco palabras, cada una con una longitud mínima de ocho caracteres.

Portal que muestra la salida de los registros de contenedor

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 se ha establecido 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"

Cuando haya abierto 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.