Kiro và AI Tác tử: Hành trình Kiến tạo Nền tảng SaaS Quản lý Sự kiện Từ Zéro đến Hiện Thực trên AWS

Thế giới công nghệ ngày càng phát triển, và sự hội tụ giữa niềm đam mê cá nhân cùng chuyên môn kỹ thuật đang mở ra những cánh cửa mới cho sự đổi mới. Đối với một vận động viên calisthenics chuyên nghiệp, việc tổ chức các sự kiện thường xuyên đặt ra thách thức về cách thức theo dõi kết quả một cách mượt mà cho người dùng. Song song đó, việc đăng ký, công bố kết quả, quản lý thời gian thi đấu, hệ thống tính điểm và các thể thức khác nhau cũng là những mối quan tâm hàng đầu của người quản lý sự kiện. Với vai trò là kiến trúc sư giải pháp AWS và chuyên gia DevSecOps, câu hỏi đầu tiên đặt ra là làm thế nào để kết hợp cả hai thế giới này nhằm tạo ra một giải pháp nhanh chóng, an toàn và hiện đại – mà không phải hy sinh những thực hành tốt nhất.

Bài viết này mời gọi bạn khám phá cách phát triển AI tác tử (Agentic AI) với Kiro có thể cách mạng hóa việc quản lý sự kiện và kiến tạo nền tảng SaaS. Dù bạn là một nhà phát triển AWS, kỹ sư DevOps hoặc DevSecOps, kiến trúc sư SaaS, chuyên gia AI, kỹ sư nền tảng, chủ sản phẩm kỹ thuật hay người quản lý sự kiện, hãy cùng chúng tôi đi sâu vào các công nghệ đám mây và AI hiện đại được thiết kế để hợp lý hóa việc quản lý sự kiện và theo dõi kết quả. Khám phá những thực hành tốt nhất trong các giải pháp SaaS gốc đám mây, bảo mật, có khả năng mở rộng, đồng thời tăng tốc quá trình phát triển của bạn với kiến trúc không máy chủ và quy trình làm việc AI sáng tạo.

Phát triển Nguyên mẫu Nhanh chóng với Kiro: Tối ưu hóa SDLC và Platform Engineering

Trong hành trình không ngừng theo đuổi việc tối ưu hóa cả vòng đời phát triển phần mềm (SDLC) và kỹ thuật nền tảng (Platform Engineering), việc chủ động khám phá đa dạng các quy trình và thực hành AI đã trở thành một ưu tiên hàng đầu. Mục tiêu cuối cùng là nâng cao hiệu quả và thúc đẩy sự đổi mới trong toàn bộ quá trình phát triển. Tuy nhiên, nhu cầu cấp thiết trước mắt là tạo ra một nguyên mẫu nhanh chóng, có khả năng hỗ trợ ý tưởng một cách hiệu quả trong khi vẫn tuân thủ nghiêm ngặt các thực hành tốt nhất.

Để đạt được mục tiêu này, kiến trúc không máy chủ (serverless) được ưu tiên hàng đầu nhờ tốc độ, khả năng mở rộng và hiệu quả về chi phí, đảm bảo rằng giải pháp không chỉ an toàn mà còn có thể phát triển cùng với nhu cầu của người dùng. Trong số các lựa chọn có sẵn, Kiro đã được chọn làm công cụ phát triển chính. Kiro nổi bật nhờ khả năng mang lại cấu trúc cho việc lập trình AI thông qua phát triển theo đặc tả (spec-driven development), cho phép tạo ra các nguyên mẫu mạnh mẽ một cách nhanh chóng, đồng thời duy trì các tiêu chuẩn cao về cả bảo mật và khả năng mở rộng.

Một số tính năng nổi bật của Kiro bao gồm:

  • Chuyển đổi các yêu cầu tự nhiên thành các yêu cầu có cấu trúc.
  • Thiết kế kiến trúc được hỗ trợ bởi các thực hành tốt nhất.
  • Phân tách các tác vụ rời rạc phù hợp với các yêu cầu.

Xây dựng Nền tảng Vững chắc cho Một Sản phẩm Sẵn sàng Sản xuất

Việc tạo ra một nguyên mẫu đáng tin cậy vốn dĩ đã phức tạp, đặc biệt là khi ý tưởng có khả năng thu hút sự chú ý và cuối cùng đi vào sản xuất. Trong những kịch bản như vậy, điều cần thiết là phải giảm thiểu nợ kỹ thuật (technical debt) ngay từ đầu, đảm bảo rằng nguyên mẫu được chuẩn bị cho một quá trình chuyển đổi liền mạch sang môi trường sản xuất. Do đó, quy trình lựa chọn các công nghệ phù hợp và thiết lập các thực hành nền tảng vững chắc trở thành một khía cạnh quan trọng để chuyển đổi từ nguyên mẫu sang Sản phẩm Khả dụng Tối thiểu (MVP – Minimum Viable Product).

