Як ми з нуля зібрали повноцінну інфраструктуру за допомогою Cursor AI

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

Вітаю, спільното! Мене звати Дмитро, я працюю DevOps Security та AWS Specialist у DevSecOps, Inc . Це моя перша стаття на DOU (сподіваюся, не остання — якщо сподобається нашій шановній українській айті-спільноті). Оригінал допису англійською ви можете переглянути у мене в LinkedIn.

У цій статті хочу поділитися досвідом перших кроків у роботі з Cursor AI — інструментом, який не просто доповнює код, а здатен з нуля зібрати повноцінну інфраструктуру. Це історія про експеримент, який несподівано спрацював і відкрив новий рівень взаємодії з ШІ.

День 0. Ідея

До нас зайшов новий проєкт. Оцінка виконання — два місяці. Під час планування з’явилась ідея:

«А що, якби інфраструктуру повністю написав ШІ? Без шаблонів, без ручної праці. Тільки правила — і хай працює».

Ми обрали Cursor. Це не просто редактор — це середовище, у якому ти керуєш ШІ за допомогою правил, які називаються stdlib (standard library). Cursor сам створює код, інфраструктуру, логіку — все.

І я скажу прямо: він справився чудово.

За 3,5 години (не враховуючи часу на написання інструкцій) Cursor згенерував повністю робочу інфраструктуру:

  • Хмара — CloudFormation (CDK)
  • Бекенд — Python / Lambda у контейнері
  • База даних — DynamoDB
  • Фронтенд — React

В результаті маємо:

3,5 години — до робочої версії.

Ще півтора дня — на тестування, документацію й доведення до пуття.

Разом — 2 дні до продакшену, без жодного рядка вручну.

День 1. Знайомство

Я почав читати. Ось три статті, які дали мені старт:

З’ясовується, Cursor — це форк Visual Studio Code. Але не просто редактор, а редактор із блекджеком, ШІ та правилами.

Ти не пишеш код — ти пишеш правила. І ШІ сам усе будує.

Це не просто інструмент. Це прискорювач. Особливо коли проєкт вузькоспеціалізований, і знайти розробника складно.

День 2. Створюю правила

Оформлюю двотижневу безкоштовну підписку. За 8 годин створюю власну stdlib.

Структура виглядає ось так:

Пишу в чат Cursor’а такий запит:

Ось архітектура проєкту (додаю зображення).
Потрібно з нуля зібрати застосунок за цією схемою.
Опис проєкту: @project-overview.mdc  
Інструкції:
@dev-backend-python-lambda-rules.mdc  
@dev-cdn-rules.mdc  
@dev-dynamodb-guideline.mdc  
@dev-dynamodb-rules.mdc  
@dev-experience-kiosk-rules.mdc  
@dev-frontend-rules.mdc  
@dev-s3-media-rules.mdc

І тут почалася магія.

За перші 30 хвилин — 30 файлів. Згодом — понад 20 000 рядків коду. Все — в одному коміті.

Спочатку наша архітектура виглядала так:

Але Cursor створив дещо більше — він додав API Gateway, про який ми спочатку не подумали.

Лише під час обговорення ми зрозуміли, що ШІ підстрахував нас і додав те, що ми проґавили.

Щоб переконатися, що все працює, я попросив Cursor написати автотест, який перевіряє всю API-логіку.

Що мається на увазі під «перевіркою»

Тест допоміг ШІ виявити баги — і одразу їх виправити.

ШІ діє як джуніор: пробує → перевіряє → не працює → пробує знову. Іноді він брутфорсить, не до кінця розуміючи контекст — але не зупиняється, доки не досягне результату.

Ось трохи вивіду логів скріпта ./scripts/test-api.sh:

Created test file: test.txt
Step 1: Getting upload URL
Response:
{
  "upload_url": "https://example-example.s3.amazonaws.com/media/example/test.txt?",
  "media_id": “example”,
  "metadata": {
    "pk": "MEDIA#example==",
    "sk": "METADATA#test.txt",
    "user_id": "anonymous",
    "file_name": "test.txt",
    "content_type": "text/plain",
    "created_at": "2025-03-26T10:17:01.559575",
    "expires_at": 1745576221,
    "status": "active"
  }
}
Got media ID: example==
Step 2: Uploading file to S3
upload: ./test.txt to s3://example-example/media/example==/test.txt
Upload successful
Waiting for S3 consistency...
Step 3: Getting media info
Media info:
{
  "download_url": "https://example-example.s3.amazonaws.com/media/example/test.txt?",
  "metadata": {
    "user_id": "anonymous",
    "created_at": "2025-03-26T10:17:01.559575",
    "content_type": "text/plain",
    "status": "active",
    "sk": "METADATA#test.txt",
    "file_name": "test.txt",
    "pk": "MEDIA#example",
    "expires_at": 1745576221.0
  }
}
Got download URL: https://example-example.s3.amazonaws.com/media/example/test.txt?
Step 4: Creating QR code
QR Response:
{
  "qr_code": "",
  "media_id": "example",
  "mapping": {
    "pk": "QR#example",
    "sk": "MAPPING",
    "url": "https://example-example.s3.amazonaws.com/media/5Jp9m2tMZVu8Zx2L36a2iA%3D%3D/test.txt?",
    "created_at": "2025-03-26T10:17:06.606781",
    "expires_at": 1743589025,
    "status": "active"
  }
}
QR code saved to qr_code.png
Step 5: Testing direct download
download: s3://example-example/media/example/test.txt to ./downloaded_file.txt
Download successful
✓ Files match - test passed!
✓✓✓ All tests completed successfully! ✓✓✓
Cleaning up temporary files...

