Поделиться через


Часто задаваемые вопросы о переменных среды

В этой статье приведены ответы на часто задаваемые вопросы о работе с переменными среды и интерфейсом командной строки разработчика Azure (azd).

Каковы различия между azd переменными среды и системными переменными среды?

azd Переменные среды хранятся в файле в .env .azure/<environment name> каталоге проекта и отличаются от переменных среды системы или ОС. azd Переменные среды настраивают задачи подготовки и развертывания шаблонов и доступны с помощью таких команд, как azd env или azd env get-values.

Снимок экрана: структура папки среды.

Системные переменные среды не доступны напрямую с помощью azd команд и должны управляться с помощью пользовательских скриптов оболочки или PowerShell, как правило, с помощью azd перехватчиков.

Могут ли azd команды напрямую считывать и записывать системные переменные среды?

Нет, azd команды не могут считывать или записывать системные переменные среды. Такие команды, как azd env set или azd env get-values работают со значениями, хранящимися в файле шаблона .env для определенной azd среды. azd среды управляются с помощью вложенных папок в .azure/<environment name> каталоге шаблона проекта, что позволяет шаблону иметь несколько сред. Вложенные папки среды содержат файлы конфигурации, такие как .env описание среды.

Используйте пользовательские оболочки или скрипты PowerShell с перехватчиками для azd чтения или записи переменных среды на уровне системы.

Что такое связь между выходными переменными, заданными в main.bicep переменных файла и azd среды?

Выходные переменные, заданные main.bicep в файле файла, автоматически хранятся в .env файле azd шаблона. Рассмотрим следующие выходные переменные в main.bicep файле инфраструктуры шаблона:

output API_BASE_URL string = api.outputs.SERVICE_API_URI
output REACT_APP_WEB_BASE_URL string = web.outputs.SERVICE_WEB_URI

После успешного azd up выполнения или azd azd provisionзаписи этих двух переменных .env в файл в .azure/<environment name> каталоге проекта:

API_BASE_URL="<example-api-url>"
output REACT_APP_WEB_BASE_URL="<example-app-url>"

Затем вы можете получить доступ к этим переменным из .env файла с помощью azd env get-values.

Какие переменные среды задаются в .env файле по умолчанию?

Следующие переменные среды задаются в .env файле по умолчанию:

Имя Описание Пример значений Когда доступно
AZURE_ENV_NAME Имя используемой среды. todo-app-dev При создании среды (после запуска azd init или azd env new, например).
AZURE_LOCATION Расположение используемой среды. eastus2 Перед первой подготовкой среды.
AZURE_PRINCIPAL_ID Запущенный пользователь или субъект-служба. 925cff12-ffff-4e9f-9580-8c06239dcaa4 Определяется автоматически во время подготовки (эфемерный).
AZURE_SUBSCRIPTION_ID Целевая подписка. 925cff12-ffff-4e9f-9580-8c06239dcaa4 Перед первой подготовкой среды.
SERVICE_<service>_IMAGE_NAME Полное имя образа контейнера, опубликованного в Реестр контейнеров Azure для служб приложений контейнеров. todoapp/web-dev:azdev-deploy-1664988805 После успешной публикации containerapp образа

Получение azd переменных среды с помощью azd env get-values команды.

azd env get-values

Ниже приведены распространенные причины доступа к azd переменным среды:

  • Выполните дополнительную настройку в скриптах перехватчика.
  • .env Предоставление значений из шаблона в платформу кода приложения, например Node.js или .NET.
  • Запись значений .env в системные переменные среды.

Совет

Используйте осторожность при настройке системных переменных среды, так как они могут привести к конфликтам с другими шаблонами, которые используют те же имена переменных среды.

Разделы справки вручную задать новую azd переменную среды?

Задайте дополнительные azd переменные среды с помощью azd env set команды, указав ключ и значение для переменной.

Ниже приведены распространенные причины установки azd переменных среды:

  • Доступ к сведениям о ресурсах Azure, созданным во время подготовки, необходимой во время развертывания.
  • Переопределите или измените значения переменных среды по умолчанию azd .
  • Укажите дополнительные пользовательские значения конфигурации для использования в подготовке, развертывании или пользовательских скриптах.
azd env set MY_KEY MyValue

Разделы справки копировать или записывать azd переменные среды в виде системных переменных среды?

В некоторых сценариях может потребоваться скопировать azd переменные среды в другой файл среды или в системную среду для использования языковыми платформами. Например, можно использовать URL-адреса конечных точек из подготовленных служб Azure для подключения к этим службам в коде приложения. Используйте пользовательские скрипты для получения azd переменных среды, а затем задайте их в качестве системных переменных среды. Обычно эти скрипты выполняются как перехватчики во время жизненного azd цикла, как показано в следующем примере:

Примечание.

Используйте осторожность при копировании azd переменных среды в локальную систему или другие операционные среды. Системные переменные среды с соответствующими именами могут быть выбраны и вызваны конфликтами azd между различными шаблонами или разными azd azd средами.

postprovision:
    windows:
        shell: pwsh
        run: ./scripts/map-env-vars.ps1
        interactive: false
        continueOnError: false
    posix:
        shell: sh
        run: ./scripts/map-env-vars.sh
        interactive: false
        continueOnError: false

Приведенный в ссылке скрипт оболочки для Linux извлекает azd переменные среды и экспортирует их в виде системных переменных среды:

echo "Loading azd .env file from current environment..."

while IFS='=' read -r key value; do
    value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
    export "$key=$value"
done <<EOF
$(azd env get-values)
EOF

Указанный сценарий PowerShell для Windows извлекает azd переменные среды и экспортирует их в виде системных переменных среды:

Write-Host "Loading azd .env file from current environment"
foreach ($line in (& azd env get-values)) {
    if ($line -match "([^=]+)=(.*)") {
        $key = $matches[1]
        $value = $matches[2] -replace '^"|"$'
        [Environment]::SetEnvironmentVariable($key, $value)
    }
}

Следующие шаги