Một task management API serverless không chỉ là CRUD qua Lambda. Nó đặt ra câu hỏi: auth làm sao, async worker để ở đâu, và single-table DynamoDB design thế nào. Mình build project này để bạn có thể fork và chạy ngay, không phải đọc 50 trang document.

Dự án build Task Management API serverless: HTTP API + Cognito JWT + Lambda CRUD + DynamoDB + SQS async worker + CDK deploy.


  flowchart TB
    Client["Client + JWT"] --> APIG["HTTP API<br/>JWT Authorizer"]
    APIG --> TaskLambda["Task Lambda<br/>CRUD operations"]
    TaskLambda --> DDB["DynamoDB<br/>PK: USER#id · SK: TASK#id"]
    TaskLambda --> SQS["SQS<br/>notification queue"]
    SQS --> NotifyLambda["Notify Worker<br/>email + push"]
    APIG --> Cognito["Cognito User Pool"]
// CDK: toàn bộ stack
const userPool = new cognito.UserPool(this, "Users", {
  selfSignUpEnabled: true,
});
const api = new apigatewayv2.HttpApi(this, "TaskApi");
api.addRoutes({
  path: "/tasks",
  methods: [HttpMethod.GET, HttpMethod.POST],
  integration: new HttpLambdaIntegration("Tasks", taskHandler),
  authorizer: new HttpJwtAuthorizer("Auth", cognitoIssuer, {
    jwtAudience: [clientId],
  }),
});

Bài sau: Phần 32: CloudWatch cơ bản — log, metric, alarm, dashboard