День 3. Полірування

  • Останній день пішов на:
  • Рефакторинг правил
  • Переклад stdlib англійською
  • Перевірку логіки, яку створив Cursor

Увесь код, усі шаблони — написані AI. Людина не писала жодного рядка вручну.

Наприкінці

Це не майбутнє. Це вже сьогодення.

Коли Тоні Старк розмовляв із Джарвісом і отримував нову броню, він робив те саме, що ми зробили з Cursor. Тільки не у фільмі — а в реальному житті.

ШІ працює — якщо правильно написані правила. Але тепер відповідальність лежить на операторі.

У моєму випадку — на мені. Я — DevOps, і тепер повинен не лише розбиратися в AWS і CI/CD, а й розуміти фронтенд, бекенд і архітектуру, які створив ШІ. З Cursor кожен стає трохи CTO. Розробник, тестувальник, ДевОпс — усі піднімаються на новий рівень. Як колись друкарські машинки поступилися Word, книги — відео, а солдатики — комп’ютерним іграм, так і ШІ поступово бере на себе написання ПЗ.

А ми можемо нарешті зосередитися на чомусь новому. Можливо, навіть важливішому.

👍ПодобаєтьсяСподобалось11
До обраногоВ обраному7
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Поки що найкраще працює, якщо давати йому короткі, вичерпні та деталізовані інструкції, самостійно виходить у більшості випадків дичина, яку потім правити виходить довше.

Це тільки у мене не проходить оплата українською картою за про акаунт? Рятуйте, тести лінь писати самому😁

Вітаю! Не знаю з приводу оплати з української картки. Мені компанія купляла підписку, вона в США знаходиться.

цикава история но не понятно как за этой поделкой следить ? кто ее будет обновлять (на новые библиотеки) и расширять для нового функционала ?

Згодом — понад 20 000 рядків коду. Все — в одному коміті.

Чи робили ви перевірку згенерованого коду, чи «повірили на слово»? Ще цікаво, як ви оцінюєте масштабованість і підтримуваність отриманого коду, якщо таке взагалі передбачено?

Якщо ваш проєкт дійсно простенький і максимально стандартний, тоді абсолютно підтримую рішення. Але перше питання таки лишається )

Перевірили згенерований код, зробили кілька цікавих спостережень — і довелося трохи підправити 🙂
1. ШІ використовував дещо застарілі версії пакетів (оскільки кожна модель має свою «дату знань»), тому довелося змусити Cursor пошукати актуальні версії в інтернеті й оновити залежності вручну.
2. Якість коду в цілому не дотягує до best practices — і за композицією, і за структурою логіки. Але оскільки це мікропроєкт, ми задовольнилися середнім рівнем.
У випадку масштабніших рішень до ШІ треба підходити інакше: використовувати мультиагентне середовище, додавати перевірки якості, рефакторинг та контроль на кожному етапі.

Погоджуюсь з висновками, зараз теж досліджую досвід з Cursor, і мені здається, що його вигода нівелюється двома речима: скоупом проєкту та досвідом оператора.

Я більше часу, певно, витрачаю на матюки і правки за курсором, бо просто бачу яку дич він часто пропонує, навіть з контекстом всієї кодбази )

Чи маєте якісь висновки щодо того, як балансувати використання агентів з ростом складности проєкту?

ахаха, це точно...
Поки немаю...
Це щоб його навчити, потрібно самому розібратися як йому «правильно делегувати» задачі, чи коректно написати .cursor/rules, по яким він сам буде бачити помилки і виправляти те що написав...
Може згодом, як знайду робочу формулу то поділюся досвідом у новій статті, а також якщо керівництво дозволить оприлюднити правила для нього написанні.

зараз теж досліджую досвід з Cursor, і мені здається, що його вигода нівелюється двома речима: скоупом проєкту та досвідом оператора.

Я більше часу, певно, витрачаю на матюки і правки за курсором, бо просто бачу яку дич він часто пропонує, навіть з контекстом всієї кодбази

іншими словами, інженера він не замінить?
Хтось повинен робити ревью та виправляти помилки.

Враховуючи, що помилки можуть бути не в коді, а в бізнес-логіці та нюансах бізнес-домену, підозрюю, що іноді простіше й безпечніше зробити фічу ручками, ніж користатися ШІ.

що помилки можуть бути не в коді, а в бізнес-логіці та нюансах бізнес-домену,

або костиль тільки в певному місці працює правильно😂

До нас зайшов новий проєкт. Оцінка виконання — два місяці.

