Triển Khai Laravel Lên AWS (Phần 0): Chuẩn Bị — Tài Khoản AWS, IAM & Cài Đặt CLI

· 8 min read

Series này giả định bạn đã có ứng dụng Laravel chạy được và biết sử dụng terminal cơ bản. Không cần kinh nghiệm AWS. Phần 0 này bao gồm mọi thứ bạn cần trước khi bắt đầu Phần 1.

Nếu đã có tài khoản AWS với CLI cấu hình xong, bỏ qua và đến Phần 1.

1. Tạo Tài Khoản AWS

Truy cập aws.amazon.comCreate an AWS Account.

Bạn cần:

  • Địa chỉ email (nên dùng email riêng, không phải email cá nhân)
  • Thẻ tín dụng (sẽ không bị trừ tiền nếu ở trong Free Tier)
  • Số điện thoại để xác minh

Free Tier — Bạn Được Dùng Miễn Phí 12 Tháng

Dịch vụ Giới hạn Free Tier
EC2 750 giờ/tháng t2.micro hoặc t3.micro
RDS 750 giờ/tháng db.t3.micro
S3 5 GB lưu trữ
CloudFront 1 TB data transfer
ElastiCache 750 giờ cache.t3.micro

Cảnh báo: Bất cứ thứ gì ngoài Free Tier sẽ bị tính phí. Chúng ta sẽ thiết lập cảnh báo billing ở bên dưới.

2. Bảo Mật Tài Khoản Root

Tài khoản root có quyền truy cập không giới hạn vào mọi thứ. Không bao giờ dùng nó cho công việc hàng ngày.

Bật MFA Cho Root

  1. Đăng nhập bằng root → IAMDashboard
  2. Click "Add MFA" trong phần Security recommendations
  3. Chọn Authenticator app (Google Authenticator, Authy, v.v.)
  4. Quét mã QR và nhập hai mã liên tiếp
  5. Xong — tài khoản root đã được bảo vệ

Nguyên tắc: Từ giờ trở đi, bạn chỉ đăng nhập root để quản lý billing hoặc tạo IAM user. Không bao giờ dùng root cho CLI hay deployment.

3. Tạo IAM User

IAM (Identity and Access Management) cho phép bạn tạo user với quyền hạn cụ thể.

3a. Tạo User

IAM → Users → Create user:

  • User name: laravel-deployer
  • Access type: Tick "Provide user access to the AWS Management Console" (tùy chọn, để truy cập Console)
  • Click Next

3b. Gán Quyền

Chọn "Attach policies directly" và thêm các managed policies sau:

AmazonEC2FullAccess
AmazonRDSFullAccess
AmazonS3FullAccess
AmazonVPCFullAccess
ElasticLoadBalancingFullAccess
CloudFrontFullAccess
AmazonRoute53FullAccess
AmazonElastiCacheFullAccess
AWSCertificateManagerFullAccess

Mẹo production: Trong môi trường thực tế, nên tạo custom policy với quyền tối thiểu cần thiết. Các policy FullAccess tiện cho học tập nhưng quá rộng.

3c. Tạo Access Key

Sau khi user được tạo:

  1. IAM → Users → laravel-deployer → Security credentials
  2. Create access key
  3. Use case: "Command Line Interface (CLI)"
  4. Xác nhận và click Create
  5. Lưu cả hai giá trị ngay lập tức — Secret Access Key chỉ hiện một lần:
Access Key ID:     AKIAIOSFODNN7EXAMPLE
Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Không bao giờ commit vào git. Không đặt trong file .env của Laravel mà bị commit. Không chia sẻ qua Slack/Discord.

4. Cài Đặt AWS CLI

macOS

brew install awscli

Linux (Ubuntu/Debian)

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
rm -rf awscliv2.zip aws/

Windows

Tải MSI installer từ trang cài đặt AWS CLI.

Kiểm Tra Cài Đặt

aws --version
# aws-cli/2.x.x Python/3.x.x ...

5. Cấu Hình AWS CLI

aws configure

Sẽ hỏi 4 giá trị:

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

Region: Chọn region gần người dùng nhất. Series này dùng ap-northeast-1 (Tokyo). Các lựa chọn phổ biến:

  • ap-northeast-1 — Tokyo
  • ap-southeast-1 — Singapore
  • us-east-1 — N. Virginia (rẻ nhất, nhiều dịch vụ nhất)
  • eu-west-1 — Ireland

