Рубрики
Uncategorized

Как использовать шаблоны трубопроводов для управления инфраструктурой с Terraform на Azure DevOps

Введение Инфраструктура как кода считается наилучшей практикой при управлении Infrastruc … Tagged с DevOps, Azure.

Введение

Инфраструктура как код считается наилучшей практикой при управлении инфраструктурой в облаке. Инструменты, такие как Terraform, становятся все более популярными из -за их простоты использования и мульти облачной природы. Однако принятие инфраструктуры в качестве модели кода может стать беспокойным и неуправляемым, если не организовать стратегически. С разработкой любого автоматизированного процесса простота является ключом к созданию длительных решений. В Azure DevOps одним из способов упрощения кода для конфигураций Terraform является использование шаблонов трубопровода для представления нашей инфраструктуры. Каждое значение в параметрах шаблона используется для настройки нашей конфигурации, которая затем динамически строится во время конвейера сборки. Мы можем перейти от традиционной структуры хранилища наших файлов конфигурации Terraform в папках, чтобы представить нашу инфраструктуру с параметрами шаблона трубопровода:

Структурирование наших хранилищ исходного кода таким образом позволяет нам намного проще масштабировать наше решение и обеспечивает некоторые из следующих преимуществ:

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

В этом руководстве мы будем использовать демонстратор Azure DevOps для импорта проекта Azure DevOps. Этот проект был предварительно сконфигурирован для развертывания экземпляров контейнеров Azure с Terraform с использованием шаблонов трубопроводов в качестве кода. Мы развернем некоторые ресурсы для нашей подписки Azure и рассмотрим внутренние работы этой концепции.

Предварительные условия

Прежде чем начать это руководство, вам понадобится следующее:

Шаг 1 — Импорт проекта с демо -генератором Azure DevOps

Во -первых, мы собираемся импортировать шаблон Azure DevOps в нашу организацию Azure DevOps. Это позволит нам начать как можно быстрее. Чтобы начать, перейдите к Демогенератор DevOps Azure Веб-сайт.

Войдите в свою учетную запись Azure DevOps. Выберите Принять Чтобы разрешить приложение DevOps DevOps Demo Generator для доступа к вашей учетной записи. Теперь мы готовы импортировать наш шаблон. Выберите Выберите шаблон :

Появится всплывающее окно, выберите Частный Вкладка и выберите GitHub вариант. Вставьте в следующий URL GitHub, который размещает шаблон для нашего проекта:

https://raw.githubusercontent.com/allanore/AzDevOpsYamlAsCode/master/TemplatesAsCode.zip

Далее, выберите Отправить :

Выберите свою организацию в раскрывающемся меню и введите имя для нового проекта, который мы создаем. В примере я буду называть проект TemplateAscode Анкет Проверьте коробка для Расширение (ы) предлагается вам … и выберите Создать проект :

Обратите внимание, что Заменить токены и Terraform расширения требуются для этого проекта. Расширения являются дополнением для Azure DevOps, которые обеспечивают улучшение услуги. В этом случае мы будем использовать расширение Tokens Replict для создания наших файлов конфигурации Terraform во время конвейера сборки. Кроме того, мы также используем расширение Terraform, чтобы легко развернуть наши конфигурации в Azure. Эти два расширения будут автоматически установлены при импорте проекта через демонстратор DevOps Azure.

Наконец, после успеха импорта мы получим следующее сообщение. Выберите Перейдите к проекту быть направленным прямо на наш новый проект:

На следующем шаге мы рассмотрим внутренние работы проекта, который мы только что импортировали.

Шаг 2 — Просмотр шаблона как дизайн кода

Давайте посмотрим, как настроены репозитории кода для этого проекта. На левой стороне выберите Репо затем выберите Файлы . Выбрав выпадение, мы видим, что есть два репозиторию исходного кода или Репо в нашем проекте. Выберите ACI Репо:

ACI Repo для этого проекта содержит код инфраструктуры для экземпляров контейнеров Azure в нашей среде Azure с папками для разработки и производства. В этом проекте вместо создания репозитория для каждого приложения или одного для Dev и Prod мы создаем репозиторий для каждого облачного сервиса или компонента. Это позволяет упростить наши инфраструктурные развертывания и как можно более «резак Cookie», что действительно сияет в больших условиях. Размер окружающей среды и потребности бизнеса действительно будут играть роль в наиболее эффективной дизайне структуры репо. Но для этой демонстрации мы пойдем по этому пути, чтобы все было просто.