Ngăn xếp Công nghệ và Thực hành Phát triển Hiện đại

Đối với giao diện người dùng (front-end), một ứng dụng web React đã được lựa chọn để đảm bảo trải nghiệm người dùng tương tác và phản hồi nhanh. Kiến trúc của ứng dụng tuân thủ phương pháp luận Twelve-Factor App, cung cấp một khuôn khổ để xây dựng các giải pháp phần mềm dưới dạng dịch vụ (SaaS) có khả năng mở rộng và dễ bảo trì.

Để duy trì các tiêu chuẩn cao về độ tin cậy và bảo mật, các thực hành tốt nhất của AWS đã được tuân thủ nghiêm ngặt trong suốt quá trình phát triển. Hệ thống được thiết kế bằng kiến trúc hướng sự kiện (event-driven architecture), cho phép xử lý hiệu quả các tác vụ bất đồng bộ và cải thiện khả năng mở rộng.

Hạ tầng dưới dạng mã (IaC – Infrastructure as Code) được triển khai bằng AWS Cloud Development Kit (CDK), hợp lý hóa quy trình định nghĩa và quản lý tài nguyên đám mây một cách lặp lại và có kiểm soát phiên bản.

Đối với tích hợp và triển khai liên tục (CI/CD), GitHub đã được tích hợp với các runner tự lưu trữ và AWS CodeBuild. Thiết lập này cho phép một luồng tự động và liền mạch từ các commit mã nguồn đến việc triển khai, hỗ trợ lặp lại nhanh chóng và các quy trình làm việc DevOps mạnh mẽ.

Trong các bài viết tiếp theo, chúng ta sẽ đi sâu hơn về việc sử dụng Nova Act để tạo các bài kiểm tra UI với Playwright cho mục đích kiểm thử.

Kiro IDE và Kiro CLI được sử dụng song song để thực hiện các tác vụ của dự án. Trong khi IDE xử lý các tác vụ theo đặc tả, CLI giúp tạo các thành phần backend cho hạ tầng, gỡ lỗi và sửa lỗi.

Khởi động Dự án: Từ Khung xương đến Đặc tả Tính năng với Kiro

Khi bắt đầu phát triển, một dự án khung (scaffold project) CDK đã được tạo ra, cùng với việc chèn các tệp chứa các quy tắc dự án cơ bản và kiến thức chuyên sâu về hệ thống. Những tệp này cung cấp ngữ cảnh cần thiết cho Kiro để hiểu codebase, các quy ước và nhu cầu của dự án.

Quá trình thiết lập ban đầu với Kiro bắt đầu bằng việc tạo dự án và thiết lập các “tệp điều hướng” (steering files) theo hướng dẫn của Kiro. Các tệp điều hướng này được lưu trữ trong thư mục `.kiro/steering/` và phác thảo chi tiết về sản phẩm, ngăn xếp công nghệ, cấu trúc dự án và các quy ước được sử dụng.

Ví dụ về Dữ liệu Tệp Điều hướng:

Dưới đây là một phần của các tệp điều hướng mẫu, giúp Kiro hiểu rõ về dự án:

product.md

Athleon Platform

Nền tảng quản lý cuộc thi calisthenics đa-tenant với kiểm soát truy cập dựa trên vai trò (RBAC).

## Chức năng Chính

- **Tổ chức**: Đội ngũ đa-tenant với các vai trò chủ sở hữu/quản trị viên/thành viên
- **Sự kiện**: Quản lý vòng đời cuộc thi (draft → published → completed)
- **Vận động viên**: Quản lý hồ sơ, đăng ký sự kiện, nộp điểm
- **Tính điểm**: Công cụ tính toán nâng cao với nhiều hệ thống tính điểm
- **WODs**: Mẫu bài tập (phạm vi sự kiện và toàn cầu)
- **Hạng mục**: Các hạng mục thi đấu (phạm vi sự kiện và xuyên suốt)
- **Lịch trình**: Bảng đấu giải và quản lý phiên

## Vai trò Người dùng
...

tech.md

# Ngăn xếp Công nghệ

## Hạ tầng

