Hướng dẫn tạo Website Tĩnh trên AWS S3 với Terraform

21 tháng 05, 2025 - 11 lượt xem

Giới thiệu

Trong bài viết này, tôi sẽ hướng dẫn bạn cách tạo một website tĩnh trên AWS S3 sử dụng Terraform. Đây là một giải pháp tuyệt vời cho các website đơn giản, blog cá nhân, hoặc landing page với chi phí thấp và hiệu suất cao.

Tại sao chọn AWS S3 cho Website Tĩnh?

  1. Chi phí thấp: Chỉ trả tiền cho dung lượng lưu trữ và băng thông sử dụng
  2. Hiệu suất cao: Tích hợp với CloudFront CDN của AWS
  3. Độ tin cậy: 99.999999999% độ bền của dữ liệu
  4. Khả năng mở rộng: Tự động xử lý lưu lượng truy cập cao
  5. Bảo mật: Tích hợp với các dịch vụ bảo mật của AWS

Chuẩn bị

Trước khi bắt đầu, bạn cần:

  1. Tài khoản AWS: Đăng ký tại aws.amazon.com
  2. Terraform: Cài đặt từ terraform.io
  3. AWS CLI: Cài đặt từ aws.amazon.com/cli
  4. Editor code: VS Code hoặc bất kỳ editor nào bạn quen thuộc

Bước 1: Cấu hình AWS Credentials

Đầu tiên, bạn cần cấu hình AWS credentials để Terraform có thể tương tác với AWS:

aws configure

Nhập các thông tin:

  • AWS Access Key ID
  • AWS Secret Access Key
  • Default region (ví dụ: ap-southeast-1)
  • Default output format (json)

Bước 2: Tạo Cấu trúc Project

Tạo một thư mục mới cho project và tạo các file sau:

  1. main.tf: File cấu hình chính
  2. variables.tf: Định nghĩa các biến
  3. outputs.tf: Định nghĩa các output
  4. index.html: Trang chủ
  5. error.html: Trang lỗi 404

Bước 3: Cấu hình Terraform

1. Cấu hình Provider (main.tf)

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = var.aws_region
}

2. Định nghĩa Biến (variables.tf)

variable "aws_region" {
  description = "Khu vực AWS"
  type        = string
  default     = "ap-southeast-1"
}

variable "bucket_name" {
  description = "Tên bucket S3"
  type        = string
  default     = "my-static-website-bucket-2024"
}

3. Tạo S3 Bucket

resource "aws_s3_bucket" "static_website" {
  bucket = var.bucket_name

  tags = {
    Name        = "Static Website Bucket"
    Environment = "Production"
  }
}

4. Cấu hình Website Hosting

resource "aws_s3_bucket_website_configuration" "static_website" {
  bucket = aws_s3_bucket.static_website.id

  index_document {
    suffix = "index.html"
  }

  error_document {
    key = "error.html"
  }
}

5. Cấu hình Public Access

resource "aws_s3_bucket_policy" "static_website" {
  bucket = aws_s3_bucket.static_website.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Sid       = "PublicReadGetObject"
        Effect    = "Allow"
        Principal = "*"
        Action    = "s3:GetObject"
        Resource  = "${aws_s3_bucket.static_website.arn}/*"
      }
    ]
  })
}

Bước 4: Triển khai

  1. Khởi tạo Terraform:
terraform init
  1. Xem trước các thay đổi:
terraform plan
  1. Áp dụng cấu hình:
terraform apply

Bước 5: Upload Website

Sau khi bucket được tạo, upload các file website:

aws s3 cp index.html s3://<tên-bucket-của-bạn>/
aws s3 cp error.html s3://<tên-bucket-của-bạn>/

Bước 6: Truy cập Website

Website của bạn sẽ có thể truy cập qua URL:

http://<tên-bucket>.s3-website-<khu-vực>.amazonaws.com

Mẹo và Lưu ý

  1. Bảo mật:

    • Chỉ cho phép các phương thức GET và HEAD
    • Cấu hình CORS phù hợp với nhu cầu
    • Xem xét sử dụng CloudFront để tăng bảo mật
  2. Hiệu suất:

    • Nén các file tĩnh trước khi upload
    • Sử dụng CDN để cải thiện tốc độ tải
    • Tối ưu hóa hình ảnh
  3. Chi phí:

    • Theo dõi băng thông sử dụng
    • Xem xét sử dụng CloudFront để giảm chi phí băng thông
    • Tối ưu hóa kích thước file

Kết luận

Tạo website tĩnh trên AWS S3 với Terraform là một giải pháp đơn giản, hiệu quả và tiết kiệm chi phí. Với hướng dẫn này, bạn có thể dễ dàng triển khai và quản lý website tĩnh của mình.

Tài liệu tham khảo

Bình luận

avatar
Trịnh Minh Cường 2025-05-21 10:22:20.371564 +0000 UTC

Cần có thêm ảnh minh họa. Chứ bài viết toàn text xem đau đầu quá

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0