Back to articles
Technology Insight

SST v3 (Ion) x Pulumi: Hướng Dẫn Triển Khai Ứng Dụng Fullstack Serverless Lên AWS Bằng Tài Khoản Cá Nhân

June 6, 2026

Giới Thiệu Về Sự Tiến Hóa Của Serverless: Từ SST v2 Đến SST v3 (Ion)

Trong nhiều năm qua, SST (Serverless Stack) đã khẳng định vị thế là một trong những framework tốt nhất để phát triển và triển khai ứng dụng fullstack serverless trên nền tảng AWS. Tuy nhiên, ở phiên bản v2 trở về trước, cấu trúc hạ tầng của SST phụ thuộc hoàn toàn vào AWS CDK và AWS CloudFormation. Điều này vô hình trung làm lộ ra những điểm nghẽn cố hữu của CloudFormation: tốc độ tạo và cập nhật tài nguyên (stack) khá chậm, cơ chế rollback khi gặp lỗi mất nhiều thời gian, và đặc biệt là giới hạn nghiêm ngặt 500 tài nguyên (Resource Limit) đối với các dự án monorepo lớn.

Để giải quyết triệt để bài toán này, đội ngũ phát triển đã tái cấu trúc toàn bộ core engine và cho ra mắt SST v3 (mã nguồn Ion). Bước đi đột phá nhất của SST v3 chính là việc thay thế toàn bộ AWS CDK bằng Pulumi Automation API và các Terraform Providers. Sự kết hợp này mang lại những nâng cấp vượt trội về mặt hiệu năng:

  • Tốc độ triển khai (Deploy Speed) siêu tốc: Nhờ cơ chế thực thi song song của Pulumi và việc bỏ qua các tài nguyên không có thay đổi (no-op), thời gian deploy giảm xuống chỉ còn tính bằng giây thay vì hàng chục phút như CloudFormation.
  • Không còn giới hạn tài nguyên: Phá bỏ hoàn toàn giới hạn 500 resources, giúp các hệ thống lớn thoải mái mở rộng cấu trúc.
  • Quản lý State linh hoạt: Trạng thái hạ tầng (Infrastructure State) không còn bị khóa chặt vào CloudFormation Stacks mà được lưu trữ an toàn trong một Amazon S3 bucket thuộc chính tài khoản cá nhân của bạn, giúp việc bảo trì và import tài nguyên có sẵn trở nên dễ dàng hơn bao giờ hết.

Kiến Trúc Tổng Quan Khi Kết Hợp SST v3 Với Pulumi Trên AWS

Khi sử dụng SST v3, bạn không cần phải học cú pháp phức tạp của Terraform (HCL) hay cấu trúc rườm rà của Pulumi. SST v3 cung cấp một lớp trừu tượng hóa cao cấp (High-level Components) hoàn toàn bằng TypeScript mang tính khai báo (declarative) cao nhưng vẫn giữ được sự linh hoạt.

Cơ chế hoạt động: File cấu hình sst.config.ts của bạn định nghĩa các thành phần như Frontend (Next.js, Remix, Astro), Database (DynamoDB, RDS), hay Backend Functions (Lambda). Khi thực thi lệnh, SST sử dụng engine Ion (bản chất là Pulumi) để tính toán sự thay đổi (Diff) và gọi trực tiếp đến API của AWS để thiết lập hạ tầng.


Chuẩn Bị Tài Khoản AWS Cá Nhân Và Phân Quyền Cần Thiết

Để bắt đầu triển khai, bạn cần sở hữu một tài khoản AWS cá nhân. Do chúng ta thực hiện deploy trực tiếp từ môi trường local hoặc CI/CD, việc cấu hình bảo mật thông qua IAM (Identity and Access Management) là bước bắt buộc.

Bước 1: Tạo IAM User và Cấp Quyền

  1. Truy cập vào AWS Management Console, tìm kiếm dịch vụ IAM.
  2. Chọn Users > Create user. Đặt tên user (ví dụ: sst-deployer-personal).
  3. Tại phần Phân quyền (Permissions), đối với tài khoản cá nhân học tập hoặc lab, bạn có thể gắn policy AdministratorAccess để đảm bảo quyền khởi tạo các tài nguyên như S3, Lambda, API Gateway, CloudFront. (Lưu ý: Đối với môi trường Production của doanh nghiệp, hãy áp dụng nguyên tắc đặc quyền tối thiểu - Least Privilege).
  4. Hoàn tất tạo user, truy cập vào tab Security credentials của user đó và chọn Create access key. Chọn mục đích là Command Line Interface (CLI), sau đó lưu lại hai giá trị cực kỳ quan trọng: AWS Access Key ID và AWS Secret Access Key.

Bước 2: Cấu hình AWS CLI tại máy cục bộ

Mở Terminal trên máy tính của bạn và chạy lệnh sau để thiết lập thông tin định danh:

aws configure --profile personal-serverless