- **IaC**: AWS CDK (TypeScript)
- **Tính toán**: AWS Lambda (Node.js 18.x)
- **Cơ sở dữ liệu**: DynamoDB (một bảng cho mỗi miền)
- **API**: API Gateway REST API với Cognito authorizer
- **Xác thực**: Amazon Cognito User Pools
- **Lưu trữ**: S3 (ảnh sự kiện)
- **Sự kiện**: EventBridge (domain event bus + central bus)
- **Triển khai**: CDK deploy với esbuild bundling

## Backend

- **Runtime**: Node.js 18.x
- **SDK**: AWS SDK v3 (@aws-sdk/client-*)
- **Kiểm thử**: Jest, Vitest, fast-check (property-based testing)
- **Shared Layer**: Lambda layer tại `layers/athleon-shared/nodejs`

## Frontend

- **Framework**: React 18 + Vite
- **Routing**: React Router v6
- **State**: Zustand + React Query (@tanstack/react-query)
- **Auth**: AWS Amplify v6
- **UI**: Các thành phần tùy chỉnh với @aws-amplify/ui-react
- **i18n**: i18next + react-i18next
- **Kiểm thử**: Vitest + React Testing Library
- **E2E**: Playwright (trong e2e-tests/)

## Lệnh Chung

### Hạ tầng

...

Tiếp theo, việc xây dựng một tính năng với các đặc tả được thực hiện qua ba giai đoạn:

  1. Yêu cầu (Requirements) – Các câu chuyện người dùng với tiêu chí chấp nhận theo ký hiệu EARS.
  2. Thiết kế (Design) – Kiến trúc kỹ thuật và cách tiếp cận triển khai.
  3. Tác vụ (Tasks) – Các bước triển khai rời rạc, có thể theo dõi.

Ví dụ, một tính năng là: “Tạo hệ thống RBAC để duy trì các vai trò và trách nhiệm cho các người dùng nền tảng khác nhau (Super Admin, vận động viên, người tổ chức và khán giả)”. Lệnh nhắc này tạo ra một cấu trúc và hợp nhất quy trình từ yêu cầu đến mã nguồn:

requierements.md

# Tài liệu Yêu cầu

## Giới thiệu

Đặc tả này định nghĩa một hệ thống đăng ký người dùng dựa trên vai trò (RBAC) cho nền tảng Athleon sử dụng một Amazon Cognito User Pool duy nhất. Hệ thống phải hỗ trợ ba vai trò người dùng riêng biệt (vận động viên, người tổ chức và siêu quản trị viên) với các mức độ truy cập và quy trình đăng ký khác nhau. Vận động viên và người tổ chức có thể tự đăng ký qua giao diện người dùng với lựa chọn vai trò, trong khi siêu quản trị viên chỉ được tạo thông qua các script backend.

## Thuật ngữ

- **Cognito User Pool**: Dịch vụ thư mục người dùng do AWS quản lý, xử lý xác thực người dùng và lưu trữ thuộc tính người dùng
- **Pre-signup Trigger**: Hàm AWS Lambda được Cognito gọi trước khi quá trình đăng ký người dùng hoàn tất
- **Custom Attribute**: Thuộc tính do người dùng định nghĩa được lưu trữ trong hồ sơ người dùng Cognito (ví dụ: custom:role)
- **Athlete**: Người dùng tham gia các sự kiện và xem bảng xếp hạng
- **Organizer**: Người dùng tạo và quản lý các sự kiện, hạng mục và WODs
- **Super Admin**: Quản trị viên nền tảng có toàn quyền truy cập hệ thống
- **Self-registration**: Quy trình đăng ký do người dùng khởi tạo thông qua ứng dụng giao diện người dùng
- **RBAC**: Hệ thống kiểm soát truy cập dựa trên vai trò xác định quyền của người dùng dựa trên các vai trò được gán
- **JWT Token**: JSON Web Token chứa các xác nhận của người dùng bao gồm thuộc tính custom:role
- **Onboarding Flow**: Toàn bộ quy trình từ đăng ký ban đầu đến truy cập đã xác thực

design.md

## Kiến trúc

### Các thành phần Cấp cao

┌─────────────────┐
│  Ứng dụng Frontend│
│  (React + AWS   │
│   Amplify UI)   │
└────────┬────────┘
         │
         │ 1. Đăng ký với lựa chọn vai trò
         ▼
┌─────────────────────────────────────────┐
│     Amazon Cognito User Pool            │
│  ┌───────────────────────────────────┐  │
│  │  Pre-signup Lambda Trigger        │  │
│  │  - Xác thực lựa chọn vai trò       │  │
│  │  - Thiết lập thuộc tính custom:role│  │
│  │  - Từ chối các nỗ lực siêu quản trị viên│  │
│  └───────────────────────────────────┘  │
│  ┌───────────────────────────────────┐  │
│  │  Pre-token Generation Trigger     │  │
│  │  - Thêm vai trò vào JWT claims        │  │
│  └───────────────────────────────────┘  │
└─────────────────┬───────────────────────┘
                  │
                  │ 2. JWT với yêu cầu vai trò
                  ▼
┌─────────────────────────────────────────┐
│     API Gateway + Lambda Functions      │
│  - Trích xuất vai trò từ JWT token          │
│  - Thực thi quyền dựa trên vai trò       │
│  - Định tuyến đến các dịch vụ phù hợp        │
└─────────────────────────────────────────┘
...

tasks.md

# Kế hoạch Triển khai

- [x] 1. Cập nhật Pre-Signup Lambda Trigger
  - Sửa đổi `lambda/auth/pre-signup-trigger.js` để trích xuất và xác thực vai trò từ yêu cầu đăng ký
  - Triển khai logic để chấp nhận các vai trò 'athlete' hoặc 'organizer'
  - Triển khai logic để từ chối vai trò 'super_admin' với lỗi
  - Mặc định là 'athlete' cho các vai trò bị thiếu hoặc không hợp lệ
  - Thêm ghi nhật ký CloudWatch toàn diện cho tất cả các gán vai trò
  - _Yêu cầu: 1.2, 1.3, 1.4, 1.5, 5.1, 5.2, 5.3, 5.4, 5.5, 8.1, 8.2_

- [x] 1.1 Viết kiểm thử thuộc tính cho pre-signup trigger
  - **Thuộc tính 1: Tính nhất quán của việc gán vai trò**
  - **Thuộc tính 2: Từ chối siêu quản trị viên**
  - **Thuộc tính 3: Gán vai trò mặc định**
  - **Xác thực: Yêu cầu 1.2, 1.3, 1.4, 1.5, 2.4, 5.1, 5.2, 5.3, 5.4**
...

Mở rộng Khả năng với Giao thức Ngữ cảnh Mô hình (MCP)

Để mở rộng khả năng của hệ thống, giao thức Ngữ cảnh Mô hình (Model Context Protocol – MCP) được tích hợp để cung cấp thêm ngữ cảnh cho AI tác tử. MCP cho phép:

  • Truy cập các cơ sở kiến thức và tài liệu chuyên biệt.
  • Tích hợp với các API và dịch vụ bên ngoài.
  • Sử dụng các công cụ và tiện ích đặc thù theo miền.
  • Kết nối với cơ sở dữ liệu và dịch vụ đám mây.

Ban đầu, hai máy chủ MCP đã được tích hợp:

{
  "mcpServers": {
    "awslabs.core-mcp-server": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "--from",
        "awslabs.core-mcp-server@latest",
        "awslabs.core-mcp-server.exe"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_PROFILE": "labvel-dev",
        "AWS_REGION": "us-east-2",
        "aws-foundation": "true",
        "solutions-architect": "true"
      },
      "disabled": false,
      "disabledTools": [
        "aws_knowledge_aws___get_regional_availability",
        "aws_knowledge_aws___list_regions",
        "pricing_get_bedrock_patterns",
        "cost_explorer_get_cost_comparison_drivers"
      ]
    },
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ],
      "disabled": false
    }
  }
}

Những Thành quả Đạt được và Kiến trúc Nền tảng Hoàn chỉnh

Sau quá trình triển khai và tối ưu hóa chuyên sâu, nền tảng SaaS quản lý sự kiện calisthenics đã hình thành, chuyển đổi từ một ý tưởng ban đầu thành một sản phẩm hoàn chỉnh. Những bài học kinh nghiệm quý báu và các thực hành tốt nhất đã được tích lũy trong suốt quá trình xây dựng giải pháp AI tác tử với Kiro.

Thiết lập Dự án trong Môi trường Phát triển Tích hợp (IDE)

Cấu trúc dự án trong IDE đã được sắp xếp khoa học, hiển thị rõ ràng các thành phần chính như các máy chủ MCP được cấu hình, các tệp điều hướng (steering project files) cung cấp ngữ cảnh toàn diện cho Kiro, và các tệp đặc tả (specs) chi tiết hóa từng tính năng. Sự sắp xếp này giúp duy trì một môi trường làm việc rõ ràng và hiệu quả.

Kiến trúc Hệ thống Hoàn chỉnh cho Tự động hóa Tiến trình Giải đấu

Hệ thống được thiết kế với một kiến trúc phức tạp nhưng mạnh mẽ để tự động hóa tiến trình giải đấu. Nó bao gồm nhiều dịch vụ AWS tích hợp để xử lý mọi thứ từ việc đăng ký vận động viên, quản lý lịch trình, đến tính toán và công bố kết quả. Kiến trúc này được xây dựng trên nền tảng serverless, đảm bảo khả năng mở rộng linh hoạt và hiệu suất cao.