PipelineConfig.yml Наш сборник сборки YAML. Если мы посмотрим на содержимое этого файла, мы увидим, что он начинается с Ресурсы раздел. Это поиск кода из нашего 2 -го репо, Шаблоны и позволяет нам использовать этот репод в нашем конвейере сборки. Далее, это этапы Раздел, который содержит наш работа и Задачи Для создания конфигураций Terraform. В Шаблон Раздел Мы называем шаблон, который хотим построить, который указывает на ACI-Prod-SampleApp2.yml файл. Когда мы развертываем этот конвейер, он развернет компоненты в этом файле шаблонов, на который мы рассмотрим следующее:

Остальные три файла YAML в ACI репо Представляйте инфраструктуру экземпляра azure instance в нашей среде производства и разработки. Если мы посмотрим на ACI-Prod-SampleApp2.yml , мы видим, что это серия шаблонов трубопроводов, истощивших из Шаблоны репо. Параметры шаблона — это то, что составляет конфигурацию наших компонентов, в этом примере у нас есть два шаблона, один для группы ресурсов и один для фактического компонента ACI. Разрушение группы ресурсов и ресурс ACI на отдельные шаблоны позволяет нам развернуть более одного ресурса ACI в группу ресурсов:

В нашем Шаблоны Repo Мы можем увидеть наши два файла YAML для наших шаблонов трубопровода вместе с папкой Terraform. Эта папка, где мы сохраняем наши «временные» файлы конфигурации терраформ. Эти файлы содержат общие файлы конфигурации Terraform с переменными, которые окружены двойными » «. Это говорит о нашей задаче замены токенов, которая работает во время конвейера сборки, заменить любые строки в нашем контейнер.tf и main.tf Файлы, которые окружены « » с его соответствующей переменной среды. Так ` ЦП _` будет заменена переменной среды ЦП, которую мы объявляем в шаблоне трубопровода:

При просмотре Azure-aci-rg.yml Шаблон, мы можем видеть вверху, мы перечисляем наши параметры, а затем устанавливают их как переменные среды в cmdline@2 задача. Далее это CopyFiles@2 задача. Мы копируем файл шаблона конфигурации Terraform, main.tf , от \ Terraform \ aci каталог нашего источника контроля репо нашего $ (Build.ArtifactStagingDirectory) Анкет Здесь мы строим наши файлы Terraform для производства как артефакт . Артефакт, с точки зрения разработчика, обычно содержит составленные двоичные файлы и библиотеки, используемые для запуска приложения. Эти файлы приложений затем развернуты в среде в конвейере выпуска. С помощью нашего конвейера IAC Build в этом случае наши файлы конфигурации Terraform являются артефактами; И мы будем развертывать их с помощью конвейера выпуска. В последнем задании мы запускаем Replacetokens@3 Задача поменять переменные, окруженные __ с нашей соответствующей переменной среды. Весь этот шаблон позволяет нам принимать значения параметров и генерировать из него файл конфигурации Terraform:

Если мы посмотрим на Azure-Aci-Container.yml Шаблон, мы можем увидеть ту же структуру, что и Azure-aci-rg.yml Анкет Поскольку экземпляры контейнеров Azure требуют гораздо большего количества значений, чем группа ресурсов, у нас есть гораздо больше параметров, объявленных в начале и в Cmdline@2 Задача, где мы объявляем наши переменные среды. Ключевое отличие в этом шаблоне — дополнительное Cmdline@2 Задача в конце, которая переименована Container.tf Файл на имя ресурса ACI. Это позволяет нам создавать дополнительные ресурсы ACI в той же конфигурации Terraform, предоставляя уникальное имя в файл конфигурации, поэтому мы не копируем какие -либо файлы:

Теперь, когда мы рассмотрели наши два репо, давайте обернем голову вокруг рабочего процесса в этом конвейере сборки. Наш PipelineConfig.yml Файл является нашим файлом конвейера сборки, который ссылается на желаемую инфраструктуру YML -файл на сборку, такой как ACI-prod-sampleapp1.yml . Этот файл затем указывает на несколько шаблонов трубопровода, расположенных в Шаблоны Репозиторий, каждый из которых создает файлы конфигурации Terraform в соответствии со значениями параметров, указанных в ACI-prod-sampleapp1.yml Анкет Наконец, как только наши файлы конфигурации Terraform будут созданы, они опубликованы как артефакт, который затем будет использоваться нашим конвейером выпуска для развертывания в Azure:

На следующем шаге мы собираемся развернуть инфраструктуру экземпляра контейнера Azure, описанную в ACI-Prod-SampleApp2.yml файл.

Шаг 3 — развертывание ресурсов

Во -первых, давайте запустим наш конвейер сборки. На левой стороне выберите Трубопроводы расширить варианты под ним. Затем еще раз выберите Трубопроводы Чтобы увидеть наши сборки сборки. Выберите Terraform-Aci-Ci и выберите Запустить трубопровод :

Выберите Запустить в всплывающем окне, чтобы начать наш конвейер сборки. Он будет работать около минуты или около того, и тогда артефакты будут созданы для нашей инфраструктуры SampleApp2. Мы можем просмотреть эти артефакты, выбрав 1 Опубликовано под Артефакты раздел:

Мы можем увидеть наши файлы конфигурации Terraform для обоих ресурсов ACI:

Давайте развернем инфраструктуру для нашей подписки Azure, запустив конвейер выпуска, но сначала нам нужно отредактировать конвейер выпуска для настройки подключения к нашей подписке Azure. На левой стороне расширяется Трубопроводы и выберите Выпуски Анкет Мы можем увидеть наш Terraform-Aci-CD Конвейер был импортирован, выберите Редактировать :

Под нашим Сборка Стадия выберите 1 работа, 5 задач редактировать наши задачи, чтобы включить нашу подписку Azure:

Выберите первую задачу Настройка учетной записи Azure Storage … и нажмите на выпадающую коробку под Azure Подписка Анкет В этом поле появится список подписок, связанных с вашим арендатором. Выберите тот, который вы также хотели бы развернуть примером экземпляров Azure Containers и выберите Авторизировать Анкет Вам может быть предложено войти в свою учетную запись Azure. Этот процесс создаст основную учетную запись услуги в вашем арендаторе Azure и назначит разрешения на эту подписку с этой учетной записью. Azure DevOps установит это в качестве сервисного соединения и использует его для подключения к Azure:

Затем нам нужно настроить оставшиеся задачи Terraform с тем же соединением Azure Service. Новое соединение, которое мы создали, теперь должна отображаться в раскрывающемся меню под Доступные Azure Service Connections Анкет Выберите это для всех 3 задач Terraform, которые говорят Некоторые настройки требуют внимания Это потому, что им не хватает настройки подписки Azure:

Выберите Переменные Вкладка вверху. Нам нужно будет переименовать VATSESTORAGEACCOUNT переменное значение. Вы можете установить это на все, что хотите. Это потому, что мы храним государство Terraform в аккаунте для хранения Azure, которая требуется для общего уникального имени. Если мы не переименуем это, мы получим ошибку во время развертывания конвейера выпуска:

После завершения, выберите Сохранить наверху. Теперь мы готовы развернуть нашу инфраструктуру. Выберите Создать выпуск а затем выберите Создать Чтобы инициировать конвейер высвобождения. Мы увидим новое сообщение в зеленом, указывающее, что выпуск был создан. Выберите Релиз-1 Чтобы просмотреть процесс выпуска для развертывания ресурсов ACI в нашу подписку Azure:

Мы увидим, что релиз работает и может просмотреть различные этапы нашего конвейера. Это типичный трубопровод для развертывания кода Terraform, мы предоставляем учетную запись для хранения для хранения нашего состояния Terraform, запустите Terraform Init Для инициализации нашей среды Terraform и подключиться к нашему удаленному состоянию (в этом случае учетную запись Hazure Herese). Тогда мы запускаем План терраформ Чтобы проверить наши файлы конфигурации, не имеют проблем. Наконец, если все предыдущие задачи успешны, мы запускаем наши Terraform Apply -auto -approve для развертывания инфраструктуры:

Как только наш релиз успешно пройдет, мы увидим Добился успеха сообщение:

