练习 - 设置环境变量

已完成

借助环境变量,可动态配置容器运行的应用程序或脚本。 创建容器时,可使用 Azure CLI、PowerShell 或 Azure 门户设置变量。 安全环境变量可防止容器输出中显示敏感信息。

创建 Azure Cosmos DB 实例,并使用环境变量将连接信息传递给 Azure 容器实例。 容器中的应用程序使用变量从 Azure Cosmos DB 写入并读取数据。 创建一个环境变量和一个安全环境变量,这样你就可以看到它们之间的区别。

部署 Azure Cosmos DB

  1. 部署 Azure Cosmos DB 时,需提供唯一的数据库名称。 为便于学习,请通过 Cloud Shell 运行此命令,以创建包含唯一名称的 Bash 变量:

    COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
    
  2. 运行此 az cosmosdb create 命令以创建 Azure Cosmos DB 实例:

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

    此命令可能需要几分钟才能完成。

    $COSMOS_DB_NAME 指定了唯一的数据库名称。 该命令会打印数据库的终结点地址。 在本课中,该命令将此地址保存到 Bash 变量 COSMOS_DB_ENDPOINT

  3. 运行 az cosmosdb keys list 以获取 Azure Cosmos DB 连接密钥,并将其存储在名为 COSMOS_DB_MASTERKEY 的 Bash 变量中:

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

部署适用于数据库的容器

创建一个 Azure 容器实例,该实例可读取和写入 Azure Cosmos DB 实例的记录。

你在上一部分 COSMOS_DB_ENDPOINTCOSMOS_DB_MASTERKEY 中创建的两个环境变量包含连接到 Azure Cosmos DB 实例所需的值。

  1. 运行以下 az container create 命令来创建容器:

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

    azuredocs/azure-vote-front:cosmosdb 指的是运行虚构投票应用的容器映像。

    请记下 --environment-variables 参数。 此参数指定了容器启动时传递给容器的环境变量。 容器映像配置为查找这些环境变量。 传递 Azure Cosmos DB 终结点的名称及其连接密钥。

  2. 运行 az container show 命令以获取容器的公共 IP 地址:

    az container show \
      --resource-group learn-deploy-aci-rg \
      --name aci-demo \
      --query ipAddress.ip \
      --output tsv
    
  3. 在浏览器中,转到容器的 IP 地址。

    重要

    有时,容器需要一到两分钟才能完全启动及能够接收连接。 如果在浏览器中转到该 IP 地址时没有响应,请稍等片刻并刷新页面。

    一旦应用可用,即可看到此页:

    显示浏览器中具有两个“猫”和“狗”这两个选项的 Azure 投票应用程序的屏幕截图。

    尝试为“猫”和“狗”投票。 每次投票都存储在 Azure Cosmos DB 实例中。

使用安全环境变量隐藏连接信息

在上一部分中,你使用了两个环境变量来创建容器。 默认情况下,可通过 Azure 门户和命令行工具以纯文本形式访问这些环境变量。

在本部分中,学习如何防止敏感信息(如连接密钥)以纯文本显示。

  1. 让我们首先看看当前行为。 运行以下 az container show 命令,显示容器的环境变量:

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

    你将得到包含两个纯文本值的输出。 下面是一个示例:

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

    虽然这些值不会通过投票应用程序显示给用户,但确保敏感信息(例如连接密钥)不以纯文本形式存储是一项很好的安全措施。

    安全环境变量可防止明文输出。 若要使用安全环境变量,请使用 --secure-environment-variables 参数而不是 --environment-variables 参数。

  2. 运行以下命令,再创建一个名为 aci-demo-secure 的容器,它使用安全环境变量:

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

    请注意 --secure-environment-variables 参数的使用。

  3. 运行以下 az container show 命令,显示容器的环境变量:

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

    此时,你可以看到环境变量不以纯文本形式显示:

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

    实际上,环境变量的值根本不会出现。 这不重要,因为这些值指的是敏感信息。 此处,你只需要知道环境变量的存在。