AWS Lambda та Serverless-архітектура: коли сервери зникають
Привіт! Мене звати Сергій Чербаджи, я розробник із семирічним стажем. За цей час я набув цінного досвіду, працюючи більше п’яти років у компанії ProHabits, де я зараз обіймаю позицію технічного тимліда. Моє захоплення — це розбір та аналіз різноманітних технічних рішень.
Це моя друга стаття на DOU, з першою можете ознайомитись тут: «Мистецтво ефектних мініатюр для відео: вчимося у Netflix». Я планую серію статей на тему підключення різних баз даних та створення телеграм-бота. Це буде корисно для тих, хто не знав, як почати використовувати лямбди, а також для тих, хто хоче перейти з звичайного сервера на Serverless.
Ці статті допоможуть зрозуміти, як інтегрувати різні бази даних з AWS Lambda, а також як створити телеграм-бота, який може автоматизувати багато завдань. Кожна стаття буде містити детальні інструкції та приклади коду, щоб читачі могли легко застосувати отримані знання на практиці. Для тих, хто ще не знайомий з лямбдами, ці матеріали стануть відправною точкою, допоможуть освоїтися в нових технологіях і зробити перехід на Serverless-архітектуру простішим та зрозумілішим.
Вступ
У ті далекі дні, коли не було ще комп’ютерів, а вебзастосунки тільки уявлялися, люди навіть не гадали, що управління серверами може бути таким складним та витратним. У нашому сучасному світі, коли технології стрімко йдуть уперед, ми вже маємо змогу позбутися цих труднощів завдяки безсерверній архітектурі. Сьогодні розглянемо та створимо просту функцію AWS Lambda, що дозволяє розробникам творити свої застосунки, не переживаючи за сервери.
Що таке безсерверна архітектура
Безсерверна архітектура — це як та невидима рука, що керує всім без зайвих зусиль розробника. Не треба вже нам піклуватися про сервери, адже хмарні сервіси беруть на себе цю ношу. Вони надають усі необхідні ресурси та автоматично підлаштовуються під навантаження. У цій архітектурі присутні функції (як-от AWS Lambda), API-шлюзи, бази даних та хмарне сховище.
AWS Lambda
AWS Lambda — це наче невидимий чарівник від Amazon Web Services, що дозволяє розробникам створювати функції, які з’являються у відповідь на різні події. Цей чарівник сам керує серверами та підлаштовує ресурси залежно від навантаження. Мови програмування, які він розуміє, — це Python, Node.js, Java та інші.
Процес створення AWS Lambda
Створимо просту функцію AWS Lambda, що повертає вітальне послання. Ось шлях до цієї мети:
Створення облікового запису в AWS Management Console:
- Відвідайте AWS Management Console та створіть обліковий запис, якщо його ще немає.
Перехід до AWS Lambda:
- У меню виберіть Services та знайдіть Lambda у розділі Compute.
- Натисніть на Create function. Варто пам’ятати, що регіон впливає на ціну та видимість функції Lambda. Наприклад, якщо функція створена в регіоні us-east-1, вона не буде видима в інших регіонах. Про ціни поговоримо згодом.
Створення нової функції:
- виберіть
Author from scratch
; - вкажіть ім’я функції, наприклад
test
; - виберіть середовище виконання (Runtime), наприклад,
Node.js 20.x
; - виберіть архітектуру
arm64
(вона дешевша) або залиштеx86_64
; - у
Advanced settings
увімкнітьEnable function URL
, якщо бажаєте викликати Lambda за URL, і виберітьNONE
уAuth type
для публічного доступу до функції; - натисніть
Create function
.
Перевірка роботи функції
Відкрийте URL у новому вікні та переконайтеся, щоб бачите відповідь від Lambda. Перейдіть до сервісу CloudWatch для перегляду логів. У меню виберіть Services та знайдіть CloudWatch у розділі Management & Governance. Перейдіть до Logs -> Log Groups -> /aws/lambda/test і виберіть потрібний Log Stream для перегляду логів.
Приклад коду AWS Lambda
exports.handler = async (event) => { const path = event.resource; // or event.path const httpMethod = event.httpMethod; switch (path) { case '/users': if (httpMethod === 'GET') { // Handle GET request for /users return getUsersResponse(); } // Add more HTTP methods as needed break; case '/posts': if (httpMethod === 'GET') { // Handle GET request for /posts return getPostsResponse(); } // Add more HTTP methods as needed break; default: return { statusCode: 404, body: JSON.stringify({ message: 'Not Found' }) }; } }; function getUsersResponse() { const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]; return { statusCode: 200, body: JSON.stringify(users) }; } function getPostsResponse() { const posts = [{ id: 1, title: 'Hello World' }, { id: 2, title: 'Serverless AWS' }]; return { statusCode: 200, body: JSON.stringify(posts) }; }
Цей код представляє функцію AWS Lambda, яка обробляє HTTP-запити для двох різних ресурсів: /users та /posts.
Обробка подій
Функція exports.handler є основною точкою входу, яка обробляє події. Вона отримує параметр event, який містить інформацію про запит, зокрема шлях (path) і HTTP-метод (httpMethod).
Маршрутизація
Залежно від шляху (path) та HTTP-методу, код визначає, який обробник викликати. Якщо шлях /users
і метод GET
, викликається функція getUsersResponse. Якщо шлях /posts
і метод GET
, викликається функція getPostsResponse.
Функції-обробники
getUsersResponse: Повертає список користувачів у вигляді JSON.
getPostsResponse
: Повертає список постів у вигляді JSON.
Статуси відповідей
Якщо шлях не відповідає жодному з оброблюваних, функція повертає статус 404 з повідомленням «Не знайдено».
Недоліки безсерверної архітектури (AWS Lambda)
- «Холодні» запуски: перший запуск функції може зайняти більше часу.
- Обмежене середовище виконання: існують обмеження за часом виконання та використанням пам’яті.
- Складнощі в налагодженні та моніторингу: налагодження та моніторинг можуть бути складнішими, ніж у традиційних архітектурах.
- Прив’язаність до постачальника послуг: використання специфічних сервісів може ускладнити перехід на інші платформи.
- Обмеження продуктивності: у деяких випадках продуктивність може бути нижчою порівняно з традиційними серверами.
- Мережева затримка під час взаємодії сервісів: взаємодія між різними сервісами може викликати додаткові затримки.
Переваги безсерверної архітектури
- Зменшення витрат на керування серверами: оплата тільки за фактичне використання ресурсів.
- Автоматичне масштабування ресурсів: автоматичне налаштування кількості ресурсів залежно від поточного навантаження.
- Економічна ефективність: зниження витрат на інфраструктуру та експлуатацію.
- Збільшення швидкості розробки застосунків: спрощення процесу розгортання та керування застосунками.
- Поліпшення безпеки та надійності застосунків: менше вразливостей, пов’язаних з керуванням інфраструктурою.
Приклади використання AWS Lambda
- Створення RESTful API: швидке створення та розгортання API без необхідності керування серверами.
- Обробка зображень та відео: автоматична обробка медіафайлів під час завантаження.
- Аналіз даних та створення звітів: реалізація функцій аналізу даних, запуск яких ініціюється за розкладом або за подіями.
- Обробка даних у реальному часі: обробка потоків даних з IoT-пристроїв або логів.
Ціни на AWS Lambda
Ціноутворення AWS Lambda базується на двох ключових компонентах: кількість запитів та тривалість виконання.
- Кількість запитів: перший мільйон запитів на місяць безкоштовно. Після цього $0.20 за мільйон запитів.
- Тривалість виконання: ви оплачуєте час виконання вашої функції, округлений до найближчої мілісекунди, і кількість пам’яті, яку ви виділили для функції. Перші 400,000 ГБ-секунд на місяць безкоштовно. Після цього $0.0000166667 за ГБ-секунду (залежить від регіону).
Приклад:
- Якщо ваша функція використовує 128 MБ пам’яті та виконується секунду, ви заплатите $0.000002083 за один запуск.
- Якщо у вас мільйон таких запусків на місяць, це коштуватиме $2.08.
Докладну інформацію про ціни можна знайти тут.
Які аналоги AWS Lambda існують
AWS Lambda є одним з лідерів на ринку безсерверних рішень, але існують інші сервіси, що пропонують схожі можливості:
- Google Cloud Functions: аналог від Google Cloud Platform, що також дозволяє запускати функції у відповідь на події. Підтримує багато мов програмування та інтеграцію з іншими сервісами Google Cloud.
- Azure Functions: рішення від Microsoft Azure, що підтримує кілька мов програмування та тісну інтеграцію з екосистемою Azure, зокрема підтримку DevOps та інструментів моніторингу.
- IBM Cloud Functions: заснований на платформі Apache OpenWhisk, пропонує аналогічні можливості та інтеграцію з іншими сервісами IBM Cloud.
- Oracle Functions: побудований на базі Fn Project, підтримує запуск функцій у відповідь на події та інтеграцію з сервісами Oracle Cloud.
- Alibaba Cloud Function Compute: аналогічний сервіс від Alibaba Cloud, що пропонує схожі можливості для запуску функцій у відповідь на події.
Висновок
Безсерверна архітектура та AWS Lambda відкривають нові можливості для розробників, дозволяючи їм створювати потужні та масштабовані застосунки без необхідності керування серверами. Ця стаття з’явилася завдяки моєму відео на YouTube. Не забудьте підписатися на канал, щоб не пропустити нові відео та залишатися в курсі найсвіжіших новин і корисних порад!
56 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів