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


Инструменты командной строки Azure для разработчиков и часто задаваемые вопросы о среде

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

Общие вопросы

В следующем разделе рассматриваются общие azd вопросы о инструментах и средах.

Как удалить интерфейс командной строки разработчика Azure?

Существуют различные варианты удаления azd в зависимости от того, как вы изначально установили его. Дополнительные детали см. на странице установки.

Какова разница между интерфейсом командной строки разработчика Azure и Azure CLI?

Azure CLI разработчика (azd) и Azure CLI (az) являются средствами командной строки, но они помогают выполнять различные задачи.

azd фокусируется на рабочем процессе разработчика высокого уровня. Помимо подготовки и управления ресурсами Azure, azd помогает сшить облачные компоненты, конфигурацию локальной разработки и автоматизацию конвейеров вместе в полное решение.

Azure CLI — это средство уровня управления для создания и администрирования инфраструктуры Azure, таких как виртуальные машины, виртуальные сети и хранилище. Azure CLI разработан вокруг детализированных команд для конкретных административных задач.

Для получения дополнительной информации посетите Azure Developer CLI в сравнении с Azure CLI.

Что такое имя среды?

Azure CLI для разработчиков использует имя среды для установки переменной среды AZURE_ENV_NAME, используемой шаблонами CLI для разработчиков Azure. AZURE_ENV_NAME также используется для префикса имени группы ресурсов Azure. Так как каждая среда имеет собственный набор конфигураций, Azure CLI разработчика сохраняет все файлы конфигурации в каталогах среды.

├── .Azure                          [This directory displays after you run `azd init` or `azd up`]
│   ├── <your environment1>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └── <your environment2>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └──config.json

Дополнительные сведения о рабочих процессах см. в azd init и azd up.

Можно ли настроить несколько сред?

Да. Можно настроить различные среды (например, разработку, тестирование, рабочую среду). Для управления этими средами можно использовать azd env .

Где хранится файл конфигурации среды (ENV)?

Путь к файлу .env — <your-project-directory-name>\.azure\<your-environment-name>\.env. Дополнительные сведения см. в разделе "Управление переменными среды".

Как используется env-файл?

В Azure Developer CLI команды azd используют .env-файл для конфигурации среды. Такие команды, как azd deploy, также обновляют .env файл, добавляя, например, строку подключения к базе данных и конечную точку Azure Key Vault.

Я запустил azd up в Codespaces. Можно ли продолжить работу в локальной среде разработки?

Да. Вы можете продолжить разработку локально.

  1. Запустите azd init -t <template repo>, чтобы клонировать проект шаблона на локальный компьютер.
  2. Чтобы загрузить существующее окружение, созданное с помощью Codespaces, выполните azd env refresh. Убедитесь, что вы указали то же имя среды, подписку и расположение, что и раньше.

Как выполнить проверку подлинности в Codespaces, если у входа устройства возникла проблема?

Если возникают проблемы с проверкой подлинности кода устройства в codespaces (например, повторяющиеся запросы или ошибки 2FA), попробуйте выполнить следующее обходное решение с помощью VS Code Desktop:

  1. Откройте пространство Codespace в VS Code Desktop с помощью одного из следующих методов:
    • Используйте палитру команд (CTRL+SHIFT+P на Windows или Cmd+SHIFT+P в MacOs) и выберите Codespaces: Open in VS Code Desktop.
    • Щелкните левый нижний угол пространства Кода в браузере и выберите "Открыть в VS Code Desktop").
  2. В терминале VS Code Desktop запустите azd auth login и выполните проверку подлинности на основе браузера.
  3. После проверки подлинности закройте VS Code Desktop и вернитесь в пространство Codespace в браузере. Состояние проверки подлинности должно сохраняться.

Как используется файл azure.yaml?

Файл azure.yaml описывает приложения и типы ресурсов Azure, включенных в шаблон.

Что такое поведение secretOrRandomPassword функции?

Функция secretOrRandomPassword извлекает секрет из Azure Key Vault если указаны параметры для имени и секрета хранилища ключей. Если эти параметры не указаны или не удается извлечь секрет, функция возвращает вместо этого созданный случайным образом пароль.

В следующем примере показан распространенный вариант использования secretOrRandomPassword в файле main.parameters.json. Переменные ${AZURE_KEY_VAULT_NAME} и sqlAdminPassword передаются в качестве аргументов, содержащих имена Key Vault и секретного ключа. Если значение не удается извлечь, создается случайный пароль.

"sqlAdminPassword": {
    "value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
}