Kiểm Tra Hoạt Động

aws sts get-caller-identity

Kết quả mong đợi:

{
    "UserId": "AIDAIOSFODNN7EXAMPLE",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/laravel-deployer"
}

Nếu thấy thông tin tài khoản, bạn đã sẵn sàng.

6. Thiết Lập Cảnh Báo Billing

Đừng để bất ngờ bởi hóa đơn.

Qua Console (Dễ nhất)

  1. Vào Billing → Budgets → Create budget
  2. Chọn "Zero spend budget" (cảnh báo khi có bất kỳ chi phí nào)
  3. Nhập email
  4. Tạo

Qua CLI

# Tạo SNS topic cho thông báo
aws sns create-topic --name billing-alerts --region us-east-1

# Đăng ký email nhận thông báo
aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:YOUR_ACCOUNT_ID:billing-alerts \
  --protocol email \
  --notification-endpoint your-email@example.com \
  --region us-east-1

# Xác nhận email đăng ký trong hộp thư đến

Lưu ý: Cảnh báo billing phải tạo ở us-east-1 bất kể region mặc định của bạn là gì.

7. Các Khái Niệm AWS Cốt Lõi

Trước khi vào Phần 1, hãy hiểu các thành phần cơ bản:

Region & Availability Zone (AZ)

AWS Cloud
├── ap-northeast-1 (Tokyo Region)
│   ├── ap-northeast-1a (AZ-a)  ← Một data center vật lý
│   ├── ap-northeast-1c (AZ-c)  ← Data center khác
│   └── ap-northeast-1d (AZ-d)
├── us-east-1 (Virginia Region)
│   ├── us-east-1a
│   └── ...
└── ...
  • Region: Khu vực địa lý (Tokyo, Singapore, v.v.). Dịch vụ và dữ liệu nằm trong region bạn chọn.
  • AZ: Các data center cách ly trong cùng một region. Dùng nhiều AZ = tính sẵn sàng cao.

VPC (Virtual Private Cloud)

Mạng riêng của bạn bên trong AWS. Hãy tưởng tượng nó như tòa nhà văn phòng — bạn kiểm soát ai được vào, phòng nào kết nối với nhau, và phòng nào tiếp xúc internet.

Subnet

Một "phòng" bên trong VPC:

  • Public subnet: Có truy cập internet (load balancers, bastion hosts)
  • Private subnet: Không truy cập internet trực tiếp (databases, cache — bảo mật hơn)

Security Group

Tường lửa cho mỗi resource. Quy tắc định nghĩa traffic nào được phép vào và ra:

Security Group cho EC2:
  Inbound:  Port 80 chỉ từ ALB
  Inbound:  Port 22 chỉ từ IP của bạn
  Outbound: Tất cả traffic

Security Group cho RDS:
  Inbound:  Port 3306 chỉ từ EC2
  Outbound: Không cần

IAM Role (vs IAM User)

  • IAM User: Dành cho con người (bạn). Access key tồn tại lâu dài.
  • IAM Role: Dành cho dịch vụ AWS (EC2, Lambda). Credentials tạm thời, tự động xoay vòng. Bảo mật hơn.

Trong series này, EC2 sẽ dùng IAM Role để truy cập S3, nên không cần lưu access key trên server.

8. Công Cụ Cần Có Trên Máy Local

Công cụ Mục đích Cài đặt
AWS CLI Quản lý tài nguyên AWS Xem ở trên
SSH client Kết nối vào EC2 Có sẵn trên macOS/Linux
Text editor Chỉnh sửa config VS Code, Vim, v.v.
Git Quản lý phiên bản brew install git / apt install git

Checklist Trước Phần 1

  • Tài khoản AWS đã tạo
  • MFA đã bật cho tài khoản root
  • IAM user laravel-deployer đã tạo với access key
  • AWS CLI đã cài và aws configure xong
  • aws sts get-caller-identity trả về thông tin tài khoản
  • Cảnh báo billing đã thiết lập
  • Đã hiểu: Region, AZ, VPC, Subnet, Security Group

Sẵn sàng? Hãy bắt đầu xây dựng hạ tầng.


Điều hướng Series:

Bình luận