## Introduction to Serverless FastAPI Microservices with Cursor
Developing microservices using FastAPI in a serverless architecture offers unparalleled scalability, cost-efficiency, and rapid deployment. Unlike traditional monolithic applications or even containerized setups like Docker on ECS, serverless platforms such as AWS Lambda eliminate infrastructure management, auto-scaling based on demand, and billing only for actual compute time. This guide provides a complete set of rules tailored for Cursor AI—an intelligent code editor powered by advanced models—to generate production-ready Python FastAPI microservices deployable to serverless environments.
Cursor rules act as structured prompts that enforce consistency, best practices, and architecture patterns. By feeding these into Cursor's composer or chat, developers can auto-generate boilerplate, endpoints, and deployment configs with minimal manual tweaks. Compared to manual coding, this approach reduces errors by 70-80% in repetitive tasks, accelerates prototyping, and ensures adherence to standards like OpenAPI specs and AWS SAM for Lambda.
We'll break down the rules into key areas: project structure, dependencies, app design, error handling, logging, testing, CI/CD, security, and deployment. Each section includes practical examples and code snippets for immediate application.
## Project Structure and Organization
A well-defined project layout is crucial for microservices, especially in serverless where functions are independent but often interact via events or APIs. Cursor rules mandate a modular monorepo style for multi-service projects, contrasting with sprawling directories in legacy apps.
Key directories:
- `src/`: Core application code.
- `tests/`: Unit, integration, and contract tests.
- `deployment/`: AWS SAM templates, infrastructure as code (IaC).
- `docs/`: API specs, architecture diagrams.
- `scripts/`: Build, test, deploy helpers.
**Example structure:**
```
my-microservice/
├── src/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py
│ │ ├── models/
│ │ ├── services/
│ │ └── utils/
├── tests/
├── deployment/
│ ├── template.yaml
│ └── samconfig.toml
├── requirements.txt
├── pyproject.toml
└── .cursor-rules
```
Cursor enforces this via rules like: "Always use a `src/app` layout for FastAPI apps. Place Pydantic models in `models/`, business logic in `services/`, and shared utils separately." This prevents spaghetti code, making refactoring easier than in flat structures.
For multi-service setups, use a root `services/` dir with each microservice as a subdir, sharing common libs via local packages.
## Dependencies Management
Serverless functions have cold-start constraints, so minimize package size. Cursor rules prioritize `pyproject.toml` with Poetry over `requirements.txt` for better dependency resolution and lockfiles.
**Core dependencies:**
- `fastapi==0.104.1`
- `uvicorn[standard]==0.24.0` (for local dev)
- `pydantic==2.5.0`
- `pydantic-settings==2.1.0`
- `mangum==0.17.0` (ASGI adapter for Lambda)
- `boto3==1.34.0` (AWS SDK)
- `structlog==23.2.0` (structured logging)
**Rule example:** "Exclude dev deps from Lambda layers. Use `poetry export -f requirements.txt --without-hashes --dev` for prod builds."
This setup shrinks bundles by 50% vs naive pip installs, critical for Lambda's 250MB unzipped limit. Compare to Flask: FastAPI's async nature handles 10x more concurrent requests out-of-box.
## FastAPI Application Design
FastAPI shines in serverless with its ASGI compatibility via Mangum. Rules dictate:
- Single-entry `main.py` with `app = FastAPI(title="MyService", version="1.0")`.
- Dependency injection for DBs, caches via `Depends()`.
- Background tasks with `BackgroundTasks` for non-blocking ops.
**Sample endpoint:**
```python
from fastapi import FastAPI, Depends, BackgroundTasks
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item, background_tasks: BackgroundTasks):
background_tasks.add_task(process_item, item)
return {"item_id": "123"}
```
Rules add OpenAPI tags, summaries, and responses for auto-docs: `/docs` endpoint rivals Swagger but interactive.
## Error Handling and Validation
Serverless demands robust errors to avoid 5xx spikes. Cursor injects global exception handlers:
```python
@app.exception_handler(ValidationError)
async def validation_exception_handler(request, exc):
return JSONResponse(status_code=422, content={"detail": exc.errors()})
```
Custom exceptions like `ServiceError` with HTTP mappings (400-500). This beats try-catch hell in procedural code.
## Logging and Monitoring
Use `structlog` for JSON logs parseable by CloudWatch:
```python
import structlog
logger = structlog.get_logger()
logger.info("Processing item", item_id=123, user_id="abc")
```
Rules: "Log at INFO+ for prod, include request_id via middleware."
## Testing Strategies
Comprehensive tests: 80%+ coverage.
- Unit: `pytest` with `pytest-asyncio`.
- Integration: TestServer for FastAPI.
- Contract: `pytest-pact` for API pacts.
**Rule:** "Mock AWS services with `moto`; run tests in CI."
Example:
```python
import pytest
from httpx import AsyncClient
from src.app.main import app
@pytest.mark.asyncio
async def test_create_item():
async with AsyncClient(app=app, base_url="http://test") as ac:
response = await ac.post("/items/", json={"name": "foo", "price": 1.0})
assert response.status_code == 200
```
## CI/CD and Deployment
Leverage AWS SAM for Lambda packaging. Rules generate `template.yaml`:
```yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
ApiGateway:
Type: AWS::Serverless::Api
Properties:
StageName: prod
FastAPIHandler:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: app.main.handler
Runtime: python3.11
Events:
ApiEvent: ...
```
Deploy: `sam build && sam deploy --guided`. Cursor rules include GitHub Actions workflows for PR validation.
For full template, see the reference repo: [fastapi-microservices-template](https://github.com/GreatScottyMac/fastapi-microservices-template).
## Security Best Practices
- API keys via `X-API-Key` header, validated in deps.
- CORS with `CORSMiddleware`.
- Secrets from SSM/Parameter Store.
- Rate limiting with `slowapi`.
Rules: "Never hardcode secrets; use `pydantic-settings` for env vars."
## Performance Optimizations
Warm starts via provisioned concurrency. Async DBs (e.g., aiopg). Response caching with Redis layers.
**Comparison Table:**
| Aspect | Traditional VPS | Serverless Lambda |
|-----------------|-----------------|-------------------|
| Scaling | Manual | Automatic |
| Cost | Fixed | Pay-per-request |
| Cold Starts | None | 100-500ms |
| DevOps Burden | High | Low |
## Real-World Applications
E-commerce: Order service as Lambda, events to SQS for inventory. ML inference: Endpoint for model predictions. IoT: Process telemetry streams.
Integrate with [fastapi-microservices-template](https://github.com/GreatScottyMac/fastapi-microservices-template) to bootstrap.
## Conclusion
These Cursor rules transform FastAPI microservices into serverless powerhouses. Copy them into `.cursor-rules`, hit compose, and iterate. Expect 5x faster development vs vanilla VSCode. Scale to enterprise with confidence.
<div style="text-align: center; margin-top: 2rem;">
<a href="https://cursor.directory/fastapi-python-microservices-serverless-cursor-rules" target="_blank" rel="noopener noreferrer" class="view-full-resource-btn" style="display: inline-block; background-color: #f97316; color: white; padding: 12px 24px; border-radius: 8px; text-decoration: none; font-weight: 600; transition: background-color 0.2s;">View Full Resource</a>
</div>