What is Serverless?
Serverless computing means you don't manage servers. You write functions that run in response to events, and the cloud provider handles scaling.
AWS Lambda Basics
Creating a Function
import { APIGatewayProxyHandler } from 'aws-lambda';
export const handler: APIGatewayProxyHandler = async (event) => {
const userId = event.pathParameters?.userId;
// Your logic here
const user = await getUser(userId);
return {
statusCode: 200,
body: JSON.stringify(user),
};
};
Serverless Framework Configuration
We use Serverless Framework configuration with YAML. The actual dollar-brace syntax would need escaping in production code.
See the official Serverless Framework docs for the complete configuration reference.
functions:
createUser:
handler: handler.createUser
events:
- http:
path: /users
method: post
cors: true
getUser:
handler: handler.getUser
events:
- http:
path: /users/{userId}
method: get
cors: true
processPayment:
handler: handler.processPayment
events:
- http:
path: /payments
method: post
cors: true
resources:
Resources:
UserTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: users
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
SaaS Multi-tenancy in Serverless
Per-tenant Lambda Functions
export const handler: APIGatewayProxyHandler = async (event) => {
const tenantId = event.headers['x-tenant-id'];
if (!tenantId) {
return { statusCode: 401, body: 'Tenant required' };
}
// Route to tenant-specific handler
const tenantConfig = await getTenantConfig(tenantId);
return processRequest(event, tenantConfig);
};
Event-Driven Architecture
Event Flow:
User Signs Up → Lambda (create tenant) → DynamoDB (store)
↓
SQS (queue welcome email)
↓
Lambda (send welcome) → SES
Cost Optimization
When to Use Serverless
✅ Event-driven workloads
✅ Variable traffic patterns
✅ Fast prototyping
✅ Cost-sensitive startups
❌ Consistent heavy workloads
❌ Real-time applications (consider containers)
❌ Complex stateful operations
Conclusion
Serverless is powerful for SaaS startups. Start serverless, migrate to containers when needed, and let AWS handle the infrastructure.
import { APIGatewayProxyHandler } from 'aws-lambda';
export const handler: APIGatewayProxyHandler = async (event) => {
const userId = event.pathParameters?.userId;
// Your logic here
const user = await getUser(userId);
return {
statusCode: 200,
body: JSON.stringify(user),
};
};
## SaaS Multi-tenancy in Serverless
### Per-tenant Lambda Functions
## Event-Driven Architecture