Когда я впервые начал консультироваться с Unuid Почти 2 года назад одна из наших целей должна была конкурировать в культуру. Учитывая наш выбор, чтобы сильно полагаться на серверу, чтобы сохранить первоначальные расходы, было важно для команды быть гораздо более интимными с AWS и операциями, чем типична для разработчиков, работающих исключительно на их языке выбора. Вместо того, чтобы строительные услуги, работающие на вершине общей инфраструктуры, ресурсы AWS Nuid неотделимы из кода, используя их. Это имеет значительные последствия для того, как NuID обеспечивает программное обеспечение.
Услуги
Итак, что такое сервис?
Сервис — это сборник ресурсов AWS и код, который выполняет желаемую функцию. Он имеет четко определенный интерфейс, с которым другие услуги и пользователи могут взаимодействовать. И это то, что мы хотим развернуть и тестировать как единицу.
Определение услуги таким образом облегчает развитие архитектуры в течение длительного времени. Если сервис предоставляет постоянный интерфейс, он может быть оформлен на перфоре, по мере необходимости. Например, он может быть мигрирован из (потенциально много) Лямбда функционирует к совместному кластеру EKS, не влияя на клиентов или зависимых услуг.
NUID использует Террафом управлять своей инфраструктурой. У каждого сервиса есть собственное состояние террафора для поддержания изоляции и минимизировать радиус взрыва. У каждой службы также есть свой собственный трубопровод (за исключением некоторых общих услуг, которые не изменяют все это часто или следует изменить только с особым уходом). Terraform позволяет NUID поддерживать согласованность от дев
к Этап
к прод
Устранение «Работает на моих машинах» проблемы и упрощению интеграции между услугами.
Непрерывная доставка
Мы хотели привить постоянную доставку в культуре Нюид с самого начала. Мы начали с принципа, что любой код в Мастер
могу пойти жить в прод
в любое время. Это требует от разработчиков рассмотреть вопрос о оперативном воздействии чего-либо, которые они подталкивают Мастер
Как с точки зрения службы, над которыми они работают и другие зависимые услуги. Следуя из этого принципа, обзор кода, тестирование и мониторинг необходимы — никто не хочет сломать сборку.
NUID использует Github Flow Модель за исключением того, что функциональные ветви не развернуты в производство для тестирования. Вместо этого рассмотрены запросы на тягу в dev
Сверяя уникальный экземпляр службы из филиала функции. Это ценно как для тестирования, так и для привязанности обратной связи от других заинтересованных сторон.
Тестирование интеграции среди услуг происходит в Этап
Отказ Этап
и прод
хранятся почти одинаковыми. За исключением вопросов масштаба, если сервис работает в Этап
, это, вероятно, будет работать в прод
Отказ Эта последовательность упрощает код и увеличивает доверие в данном выпуске.
Каждая среда поддерживается в отдельной учетной записи AWS. Разработчики могут развернуть только напрямую к dev
Отказ Развертывание в Этап
и прод
возможно только через конвейер обслуживания. Это ограничение устраняет риски экологического дрифта и « делает это жить ».
«Я не могу представить себе более идеальный подход к тому, как я хочу работать. Нашему бюджету нашего решения тесно-клакат, террафом, AWS. И с нашей инфраструктурой в качестве кода каждый шов открыт. С таким подходом я чувствую, что нет ничего, что мы не могли бы быстро строить ».
Опыт разработчика
Нюид в первую очередь Clojure магазин, так что включить REPL-CRIVED Development был приоритетом. Интерактивное развитие является одним из ключей к производительности разработчика Clojure, поэтому доступ к ресурсам AWS из REPE имеет важное значение.
Поскольку ресурсы AWS неразделимы из кода NuID, невозможно создать автономную среду на индивидуальной машине разработчика. Вместо этого мы создали Shell Scripts, обертывающие террафору, которые позволяют разработчику легко раскрутить уникальный экземпляр любого сервиса в dev
Отказ Этот интерфейс разработчика к Terraform поделился всем услугам, сохраняя опыт разработчика в соответствии и облегчить небольшую команду для поддержания нескольких услуг. Эта инструментарий также позволяет разработчикам быстро развивать новые услуги.
Инфраструктура Нюида рассматривается как неизменность, поэтому нет необходимости SSH в определенную коробку для внесения изменений. Тем не менее, некоторые ресурсы, такие как частные API на Gateway API и кластеры Elasticsearch, не доступны непосредственно из Интернета (с веской причиной). Для облегчения доступа к разработчику от REPL, мы создали Услуги по требованию Bastion Для безопасного прокси в отношении ресурсов в рамках определенного VPC. Экземпляры бастиона заблокированы к конкретному разработчику и продолжаются только при использовании для минимизации поверхности атаки.
Развертывание
Поскольку инфраструктура и код неразделимы, планируют трубопроводы Nuid и применяют террафору. Если вы хотите увидеть, как это выглядит в действии, проверьте мой Пример трубопровода
Отказ Это обеспечивает согласованность в среду, сводя к минимуму неожиданное поведение. Это также облегчает тестирование интеграции в службах.
Хотя Terraform не предназначен или рекомендуется для оркестрации, он работает достаточно хорошо для NUID по развертыванию лямбдаса и, с разумным использованием null_resource
, Ионы набора данных Отказ Тот же подход может быть использован для развертывания контейнеров, если услуга требует его, обеспечивая NUID с большим количеством гибкости для развития сервисов.
Программирование с инфраструктурой
Как я уже написал, Лучший код не код Отказ Если вы можете распространять свою логику в инфраструктуру, декларивно, это меньше кода для вашей команды для обслуживания.
Поддержание переносимости между облачными средами — белый слон. Для небольшой команды лучше максимально использовать выбранный вами поставщик облака.
В целом, этот подход дал NUID возможность медленно и намеренно выращивать численность персонала, при сохранении высокой производительности и поддержания затрат не вынуждена исключением будущей эволюции платформы.
Оригинал: «https://dev.to/jdhollis/continuous-delivery-with-terraform-2ohp»