Выходные данные secretOrRandomPassword также должны быть сохранены в Key Vault, используя Bicep для будущих запусков. Получение и повторное использование одних и тех же секретов в процессе развертывания может предотвратить ошибки или непреднамеренное поведение, которое может возникать при неоднократном создании новых значений. Чтобы создать Key Vault и сохранить в нем созданный секрет, используйте приведенный ниже код Bicep. Полный пример кода для этих модулей можно просмотреть в репозитории Azure cli разработчика GitHub.

module keyVault './core/security/keyvault.bicep' = {
name: 'keyvault'
scope: resourceGroup
params: {
    name: '${take(prefix, 17)}-vault'
    location: location
    tags: tags
    principalId: principalId
}
}

module keyVaultSecrets './core/security/keyvault-secret.bicep' = {
name: 'keyvault-secret-sqlAdminPassword'
scope: resourceGroup
params: {
    keyVaultName: keyVault.outputs.name
    name: 'sqlAdminPassword'
    secretValue: sqlAdminPassword
}
}]

Эта Bicep настройка включает следующий рабочий процесс для управления секретами:

  1. Если указанный секрет существует, он извлекается из Key Vault с помощью функции secretOrRandomPassword.
  2. Если секрет не существует, создается Key Vault, а случайным образом созданный секрет хранится внутри него.
  3. В будущих развертываниях метод secretOrRandomPassword извлекает сохраненный секрет теперь, когда он существует в Key Vault. Key Vault не будет повторно создан, если он уже существует, но то же значение секрета будет сохранено еще раз для следующего запуска.

Можно ли использовать бесплатную подписку Azure?

Да, но каждое Azure расположение может иметь только одно развертывание. Если вы уже использовали выбранное Azure расположение, вы увидите ошибку развертывания:

InvalidTemplateDeployment: The template deployment '<env_name>' isn't valid according to the validation procedure. The tracking ID is '<tracking_id>'. See inner errors for details.

Чтобы устранить проблему, можно выбрать другое Azure расположение.

Мое приложение, размещенное на Azure App Service, активирует предупреждение "Впереди сайт, который может вводить в заблуждение". Как исправить его?

Это может произойти из-за нашего метода именования ресурсов.

Наши созданные шаблоны Azure dev позволяют настраивать имя ресурса. Для этого можно добавить запись в main.parameters.json в папку infra. Рассмотрим пример.

"webServiceName": {
    "value": "my-unique-name"
}

Эта запись создает новый ресурс с именем "my-unique-name" вместо случайного значения, такого как "app-web-aj84u2adj", при следующем развертывании вашего приложения. Можно вручную удалить старую группу ресурсов с помощью портала Azure или запустить azd down, чтобы удалить все предыдущие развертывания. После удаления ресурсов запустите azd provision, чтобы создать их снова с новым именем.

Это имя должно быть глобально уникальным, в противном случае вы получите ошибку ARM во время azd provision при попытке создать ресурс.

Можно ли работать с несколькими клиентами Azure?

Да. Чтобы пройти проверку подлинности с помощью определенного арендатора, используйте --tenant-id параметр с azd auth login командой.

azd auth login --tenant-id <tenant-id>

Кроме того, если вы хотите azd получить доступ ко всем арендаторам, можно сначала обработать вызовы Многофакторной аутентификации (MFA) в браузере:

  1. Откройте Azure Portal в браузере.
  2. Переключитесь на каждого арендатора поочередно. Это действие вызывает необходимые проверки MFA и обновляет ваши токены.
  3. Запустите azd auth login в терминале. azd будет использовать существующий сеанс браузера и маркеры доступа, которые теперь действительны для всех посещаемых арендаторов.

Можно ли выполнять azd up несколько раз?

Да. Мы используем инкрементальный режим развертывания. Дополнительные сведения см. в статье azd up.

Provisioning

В следующем разделе рассматривается процесс развертывания azd.

Можно ли выполнять azd provision несколько раз?

Да. Мы используем добавочный режим развертывания. Дополнительные сведения см. в статье azd provision.

azd provision Как команда знает, какие ресурсы необходимо подготовить?

Команда использует шаблоны Bicep, которые находятся в разделе <your-project-directory-name>/infra для подготовки ресурсов Azure.

Где можно найти информацию о том, какие ресурсы развернуты в Azure?

Перейдите к https://portal.azure.com, а затем найдите группу ресурсов, которая называется rg-<your-environment-name>.

Как найти дополнительные сведения об ошибках Azure?

Мы используем шаблоны Bicep, которые находятся под <your-project-directory-name>/infra, для развертывания ресурсов Azure. Если возникли проблемы, мы добавим сообщение об ошибке в выходные данные ИНТЕРФЕЙСА командной строки.