Hệ thống sẽ yêu cầu bạn nhập các thông tin đã khởi tạo ở bước trước:

  • AWS Access Key ID: [Nhập Access Key của bạn]
  • AWS Secret Access Key: [Nhập Secret Key của bạn]
  • Default region name: ap-southeast-1 (Khuyến khích chọn Singapore để có độ trễ thấp tại Việt Nam)
  • Default output format: json

Khởi Tạo Dự Án Fullstack Serverless Với SST v3

Giả sử bạn đã có một ứng dụng web (ví dụ ứng dụng Next.js hoặc một thư mục trống), chúng ta sẽ tích hợp SST v3 vào project thông qua các bước chuẩn hóa sau.

Tại thư mục gốc của project, thực hiện lệnh khởi tạo:

npx sst@latest init

Hệ thống CLI thông minh của SST sẽ tự động quét mã nguồn, nhận diện framework frontend hiện tại và tạo ra file cấu hình lõi sst.config.ts. Cấu trúc cơ bản của file này trong cấu trúc SST v3 sẽ có dạng như sau:

import { defineConfig } from "./.sst/platform/config";

export default defineConfig({
  app(input) {
    return {
      name: "my-fullstack-app",
      removal: input?.stage === "production" ? "retain" : "remove",
      home: "aws",
    };
  },
  async run() {
    // Khởi tạo một bucket lưu trữ dữ liệu
    const bucket = new sst.aws.Bucket("MyStorage");

    // Khởi tạo ứng dụng Frontend Next.js và liên kết tài nguyên
    const web = new sst.aws.Nextjs("MyFrontend", {
      link: [bucket],
    });

    return {
      siteUrl: web.url,
    };
  },
});

Giải Thích Cấu Trúc Khối Lệnh Cấu Hình:

  • app(input): Định nghĩa siêu dữ liệu (metadata) cho dự án. Thuộc tính home: "aws" chỉ định rõ ràng Pulumi sẽ sử dụng AWS làm nhà cung cấp hạ tầng chính. Thuộc tính removal giúp bảo vệ dữ liệu, tránh vô tình xóa mất tài nguyên ở môi trường production.
  • run(): Nơi bạn khai báo hạ tầng bằng code. Điểm đặc biệt của SST v3 là tính năng Resource Binding thông qua mảng link. Khi bạn truyền biến bucket vào cấu hình của ứng dụng Next.js, SST sẽ tự động sinh ra các TypeScript Types an toàn (Type-safe) và cấp quyền IAM cần thiết để frontend có thể tương tác trực tiếp với S3 bucket mà không cần cấu hình bằng tay các biến môi trường phức tạp.

Trải Nghiệm Live Lambda Development (sst dev)

Một trong những tính năng tạo nên tên tuổi của SST chính là môi trường phát triển cục bộ (Local Development Experience). Với SST v3, khi bạn chạy lệnh:

export AWS_PROFILE=personal-serverless
npx sst dev

Hệ thống sẽ kích hoạt một bộ dồn kênh (multiplexer) thông minh. Tiền trình này sẽ tiến hành:

  1. Deploy các hạ tầng cứng (như S3, DynamoDB) lên tài khoản Cloud của bạn.
  2. Tạo một đường ống kết nối proxy bảo mật (tunnel) từ máy tính local của bạn lên AWS.
  3. Khi có một request gửi tới AWS Lambda trên Cloud, request đó ngay lập tức được chuyển hướng (route) về mã nguồn đang chạy trên máy local của bạn để thực thi. Điều này giúp bạn có thể đặt breakpoint, chỉnh sửa code và thấy ngay kết quả hot-reload (Live Lambda Debugging) mà không cần mất thời gian đóng gói và deploy lại function.

Triển Khai Lên Môi Trường Production (SST Deploy)

Khi ứng dụng đã hoạt động ổn định ở môi trường dev và bạn sẵn sàng phát hành cho người dùng cuối, việc đóng gói và đưa lên môi trường production được thực hiện qua một lệnh duy nhất:

npx sst deploy --stage production

Lúc này, công cụ Ion dưới sự vận hành của Pulumi sẽ biên dịch toàn bộ cấu trúc hạ tầng, tối ưu hóa asset của frontend (Next.js/Remix), đóng gói các hàm Lambda thành các file zip nhỏ gọn, và đẩy toàn bộ lên hệ sinh thái AWS thông qua CloudFront (CDN) để phân phối toàn cầu. Kết quả trả về trên Terminal sẽ là URL trực tiếp của ứng dụng của bạn.


Kết Luận

Việc chuyển dịch từ cơ chế CloudFormation nặng nề sang nền tảng Pulumi x Terraform linh hoạt đã biến SST v3 (Ion) trở thành vũ khí tối thượng cho các nhà phát triển Fullstack muốn làm chủ hạ tầng đám mây AWS. Với tài khoản cá nhân, bạn hoàn toàn có thể xây dựng các hệ thống có khả năng scale tự động từ 0 đến hàng triệu users một cách dễ dàng, tiết kiệm chi phí tối đa nhờ mô hình Pay-as-you-go của serverless, đồng thời tận hưởng một trải nghiệm lập trình (Developer Experience) mượt mà và tốc độ nhất hiện nay.