Чому AWS SAM, а не Serverless Framework?
Ми перевели пʼять проєктів з Serverless Framework на AWS SAM і щоразу отримували виграш: менше костилів, прозорий CloudFormation стек, нативна інтеграція з CDK. SAM — це не черговий абстрактор, а офіційний інструмент AWS, повністю сумісний з CloudFormation: на виході повноцінний стек, який версіонується та відкочується. Замість 50 рядків CloudFormation для Lambda + API Gateway + IAM Role пишеться 10 рядків SAM. Це скорочує час розробки бекенду на 40% і знижує ризик помилок конфігурації. Типовий проєкт на SAM коштує на 30–50% дешевше за аналог на Serverless Framework завдяки меншому обсягу коду та відсутності плагінів.
Сертифіковані AWS-інженери мають 5 років досвіду в serverless-архітектурах і реалізували понад 30 проєктів на SAM. Ми гарантуємо сумісність з вашим стеком та оптимізацію витрат — наприклад, завдяки Graviton2 економія на Lambda сягає 20%, а вартість інфраструктури знижується на 40% при міграції з EC2 на Lambda. Як каже AWS: "SAM is the easiest way to build serverless applications".
Чому Graviton2?
Процесори AWS Graviton2 на архітектурі ARM64 забезпечують до 20% кращої продуктивності за ту ж ціну порівняно з x86. SAM дозволяє вибрати архітектуру в шаблоні одним рядком.Порівняння SAM і Serverless Framework
| Критерій | AWS SAM | Serverless Framework |
|---|---|---|
| Абстракція | Пряме розширення CloudFormation | Власний синтаксис із провайдерами |
| Розмір шаблону | 10 рядків для простої функції | 15–20 рядків з плагінами |
| Інтеграція з AWS | Нативна, повна підтримка сервісів | Потрібні плагіни для деяких сервісів |
| Локальна розробка | SAM CLI + Docker | serverless-offline |
| Версіонування стеку | CloudFormation Change Sets | Окремі інструменти |
Як налаштувати CI/CD для SAM?
Безперервна інтеграція та доставка — обовʼязкова частина продакшен-архітектури. SAM чудово вбудовується в будь-який популярний пайплайн: GitHub Actions, GitLab CI, AWS CodePipeline. Типовий сценарій: на push у гілку main запускається збірка (sam build) і деплой в оточення prod з автоматичним затвердженням Change Set.
# .github/workflows/deploy.yml (фрагмент)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActions
aws-region: eu-west-1
- name: SAM build and deploy
run: |
sam build
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
Для багатооточенної конфігурації використовуйте samconfig.toml з різними профілями. Відкат виконується стандартною командою CloudFormation rollback-stack — нульовий downtime.
Що входить у налаштування SAM-бекенду?
Наша робота включає повний цикл: від аудиту поточної архітектури до передачі документації.
- Архітектурний документ: схема сервісів, вибір Lambda-рантайму, розрахунок памʼяті та таймаутів.
- Шаблон template.yaml: всі ресурси (Lambda, API Gateway, DynamoDB, SQS, S3) з політиками та змінними оточення.
- Вихідний код Lambda: обробники на TypeScript/Node.js 20, авторизатор JWT, middlewares, тести.
- Конфігурація оточень: dev/staging/prod з різними стейджами, SSM-параметрами для секретів.
- CI/CD пайплайн: готовий workflow для GitHub Actions або GitLab CI.
- Документація та навчання: README з прикладами викликів, описом змінних, інструкцією для розробників.
- Гарантія: після деплою — тиждень підтримки для виправлення можливих інцидентів.
Швидкий старт: встановлення та структура
brew tap aws/tap
brew install aws-sam-cli
# або: pip install aws-sam-cli
sam --version # SAM CLI, version 1.x
sam init --runtime nodejs20.x --dependency-manager npm --app-template hello-world --name my-backend
Структура проєкту:
-
template.yaml— SAM-шаблон -
samconfig.toml— конфіг деплою -
src/handlers/— обробники (api.ts, auth.ts, worker.ts) -
src/shared/— спільний код (db.ts, response.ts) -
events/— тестові події -
__tests__/— тести
Налаштування шаблону та обробників
Ключові елементи template.yaml:
AWSTemplateFormatVersion: '2010-09-31'
Transform: AWS::Serverless-2016-10-31
Description: My Web Backend
Globals:
Function:
Runtime: nodejs20.x
Architectures: [arm64]
MemorySize: 512
Timeout: 10
Api:
Cors:
AllowMethods: "'*'"
Resources:
ApiGateway:
Type: AWS::Serverless::HttpApi
Properties:
StageName: !Ref Stage
Auth:
DefaultAuthorizer: LambdaAuthorizer
Authorizers:
LambdaAuthorizer:
FunctionArn: !GetAtt AuthFunction.Arn
ApiFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/handlers/api.handler
Events:
AnyRoute:
Type: HttpApi
Properties:
ApiId: !Ref ApiGateway
Method: ANY
Path: /api/{proxy+}
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref MainTable
Metadata:
BuildMethod: esbuild
BuildProperties:
Minify: true
Target: es2022
Приклад Lambda Authorizer:
import { verify } from 'jsonwebtoken';
export const handler = async (event) => {
const token = event.headers?.authorization?.replace('Bearer ', '');
if (!token) return { isAuthorized: false };
try {
const payload = verify(token, process.env.JWT_SECRET!);
return { isAuthorized: true, context: { userId: String(payload.sub) } };
} catch {
return { isAuthorized: false };
}
};
Як оптимізувати витрати на SAM?
- Використовуйте Graviton2 (arm64) — економія до 20% на Lambda.
- Встановлюйте Provisioned Concurrency лише для критичних функцій.
- Налаштуйте CloudWatch Lambda Insights для моніторингу та виявлення неефективних запитів.
- Виносьте статику в S3 + CloudFront, не навантажуйте API Gateway.
- Оптимізуйте розмір деплой-пакету: esbuild мініфікація, tree-shaking.
Локальна розробка та CI/CD
Для локального запуску використовуємо sam local start-api з моком DynamoDB через Docker. Конфігурація оточень задається в samconfig.toml:
[default.deploy.parameters]
stack_name = "my-backend-dev"
s3_bucket = "artifacts-bucket"
region = "eu-west-1"
parameter_overrides = "Stage=dev"
Деплой виконується командами:
sam build && sam deploy --config-env dev
# або для prod
sam build && sam deploy --config-env prod
Процес включає збірку (esbuild мініфікацію), генерацію Change Set та застосування. Відкат — стандартна команда CloudFormation rollback-stack.
Процес і терміни
| Етап | Тривалість | Результат |
|---|---|---|
| Аналіз архітектури | 0.5–1 день | Документ з рекомендаціями |
| Проектування SAM-шаблонів | 1–2 дні | template.yaml, samconfig.toml |
| Реалізація Lambda-функцій | 2–3 дні | handlers, shared-шар, тести |
| Інтеграція з сервісами | 1–2 дні | DynamoDB, SQS, S3, API Gateway |
| Тестування та налагодження | 1–2 дні | Unit та інтеграційні тести |
| Деплой та CI/CD | 1 день | Pipeline (GitHub Actions / GitLab CI) |
| Документація та навчання | 0.5 дня | README, приклади викликів |
Базовий SAM-бекенд з одним Lambda і DynamoDB — 1–2 дні. Повноцінна архітектура з авторизатором, фоновими воркерами та кількома оточеннями — 4–5 днів. Адаптація існуючого коду на Express/Fastify — 3–5 днів.
Звʼяжіться з нами для оцінки вашого проєкту — наші інженери проаналізують поточну архітектуру та підготують комерційну пропозицію. Замовте налаштування AWS SAM під ключ — ми візьмемо на себе всю інфраструктуру, від шаблонів до CI/CD.