Вы также можете перейти к https://portal.azure.com, а затем найти вашу группу ресурсов — rg-<your-environment-name>. Если одно из развертываний завершается сбоем, выберите ссылку об ошибке, чтобы получить дополнительные сведения.

Для получения других сведений см. статью Устранение распространенных ошибок развертывания в Azure — Azure Resource Manager.

Существует ли файл журнала для azd provision?

Скоро. Эта функция планируется в будущем выпуске.

Развертывание

Следующий раздел сосредоточен на процессе развертывания azd.

Можно ли выполнять azd deploy несколько раз?

Да. Дополнительные сведения см. в azd deploy .

Как azd находит ресурс Azure для развертывания моего кода?

Во время развертывания azd сначала обнаруживает все группы ресурсов, составляющие приложение, путем поиска групп, помеченных azd-env-name и значением, соответствующим имени среды. Затем он перечисляет все ресурсы в каждой из этих групп ресурсов, ищет ресурс, помеченный azd-service-name со значением, соответствующим имени службы из azure.yaml.

Хотя мы рекомендуем использовать теги для ресурсов, можно также использовать resourceName свойство в azure.yaml для предоставления явного имени ресурса. В этом случае приведенная выше логика не выполняется.

Как внедрить определенные службы в проекте, пропуская другие?

При развертывании проекта можно выбрать развертывание определенных служб, указав имя службы в команде (т. е. azd deploy api) или перейдя к вложенной папке, содержащей только службы, которые нужно развернуть. При этом все остальные службы будут перечислены как - Skipped.

Если вы не хотите пропускать службы, обязательно запустите команду из корневой папки или добавьте флаг --all в команду.

Конфигурация конвейера

В следующем разделе основное внимание уделяется конфигурации конвейера CI/CD.

Что такое объект службы Azure?

Служебный принципал Azure — это удостоверение, созданное для использования с приложениями, размещенными сервисами и автоматизированными средствами для доступа к ресурсам Azure. Этот доступ ограничен ролями, назначенными субъекту-службе, что позволяет контролировать доступ к ресурсам и на каком уровне. Дополнительные сведения об аутентификации из Azure в GitHub см. в разделе Connect GitHub и Azure | Microsoft Docs.

Нужно ли создать service principal Azure перед запуском azd pipeline config?

Нет. Команда azd pipeline config заботится о создании учетной записи службы Azure и выполнении всех необходимых шагов для сохранения секретов в вашем репозитории GitHub.

Какие секреты хранятся в GitHub?

Команда хранит четыре секрета в GitHub: AZURE_CREDENTIALS, AZURE_ENV_NAME, AZURE_LOCATION и AZURE_SUBSCRIPTION_ID. Вы можете переопределить значение каждого секрета, перейдя к https://github.com/<your-github-account>/<your-repo>/secrets/actions.

Что такое OpenID Connect (OIDC) и поддерживается ли он?

С помощью OpenID Connect ваши рабочие процессы могут получать короткоживущие токены непосредственно из Azure.

Хотя OIDC поддерживается по умолчанию для GitHub Actions и проектов Azure (установлено как federated), он не поддерживается для Azure DevOps или Terraform.

  • Для Azure DevOps указание --auth-type как federated приведет к ошибке.
  • Для Terraform:
    • Если --auth-type не определен, он вернется к clientcredentials и приведет к предупреждению.
    • Если --auth-type явно установлен на federated, это приведет к ошибке.

Как восстановить доступ к учетной записи службы Azure, хранящейся в GitHub Actions?

Перейдите к https://github.com/<your-github-account>/<your-repo>settings/secrets/actions, а затем обновите AZURE_CREDENTIALS, скопировав и вставив весь объект JSON для нового служебного главного объекта. Рассмотрим пример.

{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}

Где хранится файл GitHub Actions?

Путь к файлу GitHub Actions — <your-project-directory-name>\.github\workflows\azure-dev.yml. Дополнительные сведения см. в справочнике Быстрый старт: создание служебного принципала и запуск действия GitHub.

Можно ли развернуть только код на этапе сборки в файле azure-dev.yml?

Да. Замените run: azd up --no-prompt на run: azd deploy --no-prompt.

Где можно найти журнал для задания GitHub Actions, активированного при запуске azd pipeline config?

Перейдите к https://github.com/<your-github-account>/<your-repo>/actions, а затем обратитесь к файлу журнала запуска рабочего процесса.

Локальное создание приложения-контейнера

Почему я не могу локально запустить приложение контейнера, которое я создаю?

При локальном создании приложений контейнеров необходимо запустить azd auth login в контейнере, чтобы приложение работало с AzureDeveloperCliCredential. В качестве альтернативы, вы могли бы настроить ваше приложение для использования служебного пользователя вместо AzureDeveloperCliCredential.