Интеграция AWS Lambda для серверной логики мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция AWS Lambda для серверной логики мобильного приложения
Средний
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция AWS Lambda для серверной логики мобильного приложения

AWS Lambda — serverless-функции, которые исполняются по запросу и не требуют управления серверами. Для мобильного приложения Lambda закрывает серверную логику, которую нельзя вынести на клиент: верификация платежей, генерация подписанных URL для S3, пуш-уведомления, обработка вебхуков от Stripe/Apple IAP, тяжёлые вычисления.

Архитектура мобильный клиент → Lambda

Мобильное приложение вызывает Lambda через один из путей:

API Gateway + Lambda — самый распространённый. REST или HTTP API Gateway принимает запрос, проксирует в Lambda. Lambda отвечает — Gateway отдаёт клиенту. Авторизация через Cognito Authorizer или JWT Authorizer.

AppSync + Lambda resolver — для GraphQL. Lambda выступает resolver-ом для конкретных полей схемы.

Lambda Function URL — прямой HTTPS-эндпоинт для функции без API Gateway. Дешевле и проще, но меньше возможностей (нет throttling, нет кастомных доменов без CloudFront).

Практический пример: верификация Apple IAP

Валидация покупок App Store нельзя делать на клиенте — чек легко подделать. 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, не в переменных окружения напрямую в консоли (они видны в логах при неосторожности).

Cold Start — главная проблема Lambda для мобильных клиентов

Cold start на Node.js 20.x с SnapStart — 200–400мс. Для Java без SnapStart — 1–3 секунды. Это критично для API, которые пользователь ждёт.

Митигации:

  • Provisioned Concurrency — Lambda всегда разогрета, но платите за простой
  • AWS Lambda SnapStart (Java) — снапшот инициализированной среды
  • Минимальные зависимостиaws-sdk v3 с модульными импортами вместо всего SDK
  • Node.js / Python для latency-чувствительных функций вместо Java/Kotlin
// Плохо: импортируем весь SDK
import AWS from 'aws-sdk';

// Хорошо: только нужный клиент
import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb';

Разница в размере бандла: 30MB vs 150KB. Разница в cold start: ощутимая.

Авторизация через Cognito

// React Native: добавляем токен к запросам
const session = await fetchAuthSession();
const token = session.tokens?.idToken?.toString();

const response = await fetch('https://api.myapp.com/purchase/verify', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ receiptData }),
});

API Gateway с Cognito JWT Authorizer автоматически верифицирует токен. Lambda получает event.requestContext.authorizer.jwt.claims с userId — не нужно валидировать токен в коде функции.

IaC: Lambda через CDK или Terraform

Кнопочки в AWS Console — не для продакшена. Lambda описывается кодом:

// 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.

Что входит в интеграцию

Настройка 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 недели. Стоимость — по объёму.