Рубрики
Uncategorized

Террафорность в 2021 году — Новые функции, тестирование и соответствие

Новые функции в террафоре и инструментах для улучшения разработки кода в террафоре, вводя лучшие механизмы тестирования. Помечено террафором, дежоптом, терратестом, инспектором.

Оба João. и Я Используйте регулярно на некоторое время террафора сейчас, и являются большими поклонниками этого. Достаточно большой, чтобы даже работал в течение довольно много времени на Боковой проект нашего собственного для упрощения управления территориями (который к сожалению не преуспел), по крайней мере. И да, теперь, когда мы готовим следующий с Mklabs , который, естественно, также сильно зависит от сценариев Terraporm, он сделал только смысл начать, поделившими некоторыми из наших любимых инструментов, которые тяготеют в экосистеме террафора.

Мы сталкиваемся с последними обновлениями в самой террафоре, от 0,12 до последнего 0,15, а затем пойти прямо к окружающей инструментарии, где мы в основном сосредоточены на тестировании и проверке соответствия на инфраструктуру.

Вы можете найти весь код, поддерживающий этот пост здесь Отказ

Обзор последних версий террафора

Версия 0.15 только недавно был выпущен . Тем не менее, многие компании все еще работают в среду до 0,11.x, и по хорошей причине. Хотя версия 0.12 была запущена уже некоторое время назад (2019), она принесла большие нарушения. Если это ваше дело, шансы заключаются в том, что вы отказались от того, чтобы держать в курсе своего прогресса. Таким образом, мы подумали, что будет иметь смысл первого рассмотрения некоторых функций Terraform, которые вы можете пропустить, прежде чем мы попытаемся убедить вас также учитывать дальнейшие улучшения.

0.12

  • Первоклассный синтаксис выражения : Вероятно, самые заметные изменения, не более строки интерполяции Sintax ( Confettis дует на заднем плане)!
  • Обобщенная система типа : (yay!) Способный указывать виды переменных;
  • Итерационные конструкции : ВВЕДЕНИЕ A для Оператор, позволяющий приблизительно приблизительно к языкам программирования и, следовательно, более выраженности DSL;

Подробнее, см. Общая информация о доступности страница Отказ

0.13

  • Улучшения модуля — Приносит возможность использовать несколько мета-тегов, которые до тех пор, пока до сих пор были доступны только для Ресурсы в модулях . В этом случае мы можем сейчас использовать Defends_on Для сцепления зависимостей с модулями (наконец!), наряду с возможностью создания экземпляров нескольких модулей с считать или for_each ; Подробнее здесь ;

Пример, указывающий зависимость модуля (личный фаворит), Source Blog Hashicorp

  • Пользовательская валидация переменной — При указании переменных можно из этой версии на подопечных указать пользовательские правила для принятого входа и соответствующее сообщение об ошибке для обеспечения быстрого отказа; здесь подробнее;

Пример валидации переменной, Source Blog Hashicorp

  • Поддержка 3-го вечеринников — Terraform теперь позволяет использовать свой собственный провайдер На блоке террафора требуется_проводы Отказ требуется_проводы Ключевое слово в блоке террафора уже существовало в Террафоре 12, хотя с собственными поставщиками были ограничены собственными поставщиками Hashicorp; Теперь вы можете ссылаться на ваш собственный источник DNS, чтобы провести свой собственный реестр, а на Terraform Init. Это будет установлено так же, как раньше для всех других поставщиков; Подробнее здесь ; Обратите внимание, что если вы уже используете требуется_проводы Ключевое слово в блоке террафора, для миграции из версии от 12 до 13, вы должны адаптировать его, как показано в следующем примере:

Пример требуется_провидировщики, источник Руководства по обновлению террафора

Подробнее, см. Общая информация о доступности страница Отказ

0.14

  • Чувствительные переменные и выходы — позволяя один флаг переменную как «чувствительный» будет восстановить его вывод на CLI;
  • Улучшено различия — Это, вероятно, одно из самых распространенных жалоб, которые я слышу, а именно сложность чтения террафора План (и вместе с ним одинаково для Применить и Показать ) вывод; С этим новым изменением он скрывает неизменные поля (не имеет значения для diff), отображая количество скрытых элементов для лучшей ясности; Подробнее здесь ;

