Thiết kế khả năng phục hồi cho một trang web tĩnh trên AWS Cloud

by khanhcd92
341 views

Khi bạn thiết kế một hệ thống thì bạn nên có suy nghĩ rằng không hệ thống nào có thể đảm bảo vận hành trơn chu mà không có vấn đề gì xảy ra. Hệ thống có thể sập vì rất nhiều lý do. Chúng ta luôn phải có phương án có thể khôi phục lại ngay tức thì để độ tổn thất cho khách hàng và công ty ở mức thấp nhất. Đặc biệt là các hệ thống trên Cloud.

Werner Vogels, CTO & VP, Amazon says:

Everything fails all the time.

Bài viết hôm nay mình sẽ giới thiệu về cách thiết kế 1 trang web tĩnh trên S3 mà đảm bảo khả năng hồi phục(Resiliency).

Khả năng phục hồi (Resiliency) là gì?

Khả năng phục hồi là khả năng hệ thống phục hồi sau lỗi do hệ thống quá tải, bị tấn công, các lỗi liên quan phần cứng hoặc phần mềm.

Amazon S3 rất khả dụng và có khả năng phục hồi cao đối với sự cố theo vùng nhưng liệu trang web có khả năng chống chịu với thảm họa khu vực như nguồn điện, thời tiết.,? đám mây có những cách tốt hơn để giúp cung cấp tính liên tục cho hoạt động kinh doanh và đây là một trong những cách.

Thiết kế khả năng phục hồi cho một trang web tĩnh trên AWS Cloud

s3dr

Các dịch vụ sử dụng

  • Route 53
  • CloudFront
  • S3
  • IAM

Triển khai

Do chưa có domain có sẵn nên bước triển khai này mình sẽ chỉ sử dụng các dịch vụ:

  • CloudFront
  • S3
  • IAM

Bước 1: Tạo S3 bucket name static-web-sample-s3 với region Singapore và enable tính năng Versioning. Chi tiết

Bước 2: Tạo S3 bucket name static-web-sample-dr-s3 với region Tokyo và enable tính năng Versioning Chi tiết

Ghi chú: Ở hướng dẫn này, web chính của mình triển khai lưu trên S3 với region Singapore, và web khôi phục khi xảy ra thảm hoạ sẽ được lưu trên S3 với region Tokyo.

Bước 3: Cấu hình replication giữa 2 bucket name

  • Ở bucket name static-web-sample-s3 chọn Managemet tab. Tiếp theo, ở phần Replication rules chọn Create replication rule.

    • Nhập rule name rep1

    • Phần rule scope thì chọn option thứ 2 rep2

    • Ấn Browse S3 xong chọn đến bucket name static-web-sample-dr-s3 rep3

    • Phần IAM role, chọn Create new role rep4

    • Phần Additional replication options thì không chọn gì cả rồi ấn Save rep5

    • Kết quả sau khi cấu hình xong rep6

Bước4: Tạo 1 trang page index.html đơn giản rồi upload nó lên S3 bucket name

<!DOCTYPE html>
<html lang='en'>

<head>
    <meta charset='UTF-8'>
    <title>Static HTML</title>
</head>

<body>
    <div class="container">
        <h1>Hey there</h1>
    </div>
</body>

</html>

Bước 5: Tạo CloudFront liên kết với S3 bucket name static-web-sample-s3. Chi tiết

origin

Ghi chú: Sử dụng OAI cho CloudFront access đến S3 và chọn Yes, update the bucket policy

Bước 6: Tạo thêm origin của CloudFront liên kết tới S3 bucket name static-web-sample-dr-s3 dro2

Ghi chú: Sử dụng OAI cho CloudFront access đến S3 và chọn Yes, update the bucket policy

Bước 7: Tạo Origin Group của CloudFront. Nhập thông như hình bên dưới.

  • Chọn Create origin group og1
  • Chọn các origin cần sử dụng rồi thêm vào. Chú ý origin web chính sẽ được đặt lên đầu tiên. og2

Bước 8: Cập nhật Behavior default của CloudFront Vì behavior default của CloudFront đang liên kết với origin của S3 bucket name static-web-sample-s3, nên chúng ta sẽ cần cập nhật sang sử dụng origin group.

  • Chọn Behavior Default rồi chọn Edit beha1
  • Ở màn hình Edit, cập nhật origin sang origin group (DR-Group) beha2

Bước 9: Đợi CloudFront Deploy re1

Bước 10: Sau khi CloudFront đã deploy xong, thì chúng ta vào brownser và nhập DNS link của CloudFront. web

Bước 11: Xoá bucket name static-web-sample-s3 hoặc chỉ xoá file index.html trong bucket.

Bước 12: Bạn vào lại trình duyệt reload lại trang web nhé. Bạn sẽ thấy trang web vẫn hoạt động bình thường dù đã xoá file hoặc S3 bucket chưa source chính. web

1 comment

Hieu Le March 11, 2022 - 3:37 PM

cảm ơn bạn vì bài viết. Mà mình có ý kiến là nếu viết thêm chi tiết nữa thì sẽ rất đa tạ đó ạ

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like

%d bloggers like this: