Ejercicio: establecimiento de variables de entorno

Las variables de entorno permiten configurar dinámicamente la aplicación o el script que ejecuta el contenedor. Puede usar Azure Portal, PowerShell o la CLI de Azure para establecer variables al crear el contenedor. Con las variables de entorno protegidas puede evitar que se muestre información confidencial en la salida del contenedor.

Aquí, creará una instancia de Azure Cosmos DB y usará variables de entorno para pasar la información de conexión a una instancia de contenedor de Azure. Una aplicación del contenedor usa las variables para leer y escribir datos desde Azure Cosmos DB. Va a crear una variable de entorno y una variable de entorno protegida para poder ver la diferencia entre ellas.

Implementación de Azure Cosmos DB

  1. Al implementar Azure Cosmos DB, debe proporcionar un nombre de base de datos único. Con fines de aprendizaje, ejecute este comando desde Cloud Shell para crear una variable Bash que contenga un nombre único.

    COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
    
  2. Ejecute este comando az cosmosdb create para crear la instancia de Azure Cosmos DB.

    COSMOS_DB_ENDPOINT=$(az cosmosdb create \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query documentEndpoint \
      --output tsv)
    

    Este comando puede tardar unos minutos en completarse.

    $COSMOS_DB_NAME especifica el nombre de la base de datos único. El comando imprime la dirección del punto de conexión para la base de datos. Aquí, el comando guarda la dirección en la variable Bash COSMOS_DB_ENDPOINT.

  3. Ejecute az cosmosdb keys list para obtener la clave de conexión de Azure Cosmos DB y almacénela en una variable Bash llamada COSMOS_DB_MASTERKEY.

    COSMOS_DB_MASTERKEY=$(az cosmosdb keys list \
      --resource-group learn-deploy-aci-rg \
      --name $COSMOS_DB_NAME \
      --query primaryMasterKey \
      --output tsv)
    

Implementación de un contenedor que funcione con la base de datos

Aquí podrá crear una instancia de contenedor de Azure que pueda leer y escribir registros en la instancia de Azure Cosmos DB.

Las variables de dos entornos que ha creado en la última parte, COSMOS_DB_ENDPOINT y COSMOS_DB_MASTERKEY, conservan los valores que necesita para conectarse a la instancia de Azure Cosmos DB.

  1. Ejecute el siguiente comando az container create para crear el contenedor.

    az container create \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --image microsoft/azure-vote-front:cosmosdb \
      --ip-address Public \
      --location eastus \
      --environment-variables \
        COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
        COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
    

    microsoft/azure-vote-front:cosmosdb hace referencia a una imagen de Docker que ejecuta una aplicación ficticia para votar.

    Tenga en cuenta el argumento --environment-variables. Este argumento especifica variables de entorno que se pasan al contenedor cuando este se inicia. La imagen de contenedor está configurada para buscar estas variables de entorno. En este caso, pase el nombre del punto de conexión de Azure Cosmos DB y su clave de conexión.

  2. Ejecute az container show para obtener la dirección IP pública de su contenedor.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query ipAddress.ip \
      --output tsv
    
  3. Desde un explorador, vaya a la dirección IP de su contenedor.

    Importante

    En ocasiones, los contenedores tardan uno o dos minutos en iniciarse de forma completa y poder recibir conexiones. Si no hay ninguna respuesta al navegar a la dirección IP en el explorador, espere unos minutos y actualice la página.

    Cuando la aplicación esté disponible, verá esto.

    Aplicación de votación de Azure con dos opciones: gatos o perros.

    Intente votar "Gatos" o "Perros". Cada voto se almacena en la instancia de Azure Cosmos DB.

Uso de variables de entorno protegido para ocultar la información de conexión

En la parte anterior, ha utilizado dos variables de entorno para crear el contenedor. De forma predeterminada, se puede acceder a las variables de entorno desde Azure Portal y en las herramientas de línea de comandos en texto sin formato.

En esta parte, obtendrá información sobre cómo impedir que se muestre información confidencial, como las claves de conexión, en texto sin formato.

  1. Empecemos viendo el comportamiento actual en acción. Ejecute el comando az container show siguiente para mostrar las variables de entorno de su contenedor.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query containers[0].environmentVariables
    

    Verá que ambos valores aparecen en texto sin formato. Aquí tiene un ejemplo.

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": "https://aci-cosmos.documents.azure.com:443/"
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": "Xm5BwdLlCllBvrR26V00000000S2uOusuglhzwkE7dOPMBQ3oA30n3rKd8PKA13700000000095ynys863Ghgw=="
      }
    ]
    

    Aunque estos valores no se muestren a los usuarios en la aplicación de votación, es una práctica de seguridad recomendada para garantizar que la información confidencial, como las claves de conexión, no se almacene como texto sin formato.

    La protección de las variables de entorno evita la salida de texto no cifrado. Para usar variables de entorno protegido, debe usar el argumento --secure-environment-variables en vez del argumento --environment-variables.

  2. Ejecute el siguiente comando para crear otro contenedor denominado aci-demo-secure que use variables de entorno protegido.

    az container create \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo-secure \
      --image microsoft/azure-vote-front:cosmosdb \
      --ip-address Public \
      --location eastus \
      --secure-environment-variables \
        COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
        COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
    

    Tenga en cuenta el uso del argumento --secure-environment-variables.

  3. Ejecute el comando az container show siguiente para mostrar las variables de entorno de su contenedor.

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo-secure \
      --query containers[0].environmentVariables
    

    Esta vez, verá que las variables de entorno no aparecen en texto sin formato.

    [
      {
        "name": "COSMOS_DB_ENDPOINT",
        "secureValue": null,
        "value": null
      },
      {
        "name": "COSMOS_DB_MASTERKEY",
        "secureValue": null,
        "value": null
      }
    ]
    

    De hecho, los valores de estas variables no aparecen por ningún lado. Y está bien que así sea, porque estos valores hacen referencia a información confidencial. En este caso, todo lo que necesita saber es que las variables de entorno existen.