Деплой-пайплайн
Огляд того, як код потрапляє в прод. Кожен сервіс має свій механізм — не один монолітний CI/CD.
CodePipeline (5 pipeline-ів)
Section titled “CodePipeline (5 pipeline-ів)”Основа prod-деплою для AWS-сервісів.
| Pipeline | Що деплоїть | Target |
|---|---|---|
abitly-prod-backend | Abitly API | ECS Fargate cluster abitly-prod-backend |
abitly-prod-frontend | Abitly Web | ECS Fargate cluster abitly-prod-frontend |
abitly-prod-strapi | Strapi | EC2 abitly-prod-strapi |
studsearch-prod-backend | Studsearch backend | Elastic Beanstalk env studsearch-prod-env |
abitly-dev-backend | dev backend | EC2 abitly-dev-backend |
Source: AWS CodeStarSourceConnection → GitHub abitly-org/<repo> → main.
Тригер: DetectChanges: false — push не запускає pipeline автоматично. Запуск зовнішній (manual через console / зовнішній webhook / aws codepipeline start-pipeline-execution).
Артефакти — у відповідних S3 *-pipeline-* buckets.
flowchart LR
gh[GitHub<br/>main branch] -- "manual trigger" --> cp[CodePipeline]
cp -- Source --> codestar[CodeStarSourceConnection]
cp -- Build --> cb[CodeBuild<br/>docker build]
cb -- push image --> ecr[ECR<br/>abitly/*]
cp -- Deploy --> target[ECS service /<br/>EC2 / EB]
SSM-redeploy Lambda (config plane)
Section titled “SSM-redeploy Lambda (config plane)”Окремий механізм для zero-code-change прод-релізу: треба змінити env var — і ECS-сервіс рестартується.
flowchart LR
cli[aws ssm put-parameter<br/>/abitly/prod/<scope>/<key>] --> eb[EventBridge rule]
eb --> lambda[Lambda<br/>abitly-prod-ssm-redeploy]
lambda -- ForceNewDeployment --> ecs[ECS service rolling restart]
Lambda abitly-prod-ssm-redeploy (python3.12) слухає Parameter Store Change події на /abitly/prod/* та форсить ECS rolling deployment відповідного сервісу.
Аналогічні Lambda для dev:
abitly-dev-amplify-sync— SSM → Amplify env varsabitly-dev-amplify-rebuild—aws amplify start-jobдля rebuildabitly-dev-backend-restart— restart dev EC2
Amplify (frontend dev + studsearch prod + mission-control)
Section titled “Amplify (frontend dev + studsearch prod + mission-control)”| Amplify app | Що деплоїть | Trigger |
|---|---|---|
abitly-dev-frontend (d3sx9l6zmir3cj) | Abitly Web dev | webhook GitHub push у main |
studsearch-prod-frontend (d2v17dlr0oszkz) | Studsearch Web | webhook GitHub push у master |
mission-control (d20u1cpb84fbv3) | internal admin panel | auto-deploy |
WEB_COMPUTE платформа = Next.js SSR (Amplify SSR runtime, не Lambda@Edge статично).
Railway автодеплой
Section titled “Railway автодеплой”| Сервіс | Тригер |
|---|---|
| Telegram Bot | push у abitly-tg-bot-v2 / main |
| Telegram Webapp | push у abitly-telegram-webapp / main |
Railway сам спостерігає за репо (без CodeStar) — після push автоматично build & deploy.
Відкат — за платформою
Section titled “Відкат — за платформою”| Платформа | Команда |
|---|---|
| ECS Fargate | aws ecs update-service --task-definition <previous-arn> (або у console → попередня revision) |
| Elastic Beanstalk | aws elasticbeanstalk update-environment --version-label <previous> |
| EC2 + CodePipeline (Strapi) | re-run попереднього artifact у CodePipeline / SSM-команда на EC2 |
| Amplify | у console → попередній successful build → «Redeploy this version» |
| Railway | mcp__railway__redeploy на попередньому SUCCESS-deployment-ID, або в Railway UI |
| SSM-config rollback | попередня версія параметра — Lambda сама запустить redeploy |
Деталі → deploy-rollback.
Open questions
Section titled “Open questions”- Який саме зовнішній тригер для
DetectChanges: falseCodePipeline? (GitHub Action? Manual? Internal admin tool?) - EC2 Strapi: який agent на EC2 приймає артефакт з CodePipeline — CodeDeploy + appspec.yml? SSM RunCommand?
- Чи Amplify-rebuild через Lambda використовується замість прямого GitHub-webhook (можливо для secrets sync first)?