Описание проекта, цели и задачи Ссылка на заголовок
Проект представлял собой разработку Чат-бота для крупной международной фармацевтической компании MERCK. Я работал в роли DevOps-инженера в кросс-функциональной команде. Основной задачей было обеспечение стабильного CI/CD, автоматизация процессов разработки и бизнес-операций, а также взаимодействие с внешними инфраструктурными командами компании.
Ключевые цели:
- Развернуть новое окружение
- Перенести CI/CD с Jenkins на GitHub Actions
- Автоматизировать ручные бизнес-процессы (ETL)
- Поддерживать и расширять инфраструктуру проекта через Terraform
Команда:
- Техлид
- ML-инженер
- Фронтенд-инженер
- Backend/Search-инженер
- Project Manager
- Business Analyst
- DevOps (я)
📈 Ключевые результаты и дальнейшее развитие Ссылка на заголовок
- Настроил VPC endpoint для API Gateway и интеграцию с CloudFront — публикация интерфейса происходила через внешнюю команду, в чьё окружение нужно было встраиваться.
- Выполнил полный переход CI/CD-процессов на GitHub Actions, включая рефакторинг пайплайнов и интеграцию с Artifactory для хранения артефактов Lambda-функций.
- Автоматизировал загрузку отчетов из SharePoint в базу данных MySQL через AWS Lambda.
- Реализовал Jenkins-задачу как интерфейс запуска — раньше разработчики вручную вызывали SQL-процедуры, теперь достаточно указать имя отчета, и процесс полностью автоматизирован.
- 📉 Сократил ручной труд команды разработки на ~4 часа в неделю.
- Расширил и отрефакторил Terraform-модули.
- Учитывал ограничения по безопасности и авторизации через Amazon Cognito и CloudFront-политику.
- Повышена стабильность и воспроизводимость инфраструктуры за счёт полной декларации через Terraform
- Ускорен цикл поставки за счёт перехода на GitHub Actions
- Упрощены и автоматизированы ручные процессы, что позволило снизить риски ошибок и сократить нагрузку на команду
- Обеспечено бесшовное взаимодействие с инфраструктурой смежных команд
🏗 Архитектура решения и процесс разработки Ссылка на заголовок
- AWS-окружение: API Gateway, Lambda, S3, MySQL, Cognito, CloudFront
- Пайплайны: сначала Jenkins, затем миграция на GitHub Actions с учётом новых требований
- Инфраструктура: Terraform-модули с учётом ограничений безопасности MERCK (например, управление доступом к интернету через CloudFront)
- ETL: Lambda-функция + Jenkins-задача, интеграция с SharePoint и MySQL
⚙️ Детали реализации, особенности и сложности Ссылка на заголовок
Во время проекта я поддерживал пайплайны Jenkins для CI/CD и других автоматизированных задач. Я также выполнил миграцию пайплайнов с Jenkins на GitHub Actions, что потребовало рефакторинга процессов CI/CD. В рамках этой миграции я настроил интеграцию пайплайна с Artifactory для хранения артефактов Lambda-функций.
Я создал новую тестовую среду с нуля. Согласно политикам безопасности MERCK, существуют определённые ограничения. Например, доступ в интернет осуществляется через отдельную команду CloudFront. Чтобы опубликовать наш новый пользовательский интерфейс, мне нужно было предоставить этой команде доступ к нашему S3-бакету и вставить полученную от них политику в настройки бакета UI. Кроме того, авторизация осуществляется через кастомные пуулы Amazon Cognito, настройки которых также были переопределены инфраструктурным кодом команды CloudFront. Я также запросил и настроил новый VPC Endpoint для API Gateway.
В проекте использовался сложный ручной процесс регулярной загрузки данных из отчётов SharePoint в базу данных. Я разработал Lambda-функцию, которая умеет парсить эти данные и загружать их в базу. Также я создал отдельную Jenkins-задачу, которая служит интерфейсом для запуска Lambda. Это значительно упростило процесс. Ранее разработчики запускали SQL-процедуры вручную через MySQL Workbench. Теперь, при добавлении нового отчёта в SharePoint, мы получаем уведомление по email, запускаем Jenkins-задачу с указанием имени отчёта, и Lambda-функция автоматически скачивает, обрабатывает и загружает данные в MySQL.