Keywords: How to create server download file use s3 AWS and CDN Cloudflare to reduce costs
Chắc hẳn nhiều bạn đã biết s3 là một hình thức lưu trử (Storage) của AWS khá là phổ biến, đặc biệt là sự tiện dụng của công nghệ Cloud mà phía AWS mang lại, nhưng nếu bạn dùng s3 để lưu trử hình ảnh cũng như file cho một trang web, thì các bạn cần chú ý một điều s3 tính phí dựa trên dung lượng lưu trữ và request đến file, nên vì thế chúng ta cần phải có sự kết hợp với CDN để làm giảm chi phí cho nó
Có rất nhiều hình thức sử dụng CDN như là Cloudfront,... Nhưng tại bài viết này thì mình sẻ sử dụng Cloudflare để giải quyết nó, đơn giản là vì nó free haha, mà anh em có ai từng hiểu CDN là gì chưa nhỉ ? để mình giải thích luôn cho anh em cùng hiểu nhé, với kiến thức hẹp và nhỏ nhắn của mình, thì mình hiểu rằng CDN hay còn biết đến với tên "Content Delivery Network" là một hệ thống có nhiều máy chủ, chứa những bản sao về nội dung ở khắp nơi trên thế giới, nghĩa là sao khi bạn truy cập đến một hệ thống có CDN nó sẻ sao lưu một bản sao tại một máy chủ gần bạn nhất, chứ không phải là máy chính của bạn, việc này tránh tình trạng "thắt cổ chai" và giúp trang web trở nên nhanh hơn, để dễ hiểu mình sẻ ví dụ như sau nhéMình có một link đường dẫn file ảnh, khi chưa sử dụng CDN lúc có rất nhiều người truy cập đường link đó nó sẻ bị overload dẫn đến lag hoặc nhiều tình trạng hơn nữa, nhưng khi mình kết hợp link ảnh đó với CDN mọi thứ lại khác, lần đầu mình truy cập ảnh, CDN sẻ tạo một bản sao để lưu tại 1 nơi nào đó gần mình nhất, sau đó người khác truy cập ảnh, nó sẻ tạo tiếp 1 bản sao khác nữa tại một server mà người dùng đó ở gần, như vậy khi các user đó truy cập đến ảnh, họ chỉ truy cập đến các server bản sao có chứa ảnh đó chứ không phải server chính, điều này giải quyết rất nhiều cho tình trạng "thắt cổ chai", ok vậy thì nó liên quan gì đến s3 và giảm chi phí? các bạn sẻ hỏi như thế đúng không nào? đơn giản, như mình đã nói ở trên s3 tính phí dựa trên việc lưu trữ và request đến, ví dụ link ảnh lúc nảy mình lưu tại s3 đi, thì chẳng phải mình giảm rất nhiều cho tình trạng request đến link s3 hay sao ? vì nó đã thông qua CDN của Cloudflare để truy cập các bản sao của hình ảnh đó trên s3 rồi
Ok bây giờ các bạn đã biết sự lợi hại của CDN rồi chứ, gì chứ vấn đề free là ưu tiên lên hàng đầu, giảm được chi phí nào thì hay cho chi phí đó, giải thích vậy được rồi, chúng ta bắt đầu thực hiện nào
Bước 1: Tạo một bucket s3 trên tài khoản AWS của mình nhé
Chú ý: với tên bucket chính là tên domain của chúng ta khi sử dụng add cho Cloudflare, giả sự mình muốn tạo domain cho s3 có tên là như sau: "data-service.pharmacity.io" thì trên phía s3 mình cũng sẻ tạo 1 bucket có name giống y vậy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::data-service.pharmacity.io/pmc-upload-media/*", "arn:aws:s3:::data-service.pharmacity.io/favicon.ico" ], "Condition": { "Bool": { "aws:SecureTransport": "true" }, "IpAddress": { "aws:SourceIp": [ "2400:cb00::/32", "2606:4700::/32", "2803:f800::/32", "2405:b500::/32", "2405:8100::/32", "2a06:98c0::/29", "2c0f:f248::/32", "173.245.48.0/20", "103.21.244.0/22", "103.22.200.0/22", "103.31.4.0/22", "141.101.64.0/18", "108.162.192.0/18", "190.93.240.0/20", "188.114.96.0/20", "197.234.240.0/22", "198.41.128.0/17", "162.158.0.0/15", "104.16.0.0/13", "104.24.0.0/14", "172.64.0.0/13", "131.0.72.0/22" ] } } } ] }Tiếp đến, sau khi đã cho Bucket có quyền Read rồi thì ta cần phải setting luôn cả CORS
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE", "HEAD" ], "AllowedOrigins": [ "https://data-service.pharmacity.io" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]Mọi thứ đã chuẩn bị ok rồi đúng không
- URL sẻ như sau: <bucket-name>.s3.<region>.amazonaws.com
0 Comments
Vài lời muốn nói:
* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.
* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.
* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.