Пример развлечения diff, Source Blog Hashicorp

  • Зависимость LockFile — Как только вы запустите Terraform init с версией 14 вы заметите, что .terrasom.lock.hcl Файл будет создан в этом каталоге и снаружи .terraform каталог. Этот файл предназначен для добавления в управление версией (GIT Chartized), чтобы гарантировать, что то же самое версии провайдера везде выполняются везде;

Подробнее, см. Общая информация о доступности страница Отказ

0.15

Наконец, вот некоторые из основных основных моментов последней версии просто совсем недавно объявили:

  • Удаленный государственный источник данных Совместимость : Для того, чтобы облегчить обновление до новых версий, вы можете использовать ссылки на объекты данных дистанционного состояния, которые используют более старые версии; Обратите внимание, что эта функция была возврата в предыдущие выпуски, а именно 0,14,0, 0,13,6 и 0,12.30;
  • Улучшения для скрытых чувствительных значений (например, пароли) : Следующая версия 0.14 работы теперь разработчики провайдера могут указывать свойства, которые по умолчанию чувствительны и должны быть в любом случае скрыты на выходах; Кроме того, террафору также добавляли функцию (чувствительную) для пользователей, чтобы пользователи могли явно скрывать значения;
  • Улучшения в лесозаготовительном поведении : Способность контролировать уровень журнала поставщика и террафом отдельно Tf_log_core = уровень и Tf_log_provider = уровень Отказ

Подробнее, см. Общая информация о доступности страница Отказ

Обработка нескольких версий

Предполагая, что эти новые функции убедились, что вы обновляете свои существующие условия террафора, будучи реалистичными здесь, это не произойдет из одного дня к другому. У вас будет переходный период (если не навсегда), где у вас есть среда с разными версиями террафора. То есть в порядке, вы все равно можете сохранить свое здравомыслие, прыгая между всеми из них благодаря инструментам, как следующее:

  • Tfenv — переключатель окружающей среды Terraform вдохновлен (из рубинового мира) по РБЕНВ написано с помощью сценариев Shell;
  • Terraform Switcher — Еще один проект, по сути, делая то же самое, написанное в ходе;

Оба этих проекта почти полностью перекрываются, поэтому мы просто примеремся одним из них, а именно Tfenv:

Здесь мы показываем, как вы можете переключиться между установленными версиями TFENV Используйте Как вы можете проверить, какие версии уже установлены на местах Список Tfenv Все версии в настоящее время доступны TFENV List-Remote (Незначительная деталь: текущая версия библиотеки, которую я использую для записи моего терминала, Terminalizer , не захватывает меня прокрутки и выбора версии Terraform 0.14.5 ) Последнее, но не менее важное, мы также показываем классную особенность от Tfenv, а именно возможность автоматически распознавать минимальную необходимую версию в данной среде. То же самое касается последней версии, если вам интересно. И да, это также доступно в проекте Terraform Switcher.

Тестирование

Тестирование — это, вероятно, самая запутанная тема в инфраструктуре-как-коде (IAC) земли, а террафору не является исключением, так как многие разные инструменты и процедуры бросаются в этой же сумке, когда, ну, они, вероятно, не должны. Обычно, когда говорят о тестировании, люди обычно значат три разных веща:

  • Статические проверки — валидация в основном код структуры без фактического запуска кода; Быстро для выполнения достоверных чеков, локальных и/или в ваших трубопроводах CI/CD;
  • Интеграционные тесты — при условии, что вы правильно используете инверсию управления переменными, они дают вам возможность проверить ваши модули или среды для разных общих чехлов;
  • Проверки соответствия — тесты, сделанные после последствия, после того, как все ресурсы уже развернуты; Они могут служить отдельным целям, что мы будем исследовать лучше позже, но по сути, цель — подтвердить, что то, что развернуто, это то, что было первоначально предназначено и выражено в террафоре;

Да, вы получили это правильно: если вы с нетерпением ждали какого-то классического тестирования подразделений, вы можете забыть это сейчас. Давайте погрузиться прямо в более подробную информацию.

Статические проверки

Опять же, это не тесты строго говоря, а скорее просто простые проверки проверки можно запустить, чтобы поймать общие ошибки, не развертывающие что-либо. Там есть массив инструментов, но начнем с указанного из коробки в бинарной коробке.

Создатели инструментов не редкость, чтобы предоставить свои собственные валидаторы. Kubernetes обеспечивает подтверждение Kubectl Apply Printe -F --dry-run Хелм обеспечивает Lint Helm Lint ; Террафом предлагает проверить Отказ