Если мы посмотрим на наш портал Azure, мы увидим, что ресурсы на самом деле существуют:

Далее мы добавим еще один ресурс ACI в наше приложение SampleApp2 и повторно разверните нашу конфигурацию с помощью запроса на вытяжение.

Шаг 4 — Изменение ресурсов с помощью запроса на вытяжение

Нам нужно установить политику филиала для нашего Мастер Ветвь, это позволит нам автоматически начать сборку, если инициируется запрос на тягу. Чтобы сделать это расширить Репо и выберите Ветви Анкет На Мастер Филиал выберите Всего в правой стороне и выберите Политики филиала :

Выберите + Добавить политику сборки Анкет Во всплывающем окне выберите наш конвейер сборки Terraform-Aci-Ci И держите по умолчанию все остальное. Выберите Сохранить Чтобы создать политику сборки:

Теперь мы готовы подать запрос на привлечение и запустить новую сборку. Давайте создадим новую ветвь, чтобы внести наши изменения. В ACI Репозиторий выберите выпадающий список с надписью Мастер и выберите + Новая филиал :

В нашем примере мы будем называть новую филиал DeploySampleApp2 Анкет Выберите Создать Анкет Сейчас мы активно используем новую ветвь, которую только что создали в Azure DevOps. Выберите ACI-Prod-SampleApp2.yml Файл и выберите Редактировать редактировать файл. Мы собираемся добавить еще один ресурс ACI, добавив в другой шаблон ACI с необходимыми параметрами:

#Build Azure Container Group
- template: azure-aci-container.yml@templates
  parameters:
    ContainerGroupName: 'sampleapp2-3'
    DNSName: 'cloudskillssampleapp2-3'
    OS: 'Linux'
    ContainerName: 'helloworld'
    Image: 'microsoft/aci-helloworld:latest'
    CPU: '1'
    Memory: '4'
    Port: '80'
    Protocol: 'TCP'

Далее, выберите Компет Чтобы сохранить наши изменения:

Выберите Компет опять таки. Теперь будет всплывающее запрос, выберите Создайте запрос на тягу :

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

Выберите Создать и в следующих окнах выберите Установите автозаполнение . Это завершит запрос на притяжение, если наша сборка успешно работает:

Затем выберите Установить автозаполнение снова, чтобы подтвердить. Наш сборник сборки теперь работает с изменениями от нашей новой филиала. Если сборка будет успешной, наша филиала объединится с главной ветвью с нашими новыми изменениями. Также обратите внимание, что если мы оглянемся на нашу историю запросов на привлечение, мы увидим очень простой схему добавленной новой инфраструктуры. Это одно из преимуществ использования параметров шаблона для определения нашей инфраструктуры. Наши запросы на привлечение становятся намного проще в просмотре:

Теперь давайте продолжим и развертываем наши новые ресурсы. Расширить Трубопроводы С левой стороны и выберите Выпуски Анкет Затем выберите Terraform-Aci-CD трубопроводы и выберите Создать выпуск Анкет Выберите Создать Чтобы начать развертывание.

Во втором выпуске наш дополнительный ресурс ACI будет развернут. Как только релиз будет завершен, мы можем дважды зарегистрироваться на портале Azure:

Вывод

В этой статье мы импортировали проект, в котором используются шаблоны трубопровода для создания конфигураций Terraform во время конвейера сборки. Мы также успешно развернули ресурсы экземпляра Azure Container из этих шаблонов трубопровода и даже добавили дополнительные ресурсы, используя запрос на тягу.

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

Инфраструктура как модель кода может стать трудной для управления в крупномасштабной, используя шаблоны трубопроводов вместо того, чтобы лечить наши файлы конфигурации Terraform, такие как овец, не позволяет нам создавать инфраструктуру снежинки и позволяет нам быстро и стабильно масштабировать нашу инфраструктуру. Для получения дополнительной информации о шаблонах Azure DevOps обязательно посетите Документация Microsoft Анкет Кроме того, если вы заинтересованы в том, чтобы узнать больше о Terraform, посмотрите на их Веб -сайт Для получения дополнительной информации.

Оригинал: «https://dev.to/cloudskills/how-to-use-pipeline-templates-to-manage-infrastructure-with-terraform-on-azure-devops-29p7»