Miền Định giờ (Scheduling Domain)

Miền định giờ quản lý tất cả các khía cạnh liên quan đến lịch trình thi đấu, bao gồm việc tạo các vòng đấu, phân công vận động viên vào các phiên thi cụ thể và theo dõi tiến độ của sự kiện. Trong một số trường hợp, để tối ưu hóa sự phức tạp và tăng cường hiệu quả, việc đọc dữ liệu trực tiếp giữa các ngữ cảnh đã được lựa chọn thay vì sử dụng API REST hoặc tích hợp dịch vụ, tạo ra một sự cân bằng giữa các mẫu thiết kế miền phức tạp (như DDD – Domain-Driven Design) và yêu cầu thực tế của ứng dụng.

Tích hợp Miền Tính điểm (Scoring Domain Integration)

Miền tính điểm là trái tim của nền tảng, chịu trách nhiệm tính toán kết quả dựa trên các hệ thống tính điểm đa dạng. Miền này được tích hợp liền mạch với các phần còn lại của hệ thống, cho phép thu thập dữ liệu hiệu suất của vận động viên và tự động xử lý để đưa ra bảng xếp hạng chính xác và kịp thời.

Trang đích (Landing Page)

Trang đích của nền tảng được thiết kế thân thiện với người dùng, cung cấp một giao diện trực quan để người quản lý sự kiện và vận động viên có thể dễ dàng truy cập thông tin, đăng ký và theo dõi tiến độ của các cuộc thi.

Bài học Kinh nghiệm và Thực hành Tốt nhất

Trong quá trình xây dựng nền tảng này, nhiều bài học quan trọng đã được rút ra và các thực hành tốt nhất đã được phát triển để tối ưu hóa quy trình làm việc với Kiro và kiến trúc đám mây:

  • Minh bạch hóa dự án và quy tắc sản phẩm: Đảm bảo rằng dự án khung và thông tin về quy tắc sản phẩm của bạn rõ ràng và sạch sẽ ngay từ đầu để tránh nhầm lẫn.
  • Vận hành có giám sát: Kiro thực hiện nhiều tác vụ một cách chính xác, nhưng việc giám sát chặt chẽ là cần thiết để tránh những sai lầm tiềm ẩn hoặc việc sử dụng phương pháp tiếp cận không tối ưu cho một vấn đề kỹ thuật.
  • Giới hạn tích hợp công cụ MCP: Tránh tích hợp quá 50 công cụ MCP; việc này tiêu tốn ngữ cảnh và có thể làm chậm quá trình xử lý.
  • Sử dụng Kiro CLI cho các tác vụ chuyên biệt: Kiro CLI rất hữu ích cho việc khắc phục sự cố cụ thể và các tác vụ song song không làm thay đổi các tác vụ hoặc tệp hiện tại trong khi các đặc tả đang chạy.
  • Tạo tác tử Kiro CLI chuyên biệt: Sau khi hoàn thành nguyên mẫu hoặc MVP, hãy tạo các tác tử Kiro CLI chuyên biệt cho từng miền SDLC và miền sản phẩm để tối ưu hóa hiệu quả.
  • Giữ linh hoạt và đánh đổi: Luôn giữ sự linh hoạt và sẵn sàng đánh đổi theo trường hợp sử dụng của bạn. Đôi khi, việc áp dụng các thực hành sâu sắc như DDD (Domain-Driven Design) có thể làm tăng thêm độ phức tạp, trong khi việc tuân thủ các quy tắc và hướng dẫn nghiêm ngặt lại cần thiết cho bảo mật và sự xuất sắc trong vận hành.
  • Duy trì kho lưu trữ sạch sẽ: Khi nhắc lệnh và tinh chỉnh, nhiều tệp `.md` có thể được tạo ra (ví dụ: tóm tắt nâng cấp hoặc phân tích gỡ lỗi). Nếu các tệp này được thêm làm ngữ cảnh cho tác tử, chúng có thể gây nhầm lẫn và dẫn đến xử lý lại. Hãy đảm bảo kho lưu trữ của bạn luôn sạch sẽ.

Cảm ơn bạn đã dành thời gian và sự ủng hộ. Hãy nhớ theo dõi chúng tôi để cập nhật thêm thông tin.


✨ **Alejandro Velez, Trưởng nhóm Kỹ thuật Nền tảng Latam @ GFT | AWS Ambassador**

Chỉ mục