Упражнение. Настройка переменных среды

Завершено

Переменные среды позволяют динамически настраивать приложение или скрипт запуска контейнера. Чтобы установить значения переменных при создании контейнера, используйте 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 и сохранить его в переменной Bash с именем COSMOS_DB_MASTERKEY:

    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_ENDPOINT и COSMOS_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-адресу в браузере нет ответа, подождите несколько минут и обновите страницу.

    После того как приложение будет доступно, вы получите следующую страницу:

    Screenshot that shows the Azure voting application with two choices in a browser. Cats and Dogs.

    Попробуйте проголосовать за кошек или собак. Каждый голос сохраняется в экземпляре 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": "Xm5BwdLlCllBvrR26V00000000S2uOusuglhzwkE7dOPMBQ3oA30n3rKd8PKA13700000000095ynys863Ghgw=="
      }
    ]
    

    Хотя эти значения не отображаются для пользователей через приложение для голосования, рекомендуется обеспечить безопасность, чтобы конфиденциальная информация (например, ключи подключения) не хранилась в виде обычного текста.

    Защищенные переменные среды предотвращают отображение выходных данных в виде обычного текста. Чтобы использовать безопасные переменные среды, используйте --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
      }
    ]
    

    На самом деле их значения не отображаются вообще. Это хорошо, потому что они представляют собой конфиденциальную информацию. Все, что вам нужно знать, — это то, что эти переменные среды существуют.