Не можу зрозуміти: а який скоуп проєкту? Зрозуміло, що у скоупі є деплой на AWS. А що окрім цього?

Тому що діаграму деплою що у статті можна й без ШІ за декілька годин запрограмувати.

Володимире, дякую за запитання!

Справді, в статті ми більше фокусувалися на процесі взаємодії з Cursor, ніж на деталізації самого проєкту — і це гарний привід доповнити контекст.

Проєкт передбачав повну автоматизацію деплою інфраструктури під новий веб-додаток:
• бекенд на Python (у вигляді Lambda),
• фронтенд на React,
• базу даних (DynamoDB),
• CloudFormation/CDK,
• CI/CD пайплайн,
• S3, API Gateway, IAM-права — повний стек.

Скоуп включав не просто шаблонну інфраструктуру, а її інтеграцію, логіку взаємодії, тестування, документацію — все це Cursor згенерував на основі правил.

Щодо діаграми — її ми малювали самостійно, як вихідну архітектуру, яку мав реалізувати ШІ. Цікаво, що в результаті Cursor навіть додав компонент, який ми спершу не врахували — API Gateway.

Тобто завдання було не просто в «намалювати і задеплоїти», а перевірити, наскільки глибоко може піти AI у вирішенні комплексного технічного завдання з мінімальним людським втручанням.

Зі статті я зрозумів, що оцінка проєкту — 2 місяці («зайшов новий проєкт. Оцінка виконання — два місяці»), та за допомогою ШІ ви зробили цей проєкт за 2 дні. («Разом — 2 дні до продакшену»)

• бекенд на Python (у вигляді Lambda),
• фронтенд на React,

Які функції треба було реалізувати на бекенді та фронтенді? Тут десь згадувався — це згенерувати куар-код, по ньому віддати файл та залоговути цю подію до БД? Чи які ще юз-кейси були?

Так, справді — частина логіки була описана побіжно, тому з радістю деталізую.

Проєкт стосувався інтерактивного кіоску, де користувач (дитина) могла:
• зробити фото,
• обрати ефект чи персонажа,
• отримати вже оброблене зображення,
• і завантажити його через QR-код.

Після вибору ефекту зображення автоматично редагується (AI/фільтри), зберігається у S3, генерується QR-код, який веде на файл, і ця зв’язка зберігається до 30 днів. Потім фото і код видаляються автоматично.

Cursor згенерував:
• бекенд: API для завантаження фото, застосування ефекту, логування, генерування QR-коду,
• фронтенд: веб-сторінка для завантаження фото за QR-кодом (відсканував код — відкрилась відповідна сторінка, натиснув Download — зображення завантажилось).

Уточнення по фронтенду:
Йдеться лише про сторінку для завантаження фото за QR-кодом.
Інтерфейс самого кіоску ми не розробляли — таке завдання не ставилось.

я там окремо поставив кілька питань, але ця відповідь, в принципі, вичерпно на них відповідає. Тобто в загальному проєкт простий як дрова, скоуп манюсінький і фіксований, до шаленої масштабованости не схильний.

Тоді інше питання — що ж тоді в тих 20 000 рядках коду? )

У тих 20 000 рядках коду було:
• код усіх компонентів і інфраструктури,
• Cursor використав TypeScript для всіх частин проєкту — це додало чимало рядків через типізацію й дрібні деталі.
Якби використовувався Python, кількість рядків, ймовірно, була б удвічі меншою.

а проганяли рефакторинг через той же cursor? У мене непогано з цим справлявся.

Зазвичай там 10 копій одного того ж кода в 10 компонентах з трошки зміненим порядком строк, 3 різних лiби для парсинга yaml/json, 5 разів скопипастена конфигурация секурити груп в CDK з різними пропущеними руламі у кожній і т.д. :))

Дякую, зрозумів!

Окрема вам подяка за висвітлення досвіду програмування з ШІ. Дуууууже актуальна тема, яку деякі люди не чипають взагалі.

Нещодавно робив подкаст на тему вайб-кодінгу: www.youtube.com/live/QFSyaJ7-_4o

Запрошую до перегляду!

І таким людям як Ви дуже дякую, за запитання і за зацікавленність.
Для себе зрозумів, що надалі буду ділитися досвідом. 🫡 😎

Дякую за подкаст, подивлюся. =)

Запити до Cursor руснявою? Бл* реально, в 2025??

два місяці

->

3,5 години

Т.е. условно вместо 5 devops без AI оставляем 1 с AI, а 4-х увольняем -> профит )).

Угу 🤣😆
В оригінальній статті, є 40-секнудне відео процесу як ті файли створюються, якщо цікаво можна переглянути

А ми можемо нарешті зосередитися на чомусь новому. Можливо, навіть важливішому.

Например, искать как заработать не в IT 🤣.

Але ж там 3 дні, а не 3.5 години... на абсолютно стандартну архітектуру з доки AWS/CDK, яку 2 місяці робити — треба мабуть цілу команду наймати, що б достатньо мітінгів нашедуліти

не враховуючи часу на написання інструкцій

хаха

Значит никого не уволят👏. Пока🤔, но это не точно😉.

Підписатись на коментарі