Это также было опубликовано на моем личный блог
Один из моих побочных проектов недавно умер на лозе, и это не нужно.
Проект был веб -сервисом для преобразования информационного бюллетеня по электронной почте в PDF для автономного чтения, где все ссылки все еще будут работать. Это было сделано путем предварительного разрешения содержания ссылок в PDF.
Создание PDF требовало множества инструментов. Я использовал Кукольник отображать ссылки в качестве документов HTML и преобразовать их в PDFS; Смесь библиотек Python PDF Pymupdf и Pypdf4 объединить и связать сгенерированные PDF; и Ghostscript Чтобы сжать конечный результат.
В начале я взломал беспорядок Python, Node.js и Bash Scripts, чтобы доказать, что я могу заставить его работать. Когда пришло время попытаться развернуть его более надежным образом, у меня было три очевидных варианта для хостинга — VPS, такие как цифровой океан, PaaS, как Heroku, или что -то без сервера, как AWS Lambda.
Прямо из ворот я знал, что Хероку не будет вариантом. Процесс, который я разработал, требовал с использованием кукольника, который на самом деле является просто оберткой JavaScript вокруг бинарного хрома. Предложения PAAS, как правило, слишком песочничество, чтобы позволить вам запускать произвольные двоичные файлы вместе с вашим кодом. Я узнал об этом трудном пути на предыдущей стажировке, где я провел целую неделю, пытаясь бежать Google Lighthouse На Паас Азура. Достаточно сказать, что я не был успешным.
Остальные параметры должны были использовать VPS или без сервера. Я знал, что VPS будет более простой для развертывания. Очередь задач и рабочая модель позволили бы мне использовать то, что у меня уже было. Это может даже работать на одной машине. Грязь просто.
Вместо этого очарование субси-второго выставления счетов и «бесконечного масштаба» соблазнила меня использовать без серверного предложения. Обе эти причины не должны были иметь значение для моего проекта с нулевым пользователем. Несмотря на это, я решил использовать Без сервера Framework размещен на AWS Lambda . Я пришел, чтобы сожалеть об этом.
Сначала все прошло хорошо. Расширение нескольких лямбдов с без серверной структуры — это бриз. Но развертывание быстро росло в сложности. Во -первых, мой шаг сборки нуждался в плагине Docker на заказ, чтобы я мог использовать одну из моих библиотек PDF. Затем мне пришлось найти способ упаковать в двоичных файлах с моим развертыванием, чтобы мои Lambdas могли их использовать. Как только у меня работали индивидуальные функции, я понял, что мне нужно как -то координировать их, чтобы я мог надежно справиться с неудачами. Нет проблем, просто добавьте плагин, чтобы начать использование функций AWS Step.
Я добавил все эти инструменты/плагины/прокладки, чтобы решить мою проблему, но они начинали становиться проблемой. Время развертывания выросло до 10-15 минут, потому что шаг сборки был настолько раздутым. Одно это не ужасно, но солома, которая сломала верблюдов, заключалась в том, что я не мог проверить свои изменения на местном уровне.
Без возможности проверять локально, разработка останавливается. Каждая ошибка синтаксиса, опечатка и глупая авария были заперты за 15 минут ожидания. Так много для быстрой итерации. Со временем я потерял интерес, и проект умер.
Если бы я смог проверить свой проект на местном уровне, он бы не умер. Тестирование изменений локально сократило бы мою петлю обратной связи. 30 секунд гораздо более управляемы, чем 15 минут. Другими словами, то, что убило мой проект, было неспособностью поддерживать паритет Dev/Prod.
Dev/Prod Parity — это идея, что ваша местная среда тестирования должна быть как можно близка к вашей производственной среде. Мне нравится описание этого из Двенадцатифакторное приложение . Если вы еще не знакомы с идеей двенадцатифакторного приложения, вам следует проверить это — это здорово.
Мой неудачный проект — крайний пример потери паритета окружающей среды; На самом деле, к концу не было никакого паритета. Единственной рабочей средой была Prod. Но даже в менее экстремальных случаях различия в средах могут начать вызывать большие проблемы.
Мне теперь ясно, почему Dev/Prod Carity так ценен. Есть два способа изменить то, как я работаю над будущими проектами.
Во -первых, я буду более осведомлен о том, как новые функции разрывают Dev/Prod Carity. Когда возникают различия, я все равно не должен спешить вперед с этой функцией. Моя история — четкий пример того, как отталкивание исправления может снежно и вызвать реальные проблемы. Вместо этого я должен найти способ реализовать эту функцию без нарушения паритета. Если это невозможно, пришло время переоценить, насколько важна эта функция. Я хочу работать в мире, в котором говорится: «Он работает на моей машине», также означает, что он работает на производственной машине.
Во -вторых, мне нужно начать думать о Dev/Prod Carity с самого начала проекта. Еще до того, как я напишу первую строку кода. Оглядываясь назад, выбор использования AWS Lambda был ошибкой для моей конкретной ситуации. Инструмент для выполнения расширенных рабочих процессов с AWS Lambda все еще очень зарождается и подгоняет меня на неудачу. Конечно, легко подражать местному приложению CRUD только с несколькими функциями. Но локальная эмуляция является несостоятельной, когда вам понадобятся двоичные файлы, пошаговые функции и шаги построения Docker.
Мой боковой проект умер на лозе, но ваш не должен. С дисциплиной для поддержания паритета Dev/Prod вы можете избежать проблем, с которыми у меня были.
Спасибо за чтение! Если вам понравилось то, что я должен был сказать, вы можете найти больше моего письма на моем Личный блог Анкет
Оригинал: «https://dev.to/calebschoepp/the-importance-of-maintaining-dev-prod-parity-9ap»