Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве мы рассмотрим, как использовать CI/CD и инфраструктуру как код (IaC) для развертывания в Azure с помощью GitHub Actions в автоматизированном и повторяемом режиме.
В этой статье представлен обзор архитектуры и представлено структурированное решение для разработки приложения в Azure, которое является масштабируемым, безопасным, устойчивым и высокодоступным. Чтобы просмотреть более реальные примеры облачных архитектур и идей решения, просмотрите архитектуры Azure.
Преимущества использования IaC и автоматизации для развертываний
Существует множество способов развертывания в Azure, включая портал Azure, ИНТЕРФЕЙС командной строки, API и многое другое. В этом руководстве мы будем использовать автоматизацию IaC и CI/CD. К преимуществам этого подхода относятся:
Декларативный: когда инфраструктура и процесс развертывания определены в коде, их можно версионировать и рецензировать, используя стандартный жизненный цикл разработки программного обеспечения. IaC также помогает предотвратить смещение конфигурации.
Согласованность. После выполнения процесса IaC вся организация соответствует стандартному, хорошо установленному методу развертывания инфраструктуры, которая включает рекомендации и обеспечивает защиту в соответствии с потребностями безопасности. Любые улучшения, внесенные в центральные шаблоны, можно легко применять в организации.
Безопасность: централизованно управляемые шаблоны можно ужесточить и утвердить в облачных операциях или группе безопасности, чтобы соответствовать внутренним стандартам.
Самообслуживание: Команды могут быть уполномочены развертывать собственную инфраструктуру, используя централизованно управляемые шаблоны.
Улучшенная производительность. Используя стандартные шаблоны, команды могут быстро подготавливать новые среды без необходимости беспокоиться обо всех деталях реализации.
Дополнительные сведения можно найти в разделе "Повторяемая инфраструктура" в Центре архитектуры Azure или в разделе "Что такое инфраструктура как код" в Центре ресурсов DevOps.
Architecture
Поток данных
- Создайте новую ветвь и проверьте необходимые изменения кода IaC.
- Создайте pull request (PR) в GitHub, как только будете готовы внести изменения в вашу среду.
- Рабочий процесс GitHub Actions активируется для обеспечения того, чтобы код был хорошо отформатирован, внутренне согласован и создает безопасную инфраструктуру. Кроме того, анализ Terraform Plan или Bicep what-if будет обрабатываться для создания предварительного просмотра изменений, которые произойдут в вашей среде Azure.
- После соответствующего рассмотрения pr-запрос можно объединить в основную ветвь.
- Другой рабочий процесс GitHub Actions активируется из основной ветви и выполняет изменения с помощью поставщика IaC.
- (эксклюзивно для Terraform) Регулярно запланированный рабочий процесс GitHub Action также должен выполняться для поиска любого смещения конфигурации в вашей среде и создания новой проблемы при обнаружении изменений.
Предпосылки
Используйте Bicep
Создание сред GitHub
Рабочие процессы используют среды и секреты GitHub для хранения информации об идентификации Azure и для настройки процесса утверждения развертываний. Создайте среду с именем
production, следуя этим инструкциям. Вproductionсреде настройте правило защиты и добавьте всех необходимых утверждающих, которые должны подтвердить рабочие развертывания. Вы также можете ограничить среду исключительно вашей главной ветвью. Подробные инструкции можно найти здесь.Настройка идентификации Azure:
Приложению Azure Active Directory требуется разрешение на развертывание в подписке Azure. Создайте одно приложение и предоставьте ему соответствующие разрешения на чтение и запись в подписке Azure. Затем настройте федеративные учетные данные, чтобы разрешить GitHub использовать удостоверение с помощью OpenID Connect (OIDC). Подробные инструкции см. в документации по Azure . Необходимо добавить три федеративных учетных данных:
- Установите тип сущности на
Environmentи используйте имя средыproduction. - Установите тип сущности на
Pull Request. - Установите тип сущности на
Branchи используйте имя ветвиmain.
- Установите тип сущности на
Добавление секретов GitHub
Замечание
Хотя ни один из данных об удостоверениях Azure не содержит секретов или учетных данных, мы по-прежнему используем секреты GitHub как удобный способ параметризации информации о удостоверениях для каждой среды.
Создайте следующие секреты в репозитории с помощью удостоверения Azure:
-
AZURE_CLIENT_ID: идентификатор приложения (клиента) регистрации приложения в Azure -
AZURE_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 Connect (OIDC). Подробные инструкции см. в документации по Azure .read/writeДля удостоверения создайте одну федеративную учетную запись следующим образом:- Установите
Entity TypeнаEnvironmentи используйте имя средыproduction.
read-onlyДля удостоверения создайте два федеративных учетных данных следующим образом:- Задайте для параметра
Entity TypeзначениеPull Request. - Установите
Entity TypeвBranchи используйте название веткиmain.
- Установите
Добавьте секреты GitHub
Замечание
Хотя ни одни данные об удостоверениях Azure не содержат секретов и учетных данных, мы по-прежнему используем секреты GitHub в качестве удобного способа параметризации сведений об удостоверениях для каждой среды.
Создайте следующие секреты в репозитории с помощью идентификатора
read-only.-
AZURE_CLIENT_ID: идентификатор приложения (клиента) регистрации приложения в Azure -
AZURE_TENANT_ID: идентификатор клиента Azure Active Directory, в котором определена регистрация приложения. -
AZURE_SUBSCRIPTION_ID: идентификатор подписки, в которой определена регистрация приложения.
Инструкции по добавлению секретов в репозиторий см. здесь.
Создайте другой секрет в
productionсреде с помощьюread-writeудостоверения:-
AZURE_CLIENT_ID: идентификатор приложения (клиента) регистрации приложения в Azure
Инструкции по добавлению секретов в среду можно найти здесь. Секрет среды переопределит секрет репозитория при выполнении шага развертывания в
productionсреде, когда требуются повышенные разрешения на чтение и запись.-
Развертывание с помощью GitHub Actions
Используйте Bicep
Существует два основных рабочего процесса, включенных в эталонную архитектуру:
-
Этот рабочий процесс выполняется при каждом коммите и состоит из набора модульных тестов для кода инфраструктуры. Он выполняет bicep build, чтобы скомпилировать bicep в шаблон ARM. Это гарантирует отсутствие ошибок форматирования. Затем он выполняет проверку , чтобы убедиться, что шаблон можно развернуть. Наконец, checkov, средство анализа статического кода с открытым исходным кодом для IaC, будет выполняться для обнаружения проблем безопасности и соответствия требованиям. Если репозиторий использует GitHub Advanced Security (GHAS), результаты будут отправлены в GitHub.
-
Этот рабочий процесс выполняется при каждом запросе на слияние и каждом коммите в главной ветви. Шаг рабочего процесса what-if используется для понимания влияния изменений IaC на среду Azure путем запуска анализа what-if. Затем этот отчет присоединяется к PR для удобства проверки. Этап развертывания выполняется после анализа "что если", когда рабочий процесс активируется отправкой в основную ветку. На этом этапе вы развернете шаблон в Azure после завершения проверки вручную.
Используйте Terraform
Существует три основных рабочих процесса, включенных в эталонную архитектуру:
-
Этот рабочий процесс запускается на каждой фиксации и состоит из набора модульных тестов для кода инфраструктуры. Он запускает terraform fmt, чтобы убедиться, что код правильно форматируется и соответствует лучшим практикам terraform. Далее выполняется проверка terraform , чтобы убедиться, что код синтаксически правильный и внутренне согласованный. Наконец, checkov, средство анализа статического кода с открытым исходным кодом для IaC, будет выполняться для обнаружения проблем безопасности и соответствия требованиям. Если репозиторий использует GitHub Advanced Security (GHAS), результаты будут отправлены в GitHub.
-
Этот рабочий процесс выполняется для каждого pull request и каждого коммита в главной ветке. Этап планирования рабочего процесса используется для понимания влияния изменений IaC на среду Azure путем выполнения terraform plan. Затем этот отчет присоединяется к PR для простой проверки. Этап применения выполняется после плана, когда рабочий процесс активируется принудительной отправкой в основную ветвь. Этот этап обработает документ плана и применит изменения после окончательного утверждения, если в среде существуют какие-либо ожидающие изменения.
Обнаружение смещения Terraform
Этот рабочий процесс выполняется периодически, чтобы проверить среду на наличие смещения конфигурации или изменений, внесенных за пределами Terraform. При обнаружении смещения возникает проблема GitHub, чтобы предупредить хранителей проекта.
Связанные ресурсы
- Что такое инфраструктура как код
- Повторяемая инфраструктура
- Сравнение Terraform и Bicep
- Checkov и исходный код
- Расширенная безопасность GitHub