Чому AWS Lambda для серверної логіки мобільного додатку?
Уявіть: ваш додаток обробляє 1000 покупок на хвилину. Клієнт підтверджує транзакцію — потрібно перевірити її справжність в App Store. На клієнті цього не зробити — зловмисник підмінить відповідь. Ось чому серверна логіка на AWS Lambda для мобільного додатку критична. Без серверної валідації зловмисник може підробити відповідь і отримати контент безкоштовно. AWS Lambda вирішує це завдання: функція перевіряє чек в Apple або Google, записує результат в DynamoDB і повертає статус клієнту. Все це без управління серверами й з автоматичним масштабуванням під пікові навантаження.
AWS Lambda — serverless-функції, які виконуються на запит і не потребують управління серверами. Ми використовуємо Lambda для завдань, які не можна винести на клієнт: верифікація платежів, генерація підписаних URL для S3, push-сповіщення через APNs/FCM, обробка вебхуків від Stripe або Apple IAP, важкі обчислення. На відміну від традиційного сервера, Lambda масштабується автоматично під навантаження, і ви платите тільки за фактичний час виконання.
Архітектура мобільний клієнт → Lambda
Мобільний додаток викликає Lambda через один зі шляхів:
- API Gateway + Lambda — найпоширеніший. REST або HTTP API Gateway приймає запит, проксує в Lambda. Lambda відповідає — Gateway віддає клієнту. Авторизація через Cognito JWT Authorizer або IAM.
- AppSync + Lambda resolver — для GraphQL. Lambda виступає resolver-ом для конкретних полів схеми.
- Lambda Function URL — прямий HTTPS-ендпоінт для функції без API Gateway. Дешевше й простіше, але менше можливостей (немає throttling, немає кастомних доменів без CloudFront).
Порівняння варіантів виклику Lambda
| Критерій | API Gateway + Lambda | Function URL |
|---|---|---|
| Складність налаштування | Середня | Низька |
| Авторизація | Cognito, JWT, IAM | IAM, Lambda URL auth |
| Throttling | Вбудований | Немає |
| Кастомний домен | Так (через CloudFront) | Тільки через CloudFront |
| Вартість | Запити + трафік | Тільки виклики Lambda |
Як зменшити холодний старт?
Cold start — головний виклик Lambda для мобільних клієнтів. На Node.js 20.x з SnapStart затримка становить 200–400 мс. Для Java без SnapStart — 1–3 секунди. Ми застосовуємо мітигації:
- Provisioned Concurrency — розігріті екземпляри, але плата за простій
- AWS Lambda SnapStart (Java) — snapshot ініціалізації
- Мінімізація залежностей: aws-sdk v3 з модульними імпортами замість всього SDK
- Вибір runtime: Node.js або Python для latency-чутливих функцій
Порівняння cold start по runtime
| Runtime | Без SnapStart | З SnapStart |
|---|---|---|
| Node.js 20.x | 200–400 мс | — |
| Python 3.12 | 300–500 мс | — |
| Java 21 | 1–3 с | 150–300 мс |
| .NET 8 | 800–1500 мс | 400–800 мс |
Приклад оптимізації імпортів:
// Погано: імпортуємо весь SDK import AWS from 'aws-sdk'; // Добре: тільки потрібний клієнт import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb'; Розмір бандла: 30 MB проти 150 KB. Різниця в cold start суттєва.
Практичний приклад: верифікація Apple IAP
Валідацію покупок App Store не можна робити на клієнті — чек легко підробити. Згідно з Apple Receipt Verification Guide, сервер надсилає receipt-data на verifyReceipt endpoint. Lambda:
// handler.mjs (Node.js 20.x) import { AppleVerifyReceiptResponse } from './types.js'; export const handler = async (event) => { const { receiptData, userId } = JSON.parse(event.body); const verifyUrl = process.env.APPLE_ENV === 'production' ? 'https://buy.itunes.apple.com/verifyReceipt' : 'https://sandbox.itunes.apple.com/verifyReceipt'; const response = await fetch(verifyUrl, { method: 'POST', body: JSON.stringify({ 'receipt-data': receiptData, password: process.env.APPLE_SHARED_SECRET, 'exclude-old-transactions': true, }), }); const data = await response.json(); if (data.status !== 0) { return { statusCode: 400, body: JSON.stringify({ error: 'Invalid receipt' }) }; } // Зберігаємо purchase в DynamoDB await savePurchase(userId, data.latest_receipt_info); return { statusCode: 200, body: JSON.stringify({ success: true }) }; }; Секрети (APPLE_SHARED_SECRET) — в AWS Secrets Manager або Parameter Store, не в змінних оточення напряму (вони видимі в логах при необережності). Якщо вам потрібна подібна інтеграція — зв'яжіться з нами, ми допоможемо реалізувати її під ваш стек.
Стек для Infrastructure as Code
Lambda через CDK або Terraform — обов'язковий етап для продакшену. Ми використовуємо AWS CDK на TypeScript:
Розгорнутий приклад CDK-стеку
// AWS CDK (TypeScript) const verifyPurchaseFn = new NodejsFunction(this, 'VerifyPurchase', { entry: 'src/functions/verify-purchase/handler.ts', runtime: Runtime.NODEJS_20_X, timeout: Duration.seconds(10), memorySize: 256, environment: { APPLE_ENV: 'production', }, bundling: { minify: true, sourceMap: true }, }); const api = new RestApi(this, 'MobileApi'); api.root.addResource('purchase').addResource('verify') .addMethod('POST', new LambdaIntegration(verifyPurchaseFn), { authorizer: cognitoAuthorizer, }); CDK збирає і бандлить TypeScript-функції через esbuild, деплоїть через CloudFormation.
Процес інтеграції
- Аналітика: визначаємо серверні функції (верифікація, сповіщення, webhook)
- Проєктування: архітектура API, вибір runtime, налаштування IAM
- Реалізація: розробка Lambda, інтеграція з мобільним SDK
- Тестування: unit-тести, навантажувальні тести, перевірка cold start
- Деплой: IaC, налаштування оточень dev/staging/prod
- Моніторинг: CloudWatch Logs, X-Ray трейсинг
Що входить в інтеграцію
- Налаштування Lambda функцій під конкретну серверну логіку
- API Gateway або Function URL з авторизацією
- IaC через CDK або Terraform
- Налаштування оточень (dev/staging/prod)
- Моніторинг через CloudWatch + X-Ray трейсинг
- Інтеграція з мобільним клієнтом (SDK або fetch)
Терміни орієнтовно
Одна Lambda-функція з API Gateway: 1–2 дні. Повний serverless-бекенд (5–10 функцій + DynamoDB + Auth): 1–3 тижні. Вартість розраховується індивідуально в залежності від об'єму. При цьому використання Lambda дозволяє економити на інфраструктурі до 60% порівняно з традиційним сервером.
Отримайте консультацію
Якщо вам потрібна надійна серверна логіка для мобільного додатку — зв'яжіться з нами для оцінки проєкту та замовте безкоштовний аудит поточного бекенду. Наш багаторічний досвід у мобільній розробці та сотні реалізованих serverless-рішень гарантують якість і дотримання термінів.







