Trước khi chúng ta đi vào nội dung chính của bài workshop này, chúng ta cần phải reset ứng dụng web.
Tải xuống mã nguồn dưới đây.
Giải nén mã nguồn, mở template.yaml.
Thay đổi giá trị tranvix.click thành tên miền của bạn.
route53HostedZoneName:
Type: String
Default: tranvix.click

Chạy các lệnh dưới đây.
Đảm bảo bạn đã cài đặt AWS CLI và SAM CLI trên máy của bạn, cấu hình thông tin xác thực AWS trước khi chạy các lệnh.
sam validate
sam build

Chạy lệnh dưới đây để triển khai ứng dụng SAM.
sam deploy --guided
Nhập nội dung sau. Để mặc định.
Stack Name []: fcaj-book-shop
AWS Region []: us-east-1
Confirm changes before deploy [Y/n]: Y
Allow SAM CLI IAM role creation [Y/n]: Y
Disable rollback [y/N]: N
Save arguments to configuration file [Y/n]: Y

Chờ quá trình tải lên và khởi tạo triển khai.

Xem lại bộ thay đổi CloudFormation và xác nhận triển khai bằng cách nhập y.

Chờ CloudFormation stack hoàn thành việc tạo tất cả các tài nguyên.



Lấy ID của cache policy Managed-CachingOptimized bằng cách chạy lệnh sau.
aws cloudfront list-cache-policies --type managed --query "CachePolicyList.Items[].CachePolicy.{Name:CachePolicyConfig.Name, Id:Id}" --output table

Truy cập bảng điều khiển Route 53 để lấy Hosted zone ID của bạn.

Mở template.yaml và thêm các tham số sau.
cachePolicyId: ID của cache policy Managed-CachingOptimized từ bước trước.
cloudFrontHostedZoneId: ID vùng lưu trữ cho các phân phối CloudFront (Z2FDTNDATAQYW2 — đây là giá trị cố định cho tất cả các phân phối CloudFront). Xem AliasTarget HostedZoneId để biết thêm chi tiết.
route53HostedZoneId: ID vùng lưu trữ Route 53 của bạn.
cachePolicyId:
Type: String
Default: 658327ea-f89d-4fab-a63d-7e88639e58f6
cloudFrontHostedZoneId:
Type: String
Default: Z2FDTNDATAQYW2
route53HostedZoneId:
Type: String
Default: Z09366853E38V7H0WU0E6

Trong cùng tệp template.yaml, bỏ chú thích các khối tài nguyên sau:
FCAJCertificate — tạo chứng chỉ ACM với xác thực DNS.

FCAJCloudFrontDistribution — tạo phân phối CloudFront.

FCAJRoute53RecordSet và FCAJRootRoute53RecordSet — tạo bản ghi A trên Route 53 trỏ đến phân phối CloudFront.

Chạy lại các lệnh dưới đây để build và triển khai các tài nguyên mới.
sam validate
sam build

Triển khai stack đã cập nhật.
Việc triển khai CloudFront Distribution có thể mất một lúc để hoàn thành, vì vậy hãy kiên nhẫn chờ đợi.
sam deploy

Chờ CloudFormation stack hoàn thành việc tạo Certificate, CloudFront Distribution và Route 53 Record Set.

Kiểm tra vùng lưu trữ Route 53 đã có thêm các bản ghi (A, AAAA, CNAME).

Clone kho mã nguồn frontend FCAJ Workshop Serverless.
git clone https://github.com/tranvix0910/FCAJ_Workshop-Serverless.git
cd FCAJ_Workshop-Serverless
Mở FCAJ_Workshop-Serverless với VSCode và chỉnh sửa.
Mở src/App.js và thay đổi isAdmin: true như hình dưới đây.

Truy cập bảng điều khiển API Gateway, chọn API fcaj-serverless-api, điều hướng đến Stages → staging và sao chép Invoke URL.

Mở src/config.js và cập nhật:
APP_API_URL: Dán Invoke URL từ bước trước.
DEFAULT_REGION: Đặt giá trị là us-east-1.

Cài đặt các gói phụ thuộc và xây dựng ứng dụng front-end.
npm install --force
npm run build
Nếu npm install (không có --force) gặp lỗi do xung đột phụ thuộc như ERESOLVE overriding peer dependency, hãy sử dụng npm install --force để buộc cài đặt ngay cả khi một số gói đã lỗi thời.
Tải thư mục build lên S3 bucket của bạn.
aws s3 cp build s3://fcaj-book-shop-by-tranvix0910 --recursive
Thay thế fcaj-book-shop-by-tranvix0910 bằng tên S3 bucket bạn đã tạo trong bước sam deploy.

Kiểm tra tất cả các tệp đã được tải lên thành công bằng cách kiểm tra tab Objects của S3 bucket.

Mở URL tên miền của bạn (ví dụ: https://tranvix.click) trong trình duyệt để xác nhận ứng dụng đang chạy chính xác.

Vậy là chúng ta đã xây dựng lại và triển khai thành công ứng dụng web. Bây giờ chúng ta đã sẵn sàng để tiếp tục với nội dung chính của bài workshop.