Развертывание в инфраструктуре Azure с помощью GitHub Actions
В этом руководстве мы рассмотрим, как использовать CI/CD и инфраструктуру как код (IaC) для развертывания в Azure с помощью GitHub Actions в автоматизированном и повторяемом режиме.
В этой статье представлен обзор архитектуры и представлено структурированное решение для разработки приложения в Azure, которое является масштабируемым, безопасным, устойчивым и высокодоступным. Чтобы просмотреть более реальные примеры облачных архитектур и идей решения, просмотрите архитектуры Azure.
Преимущества использования IaC и автоматизации для развертываний
Существует множество способов развертывания в Azure, включая портал Azure, CLI, API и многое другое. В этом руководстве мы будем использовать автоматизацию IaC и CI/CD. Этот подход отличается следующими преимуществами.
Декларативный: при определении процесса инфраструктуры и развертывания в коде его можно использовать версию и проверить с помощью стандартного жизненного цикла разработки программного обеспечения. IaC также помогает предотвратить смещение конфигурации.
Согласованность. После выполнения процесса IaC вся организация соответствует стандартному, хорошо установленному методу развертывания инфраструктуры, которая включает рекомендации и обеспечивает защиту в соответствии с потребностями безопасности. Любые улучшения, внесенные в центральные шаблоны, можно легко применять в организации.
Безопасность: централизованно управляемые шаблоны можно ужесточить и утвердить в облачных операциях или группе безопасности, чтобы соответствовать внутренним стандартам.
Самообслуживание: Teams можно расширить для развертывания собственной инфраструктуры, используя централизованно управляемые шаблоны.
Улучшенная производительность. Используя стандартные шаблоны, команды могут быстро подготавливать новые среды без необходимости беспокоиться обо всех деталях реализации.
Дополнительные сведения можно найти в разделе "Повторяемая инфраструктура " в Центре архитектуры Azure или в качестве кода в Центре ресурсов DevOps.
Архитектура
Поток данных
- Создайте ветвь и проверка в необходимых изменениях кода IaC.
- Создайте запрос на вытягивание (PR) в GitHub после того, как вы будете готовы объединить изменения в вашей среде.
- Рабочий процесс GitHub Actions активируется для обеспечения того, чтобы код был хорошо отформатирован, внутренне согласован и создает безопасную инфраструктуру. Кроме того, анализ Terraform или Bicep будет выполняться для создания предварительной версии изменений, которые будут происходить в вашей среде Azure.
- После соответствующего рассмотрения pr-запрос можно объединить в основную ветвь.
- Другой рабочий процесс GitHub Actions активируется из основной ветви и выполняет изменения с помощью поставщика IaC.
- (эксклюзивно для Terraform) Регулярно запланированный рабочий процесс GitHub Action также должен выполняться для поиска любого смещения конфигурации в вашей среде и создания новой проблемы при обнаружении изменений.
Необходимые компоненты
Использование Bicep
Создание сред GitHub
Рабочие процессы используют среды и секреты GitHub для хранения сведений об удостоверениях Azure и настройки процесса утверждения для развертываний. Создайте среду с именем
production
, следуя этим инструкциям.production
В среде настройте правило защиты и добавьте все необходимые утверждающие, которые необходимо войти в рабочие развертывания. Вы также можете ограничить среду главной ветвью. Подробные инструкции можно найти здесь.Настройка удостоверения Azure:
Приложению Azure Active Directory требуется разрешение на развертывание в подписке Azure. Создайте одно приложение и предоставьте ему соответствующие разрешения на чтение и запись в подписке Azure. Затем настройте федеративные учетные данные, чтобы разрешить GitHub использовать удостоверение с помощью OpenID Подключение (OIDC). Подробные инструкции см. в документации по Azure. Необходимо добавить три федеративных учетных данных:
- Задайте тип
Environment
сущностиproduction
и используйте имя среды. - Задайте для типа
Pull Request
сущности значение . - Задайте тип
Branch
сущностиmain
и используйте имя ветви.
- Задайте тип
Добавление секретов GitHub
Примечание.
Хотя ни один из данных о удостоверениях Azure не содержит секреты или учетные данные, мы по-прежнему используем секреты GitHub в качестве удобного средства для параметризации сведений об удостоверениях для каждой среды.
Создайте следующие секреты в репозитории с помощью удостоверения Azure:
AZURE_CLIENT_ID
: идентификатор приложения (клиента) регистрации приложения в AzureAZURE_TENANT_ID
: идентификатор клиента Azure Active Directory, в котором определена регистрация приложения.AZURE_SUBSCRIPTION_ID
: идентификатор подписки, в которой определена регистрация приложения.
Инструкции по добавлению секретов в репозиторий см . здесь.
Использование Terraform
Настройка расположения состояния Terraform
Terraform использует файл состояния для хранения сведений о текущем состоянии управляемой инфраструктуры и связанной конфигурации. Этот файл необходимо сохранить между различными запусками рабочего процесса. Рекомендуется хранить этот файл в служба хранилища Azure учетной записи или другой аналогичной удаленной серверной части. Как правило, это хранилище будет подготовлено вручную или через отдельный рабочий процесс. Блок серверной части Terraform потребуется обновить с выбранным расположением хранилища (см. здесь документацию).
Создание среды GitHub
Рабочие процессы используют среды и секреты GitHub для хранения сведений об удостоверениях Azure и настройки процесса утверждения для развертываний. Создайте среду с именем
production
, следуя этим инструкциям.production
В среде настройте правило защиты и добавьте все необходимые утверждающие, которые необходимо войти в рабочие развертывания. Вы также можете ограничить среду главной ветвью. Подробные инструкции можно найти здесь.Настройка удостоверения Azure:
Приложению Azure Active Directory требуется разрешение на развертывание в подписке Azure. Создайте отдельное приложение для
read-only
учетных записей иread/write
предоставьте им соответствующие разрешения в подписке Azure. Кроме того, обе роли также потребуют по крайней мереReader and Data Access
разрешения для учетной записи хранения, в которой находится состояние Terraform из шага 1. Затем настройте федеративные учетные данные, чтобы разрешить GitHub использовать удостоверение с помощью OpenID Подключение (OIDC). Подробные инструкции см. в документации по Azure.read/write
Для удостоверения создайте одну федеративную учетную запись следующим образом:Environment
ЗадайтеEntity Type
и используйтеproduction
имя среды.
read-only
Для удостоверения создайте два федеративных учетных данных следующим образом:- Задайте для параметра
Entity Type
значениеPull Request
. Branch
ЗадайтеEntity Type
и используйтеmain
имя ветви.
Добавление секретов GitHub
Примечание.
Хотя ни один из данных о удостоверениях Azure не содержит секреты или учетные данные, мы по-прежнему используем секреты GitHub в качестве удобного средства для параметризации сведений об удостоверениях для каждой среды.
Создайте следующие секреты в репозитории
read-only
с помощью удостоверения:AZURE_CLIENT_ID
: идентификатор приложения (клиента) регистрации приложения в AzureAZURE_TENANT_ID
: идентификатор клиента Azure Active Directory, в котором определена регистрация приложения.AZURE_SUBSCRIPTION_ID
: идентификатор подписки, в которой определена регистрация приложения.
Инструкции по добавлению секретов в репозиторий см . здесь.
Создайте другой секрет в
production
среде с помощьюread-write
удостоверения:AZURE_CLIENT_ID
: идентификатор приложения (клиента) регистрации приложения в Azure
Инструкции по добавлению секретов в среду можно найти здесь. Секрет среды переопределит секрет репозитория при выполнении шага развертывания в
production
среде при необходимости повышенных разрешений на чтение и запись.
Развертывание с помощью действий GitHub
Использование Bicep
Существует два основных рабочего процесса, включенных в эталонную архитектуру:
-
Этот рабочий процесс выполняется для каждой фиксации и состоит из набора модульных тестов в коде инфраструктуры. Он запускает сборку bicep для компиляции bicep в шаблон ARM. Это гарантирует отсутствие ошибок форматирования. Затем он выполняет проверку, чтобы убедиться, что шаблон можно развернуть. Наконец, проверка ov, открытый код средство анализа статического кода для IaC, будет выполняться для обнаружения проблем безопасности и соответствия требованиям. Если репозиторий использует GitHub Advanced Security (GHAS), результаты будут отправлены в GitHub.
-
Этот рабочий процесс выполняется по каждому запросу на вытягивание и каждой фиксации в главной ветви. Этап рабочего процесса "что если" используется для понимания влияния изменений IaC в среде Azure, выполнив то, что если. Затем этот отчет присоединяется к pr для простой проверки. Этап развертывания выполняется после анализа того, что если рабочий процесс активируется принудительной отправкой в основную ветвь. На этом этапе вы развернете шаблон в Azure после завершения проверки вручную.
Использование Terraform
Существует три основных рабочих процесса, включенных в эталонную архитектуру:
-
Этот рабочий процесс выполняется для каждой фиксации и состоит из набора модульных тестов в коде инфраструктуры. Он запускает terraform fmt , чтобы убедиться, что код правильно выстраивается и соответствует рекомендациям terraform. Затем выполняется проверка terraform, чтобы проверка, что код синтаксически правильно и внутренне согласован. Наконец, проверка ov, открытый код средство анализа статического кода для IaC, будет выполняться для обнаружения проблем безопасности и соответствия требованиям. Если репозиторий использует GitHub Advanced Security (GHAS), результаты будут отправлены в GitHub.
-
Этот рабочий процесс выполняется по каждому запросу на вытягивание и каждой фиксации в главной ветви. Этап плана рабочего процесса используется для понимания влияния изменений IaC в среде Azure, выполнив план terraform. Затем этот отчет присоединяется к pr для простой проверки. Этап применения выполняется после плана, когда рабочий процесс активируется принудительной отправкой в основную ветвь. Этот этап займет документ плана и применит изменения после завершения проверки вручную, если в среде есть какие-либо ожидающие изменения.
Обнаружение смещения Terraform
Этот рабочий процесс выполняется периодически, чтобы проверить среду на наличие смещения конфигурации или изменений, внесенных за пределами Terraform. При обнаружении смещения возникает проблема GitHub, чтобы предупредить хранителей проекта.