В следующем примере работает Террафом подтвердит поймал бы два из трех вопросов:

Validate потребуется ранее запустить Terraform init Так что это может использовать поставщики. В нашем примере он обнаружит опечаток в справочнике ресурса AWS Bucket наряду с недействительным CIDR, предоставленным для создания VPC. Однако он не будет обнаружен, является несуществующим типом экземпляра EC2.

TFLINT приходит к спасению. Будучи еще одним инструментом открытого исходного кода, написанный в ходе, он поставляется как бинарный, похожий на террафору и даже не требует установки террафора.

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

Вы также можете Настроить Tflint Для введения переменных определяют модули для игнорирования и т. Д. Вы можете проверить Руководство пользователя Больше подробностей.

Теперь помимо проживания проблемы конфигурации в вашем коде, другая рекомендация — это Проверьте вопросы безопасности , например, слишком разрешительные правила группы безопасности, незашифрованные ресурсы и т. Д.

Здесь снова существует более одного инструмента, чтобы помочь. Мы выделим два самых популярных здесь: TFSEC и Чеков . Оба предоставляют предварительно определенный набор проверок, которые они используют для проверки вашего кода, позволяя явно открывать исключения (если вы действительно хотите), аннотируя свой код с комментариями, и настроить конфигурацию, чтобы игнорировать некоторые модули.

TFSEC написан в ходу, и, вероятно, является самым быстрым для начала, а в настоящее время Обеспечивает до 10 проверок Для текущих основных облачных провайдеров (AWS, GCP и Azure). Потенциальный недостаток в том, что работает исключительно для террафора, поэтому вам нужно будет использовать дополнительные инструменты для проверки Kubernetes/Helm/Cloudbation и т. Д.

Советы, с другой стороны, несмотря на более свежий инструмент, видел скорость разработки звездочек (разрабатывается Startup с хорошими основополагающими раундами и Paloalto Networks Complision не может повредить). У них не только у них Действительно всестороннее количество проверок Во всех главных облачных поставщиках, но они также проводятся в нескольких технологиях, таких как Kubernetes, CloudFation, Serverless и Harmplates. И список продолжает расти. Chekov предоставляет вам возможность выполнить либо чистую статическую проверку, просто указывая на каталог Terraform или файл Terraform, или фактически запуская его на файл плана Terraform Plan. Приятная вещь о том, что он непосредственно работает, естественно, простота не требует целевой среды, доступной для проверки кода.

Эти инструменты в последнее время захватывают много внимания, поскольку двойная проверка проблем безопасности обычно заблокировалась в руках Devops/Devsecops Teams, которая на практике составляла узкое место развития развития. Введение этих проверок в начале CI/CD-трубопроводов, большая часть скорости развития освобождается без ущерба для обеспечения безопасности.

Тесты интеграции

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

Работав уже в нескольких проектах GO в контексте Mklabs, мы естественным образом благоприятно предвзяты к терратесте. Итак, даже если вы никогда не пробовали пойти, мы все равно рекомендуем посмотреть на нашем репозитории образца, где мы предоставляем настройку GO MOD, чтобы облегчить начало работы. И если этого еще не убедили вас, вот что может: вы также можете использовать Terratest для тестирования DockerFiles, Kubernetes и Packer Setups.

Это может показаться пугающим, но мы будем утверждать, что выгоды стоят этого. Давайте посмотрим на пример скелета тестовой настройки для AWS:

По сути, скелет всегда одинаково:

  1. Начните с определения переменных, которые вы хотите ввести в качестве ввода для вашего терратеста; Возможно, вы должны даже вводить случайные переменные, чтобы испытать больше глубины;
  2. Убедитесь, что вы сообщите настройке, чтобы уничтожить все созданные ресурсы после завершения применения Terraform, используя отложить утверждение; Это эквивалентно ловушка Работа в оболочке, и она будет выполнена, даже если что-то не удается в то же время; Единственная предпосылка в том, что вы объявляете его, прежде чем позвонить террафор. Entandapply () метод;
  3. Пусть тест будет развернут, передавая настройку конфигурации Terraform, вы ранее объявили в Террафорационы к террафор. Initandapply метод;
  4. Наконец, объявить то, что вы хотите утверждать; То есть объявлять то, что вы ожидаете, должен был быть развернут — Ожидается — И посмотри, если они соответствуют тому, что на самом деле было развернуто — результат . Самый простым способом — проверять на приложении Terraform Apply, который доступен через `Terraporm. Способ вывода () `. В качестве альтернативы, Terrage Tragrunt также предоставляет вам некоторые методы из коробки для часто проверяемых вещей на каждого обеспечения.

