Trong bước này, chúng ta sẽ tạo một S3 bucket với tính năng Static website hosting được bật và có thể truy cập công khai, sử dụng AWS SAM.
Mở tệp template.yaml trong thư mục fcj-book-shop mà chúng ta đã tạo ở phần 1.

Xóa các phần không cần thiết (phần được highlight trong hình trên), bao gồm:
HelloWorldFunction và các Events liên quan.Thêm phần Parameters vào sau phần Globals để định nghĩa tên bucket:
Parameters:
FCAJBookShopBucketName:
Type: String
Default: fcj-book-shop-by-myself

Thêm phần Resources để tạo S3 Bucket và Bucket Policy:
Resources:
FCAJBookShop:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref FCAJBookShopBucketName
WebsiteConfiguration:
IndexDocument: index.html
PublicAccessBlockConfiguration:
BlockPublicAcls: false
BlockPublicPolicy: false
IgnorePublicAcls: false
RestrictPublicBuckets: false
FCAJBookShopPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref FCAJBookShop
PolicyDocument:
Version: 2012-10-17
Statement:
- Action:
- "s3:GetObject"
Effect: Allow
Principal: "*"
Resource: !Join
- ""
- - "arn:aws:s3:::"
- !Ref FCAJBookShop
- /*
Đoạn mã trên định nghĩa:
Principal: "*") có quyền đọc (s3:GetObject) tất cả các object trong bucket.
Chạy lệnh sam build tại thư mục của dự án SAM (fcj-book-shop) để build ứng dụng:
sam build

Kiểm tra tính hợp lệ của template SAM:
sam validate

Triển khai SAM với chế độ guided (hướng dẫn từng bước):
sam deploy --guided
Nhập các thông tin sau khi được yêu cầu:
fcj-book-shopap-southeast-1 (hoặc region bạn muốn triển khai).YYNY
Tên S3 bucket phải là duy nhất trên toàn cầu. Nếu tên fcj-book-shop-by-myself đã được sử dụng, hãy thay đổi bằng một tên khác (ví dụ: fcj-book-shop-by-yourname).
Trong khi chờ triển khai, bạn có thể mở CloudFormation console để theo dõi tiến trình tạo stack.

Chờ quá trình tạo changeset hoàn tất. Khi được hỏi Deploy this changeset?, nhập y để xác nhận triển khai.


Tại trang chi tiết bucket:

Cuộn xuống phần Static website hosting:

Hãy lưu lại Bucket website endpoint vì bạn sẽ cần sử dụng URL này để truy cập ứng dụng front-end sau khi upload.
Nhấp vào tab Permissions:
s3:GetObject với Principal: "*", nghĩa là mọi người đều có thể đọc các file trong bucket.
Mở CloudFormation console để kiểm tra stack:

Nhấp vào stack fcj-book-shop, chuyển sang tab Resources:

Nhấp vào stack aws-sam-cli-managed-default để xem các tài nguyên được SAM CLI tự động tạo:

Tải mã nguồn fcj-serverless-frontend về thiết bị của bạn:
git clone https://github.com/tranvix0910/FCAJ_Workshop-Serverless.git
cd FCAJ_Workshop-Serverless
Đảm bảo bạn đã cài đặt Node.js và npm trên máy tính trước khi chạy các lệnh trên. Nếu chưa cài, hãy tham khảo: https://nodejs.org/
Cài đặt các dependency. Do một số package trong dự án có thể đã bị outdate, hãy sử dụng flag --force:
npm install --force


Nếu npm install (không có --force) bị lỗi do xung đột dependency như ERESOLVE overriding peer dependency, hãy sử dụng npm install --force để bắt buộc cài đặt mặc dù các package đã bị outdate.
Build ứng dụng front-end:
npm run build
Quá trình build có thể hiển thị một số warning — bạn có thể bỏ qua chúng.

Sau khi build hoàn tất, thư mục build sẽ được tạo. Upload thư mục này lên S3 bucket:
aws s3 cp build s3://fcj-book-shop-by-myself --recursive

Hãy thay fcj-book-shop-by-myself bằng tên bucket thực tế mà bạn đã tạo ở bước trước.
Mở Amazon S3 console, điều hướng đến bucket của bạn và kiểm tra tab Objects để xác nhận tất cả các file đã được upload thành công.

Chuyển sang tab Properties, cuộn xuống phần Static website hosting và sao chép Bucket website endpoint.

Mở URL endpoint trong trình duyệt. Bạn sẽ thấy website FCJ Book Store đã được tải thành công.

Website hiện tại hiển thị trang trống vì chúng ta chưa thiết lập backend (API Gateway + Lambda + DynamoDB). Chúng ta sẽ hoàn thành phần này trong các bước tiếp theo.