Звучит как веселье, верно? Вот пример некоторых из тестов, которые мы могли бы написать на наш базовый пример террафора:

Вот вывод выполнения этих тестов для нашей демонстрации нашей DEMO:

Окончательные мысли о терратесте : Мы нашли Terratest отличный инструмент для реализации изменений в вашей инфраструктуре с уверенностью, независимо от того, являются ли они просто простыми повседневными изменениями, или более крупными и более сложными обновлениями или миграциями.

Мы только что поцарапали поверхность здесь на тестах, которые можно развивать с территорией — например, комбинируя доступ SSH в экземпляры и подтверждение доступа к ресурсам и т. Д. Тем не менее, нет бесплатных ланчи, и это может прийти по цене: тесты могут занять много времени (в зависимости от того, что вы тестируете), и требуют, чтобы не тривиальное время инвестиций — изучение того, как использовать, написание их и настройки Вверх среду, как вы, вероятно, захотите запустить их в изолированной среде. Например, в случае AWS это в идеале будет выделенным аккаунтом. Мы рекомендуем читать Лучшие практики о том, как выполнить тестирование От Terragrunt, компания за терратустом.

Проверки соответствия

Последняя миля утверждает, что то, что вы хотели развернуть, действительно был развернут ровно Как вы хотели Отказ Злоупотребление террафом null_resource является классическим, ведущим к непреднамеренным сюрпризам. Один из способов достижения этого будет запустить эти тесты сразу после Террафом применяется Этап вашего конвейера CI/CD.

Но следующий вопрос, который у вас может быть, это то, как я знаю, что эти конфигурации остаются таким образом, что Никто не изменил вещи непреднамеренно ? Мы видели эту ситуацию в разных формах: изменения, выполненные пользователями вручную через GUI или CLI; через различные террафовые среды мутирующие перекрывающиеся ресурсы недвижимости; Или как побочный продукт использования различных инструментов IAC, например, настраивая некоторые биты с облачными, некоторые K8S или HELM и т. Д.

Возможно, что более интереснее будет планирование, чтобы непрерывно и неоднократно запустить эти проверки, чтобы убедиться, что все останется, как вы ожидаете. Давайте посмотрим некоторые варианты для достижения этого.

Мошеннический подход : На практике вы можете сделать этот тип проверки соответствия с любым языком программирования. Как мы показали ранее, можно экспортировать состояние террафора в JSON Формат, а затем использовать, например, Python с pteest и BOTO3 Библиотеки для сравнения того, что развернуто с нужным выходом. Вы могли бы даже пойти дальше, и использовать BOTO3 Чтобы отсканировать свои учетные записи для различных аспектов, которые вы считаете, пошли против лучших практик, таких как отсутствие шифрования (в полете и в покое).

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

Вторая причина не следовать по этому подходу, состоит в том, что есть уже несколько решений там справедливо проверены и интуитивно понятные для использования, которые могут помочь вам с этой задачей, которую мы будем охватывать сейчас:

  • Driftctl — библиотека открытого исходного кода от Cloudskiff для террафора;
  • Sentinel — собственное решение Hashicorp;
  • Terraform-Someting — BDD на основе с открытым исходным кодом, посвященным для террафора;
  • Conftest — Test Suite для нескольких структур помимо террафора, таких как Kubernetes и DockerFiles;
  • Индивидуальный инструмент тестирования по требованиям соответствия шеф-повара, написанное в Ruby;
  • Встроенный облачный провайдер — каждый облачный провайдер имеет свои собственные механизмы проверки на месте;

Вам может быть интересно, почему первое место в нашем списке — библиотека еще в бета-версии. Это хорошая точка, и мы будем утверждать, что его прогресс, кажется, многообещающий, и что нам нравится поддерживать стартапы. Более того, мы думаем, что его Простота использования Заслуживает подсветки, поскольку оно доставляет только одну вещь и одну вещь: Check, если что в вашем файле штата Terraform — это то, что на самом деле развернуто. Просто укажите на свой террафовый составной файл, когда вы запустите Driftctl сканирование команда И вы получите подробный отчет, если у вас есть дрейфовый Отказ Из-за низких усилий, необходимых для реализации этой библиотеки и предоставленной стоимости, мы считаем, что это заслуживает того, чтобы принимать его для спина.

Далее в нашем списке есть Hashicorp (компания за террафом) собственного предприятия для этого, Sentinel Отказ Это может иметь смысл, если вы уже используете другие функции предприятия Hashicorp, получавшие выгоду от Terraform Enterprise.

Прямой открытый источник сопоставимая альтернатива, будет использоваться Террафом-соответствие Отказ Это следует BDD Директивы, так что вы можете указать легко читаемое человеком, используя:

  • Дано : данный тип ресурса;
  • Когда : необязательное условие, которое вы можете добавить;
  • тогда : то, что вы ожидаете;

Вот пример тестового файла для ведер AWS S3:

Хотя мы получаем привлекательность легко понятных тестов, которые не требуют знать, как код, мы находим террафом-соответствие отсутствует гибкости для тестирования различных аспектов, в основном из-за природы BDD. Более того, есть Больше людей разочарованы с помощью некоторых действительных очков Отказ

Если вам нравится террафом-соответствие, Конфят Также стоит посмотреть. Он имеет свой собственный DSL для записи политик и позволяет вам проверить несколько рамки. Мы нашли Этот блог пост От Lennard Eijsackers очень информативны, и, таким образом, предположим, что рекомендую вам проверить это.

Прежде чем мы погрузиться в собственные службы соответствия соблюдению облачного провайдера, мы хотим выделить еще один инструмент с открытым исходным кодом, а именно Inspec Отказ Это позволяет писать тесты в Ruby, и было построен сверху rspec . Если вы уже знаете awsspec. Тогда это должно чувствовать себя очень похожему, благодаря преимуществом, которое Inspec также поддерживает GCP и Azure.

Несмотря на то, что никто из нас не является активным разработчиком Ruby, мы обнаруживаем, что Inspec очень легко начать и, самое главное, очень мощное. Это позволяет объединять проверки IAC к целевым ресурсам, развернутым и отображенным в файлах состояний Terraporm, с другими общими политиками для конфигурации облачной учетной записи. Кроме того, он также позволяет объединить дополнительные проверки безопасности, такие как на конфигурациях уровня ОС и эксплуатации. Давайте проиллюстрируем, как вы можете написать эти проверки. Следующая проверка иллюстрирует, как определить глобальные политики, которые аккаунт должен подчиняться:

Следующая иллюстрируется для общих сетей:

Предыдущие примеры иллюстрируют только общие проверки управления, которые проверяют общую передовую практику в вашем Acocunt. Тем не менее, вы можете также выполнить утверждения относительно того, что находится в вашем штате Террафора по сравнению с тем, что развернуто — какая Cloudskiff. Инженеры справедливо название дрейф Отказ Кристоф Хартманн — один из инспектов создателей — имеет хороший Блог пост Объясняя, как использовать Inspec и интегрироваться с террафом. Подход по существу, как описано ранее в мошеннической подход — импортируют файл JSON TERRAFORM TERRAFORM и используйте его как ожидаемое утверждение.

Встроенные инструменты политики облачного провайдера

Каждый облачный провайдер имеет родной инструмент для решения политик управления широкой компанией. Некоторые примеры услуг являются:

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

Последние мысли

Мы находим, что нет ни одной серебряной пули, которая решает все проблемы, а лучшая стратегия на самом деле является комбинацией множественной тактики, используемой на разных этапах. Два основных этапа, которые требуют разных подходов до и пост Развертывание.

Для предварительного развертывания можно использовать комбинацию статических проверок и фактических испытаний. Статические проверки — отличный стартер, так как их легко настроить, и позволит вам принять участие в целом передовой практики по всей организации. Другими словами, статические проверки предоставляют вам мощную легкую победу. С другой стороны, с другой стороны, вы в основном получаете уверенность в том, что IAC-код на самом деле будет работать, и что вы поймаете Faux Pas Отказ Тем не менее, Terratest не приходит бесплатно, и требует, чтобы кривую обучения, наряду со временными инвестициями для разработки фактических испытаний.

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

И это так. Спасибо за чтение, мы надеемся, что это было полезно. Не стесняйтесь добраться до нас, если у вас есть вопросы или предложения.

Еще раз вы можете найти весь код, поддерживающий этот этот пост здесь Отказ

Источники

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

Оригинал: «https://dev.to/mklabs/terraforming-in-2021-new-features-testing-and-compliance-17ho»