Kiến thức cơ bản về AWS S3

Posted by Giap Nguyen on 2020-03-30

Một vài khái niệm

AWS S3 (Amazon Simple Storage Service) là một dịch vụ lưu trữ đám mây do Amazon cung cấp. Nó cung cấp khả năng lưu trữ và truy xuất các tệp dữ liệu khác nhau như ảnh, video, văn bản và các đối tượng khác thông qua giao diện web hoặc các ứng dụng khác như Amazon S3 API.

Một số khái niệm quan trọng khi sử dụng AWS S3:

  • Bucket: là nơi để lưu trữ các đối tượng S3. Tất cả các đối tượng S3 đều phải được lưu trữ trong một bucket. Bucket phải có một tên duy nhất trong toàn bộ AWS.

  • Object: là các đối tượng dữ liệu được lưu trữ trong bucket, bao gồm các file, ảnh, video, văn bản và nhiều loại đối tượng khác.

  • Region: là vị trí đặt bucket. Khi bạn tạo một bucket, bạn sẽ phải chọn một vùng. Việc chọn vùng này sẽ quyết định vị trí lưu trữ của các đối tượng trong bucket.

  • Access control: AWS S3 cung cấp các tính năng để quản lý quyền truy cập vào các đối tượng trong bucket. Bạn có thể thiết lập chính sách truy cập để kiểm soát quyền truy cập đối với các đối tượng.

  • Lifecycle: AWS S3 cung cấp các quy tắc cho phép bạn tự động di chuyển các đối tượng vào các lớp lưu trữ khác nhau hoặc xóa các đối tượng sau một khoảng thời gian nhất định.

  • Versioning: AWS S3 cho phép bạn bật tính năng versioning để lưu trữ nhiều phiên bản của một đối tượng và phục hồi các phiên bản trước đó khi cần thiết.

  • Encryption: AWS S3 cung cấp các tùy chọn mã hóa để bảo vệ các đối tượng khi chúng được lưu trữ hoặc di chuyển.

Để sử dụng AWS S3, bạn cần đăng ký một tài khoản AWS và tạo một bucket. Sau đó, bạn có thể tải lên các đối tượng vào bucket của mình, xóa các đối tượng, cấu hình các tùy chọn quản lý lưu trữ và phục vụ các đối tượng đó thông qua một đường dẫn URL.

Sử dụng aws S3 trong dự án Laravel và Ruby On Rails

Laravel

Bước 1: Cài đặt AWS SDK

Chạy lệnh sau để cài đặt AWS SDK:

1
composer require aws/aws-sdk-php

Bước 2: Cấu hình AWS S3

Mở file .env và cập nhật các thông tin cấu hình sau:

1
2
3
4
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_DEFAULT_REGION=your_default_region
AWS_BUCKET=your_bucket_name

Bước 3: Upload file lên S3

1
2
3
use Illuminate\Support\Facades\Storage;

Storage::disk('s3')->put('file.jpg', $contents);

Bước 4: Lấy URL của file trên S3

1
$url = Storage::disk('s3')->url('file.jpg');

Ruby on Rails

Bước 1: Cài đặt AWS SDK

Thêm aws-sdk-s3 vào file Gemfile:

1
gem 'aws-sdk-s3', require: false

Sau đó chạy lệnh:

1
bundle install

Bước 2: Cấu hình AWS S3

Thêm các thông tin cấu hình sau vào file config/environments/production.rb:

1
2
3
4
5
6
7
config.active_storage.service = :amazon
config.aws_credentials = Aws::Credentials.new(
'your_access_key',
'your_secret_access_key'
)
config.aws_region = 'your_default_region'
config.aws_bucket = 'your_bucket_name'

Bước 3: Upload file lên S3

1
2
3
4
5
6
require 'aws-sdk-s3'

s3 = Aws::S3::Resource.new
bucket = s3.bucket('your_bucket_name')
object = bucket.object('file.jpg')
object.upload_file('/path/to/local/file.jpg')

Bước 4: Lấy URL của file trên S3

1
2
3
4
5
6
require 'aws-sdk-s3'

s3 = Aws::S3::Resource.new
bucket = s3.bucket('your_bucket_name')
object = bucket.object('file.jpg')
url = object.public_url

Chi phí sử dụng AWS S3

AWS S3 cung cấp nhiều tùy chọn giá cả khác nhau tùy thuộc vào nhu cầu và tài nguyên sử dụng. Các yếu tố có thể ảnh hưởng đến chi phí sử dụng AWS S3 bao gồm:

  • Lưu trữ dữ liệu: Chi phí được tính dựa trên số lượng dữ liệu bạn lưu trữ trên S3 và thời gian lưu trữ.
  • Lưu lượng truy cập dữ liệu: Chi phí được tính dựa trên lượng dữ liệu được truy cập từ S3 trong một tháng.
  • Các yêu cầu API: Chi phí được tính dựa trên số lần gọi các API trên S3 trong một tháng.
  • Truyền tải dữ liệu giữa các khu vực: Chi phí được tính dựa trên lượng dữ liệu được truyền tải giữa các khu vực của AWS.

Ngoài ra, AWS cũng cung cấp các tính năng khác như mã hóa dữ liệu, sao lưu định kỳ và lưu trữ cấp độ quyền truy cập được tính phí riêng.

Chi phí sử dụng AWS S3 có thể tăng lên đáng kể nếu không được quản lý chặt chẽ. Việc theo dõi và tối ưu hóa việc sử dụng tài nguyên trên AWS S3 có thể giúp giảm chi phí sử dụng.

Loại Giá (USD/tháng)
Lưu trữ đối tượng (S3 Standard) $0.023 – $0.025/GiB
Lưu trữ đối tượng hiệu suất cao (S3 Intelligent-Tiering) $0.023 – $0.025/GiB
Lưu trữ đối tượng chi phí thấp (S3 Standard - Infrequent Access) $0.0125/GiB
Lưu trữ đối tượng cực kỳ chi phí thấp (S3 One Zone-Infrequent Access) $0.01/GiB
Lưu trữ đối tượng dài hạn (S3 Glacier) $0.004/GiB
Lưu trữ đối tượng cực dài hạn (S3 Glacier Deep Archive) $0.00099/GiB
Lưu trữ tệp cục bộ (S3 Glacier Deep Archive) $0.01/GiB
Lưu trữ tệp cục bộ (S3 Local Zone) $0.01/GiB
Truyền tải dữ liệu vào S3 Miễn phí
Truyền tải dữ liệu từ S3 đến Internet $0.09/GiB
Truyền tải dữ liệu trong khu vực (S3 to CloudFront) $0.02/GiB
Xóa đối tượng trong S3 Miễn phí
Thao tác PUT, COPY, POST hoặc LIST trong S3 $0.005/1.000 yêu cầu
Thao tác GET, SELECT và các yêu cầu khác trong S3 $0.0004/1.000 yêu cầu

Một số dịch vụ tương tự

Dưới đây là một số so sánh giữa S3 và một số dịch vụ lưu trữ đám mây khác:

  • Google Cloud Storage: Tương tự như S3, Google Cloud Storage cung cấp lưu trữ đám mây với độ tin cậy và khả năng mở rộng cao. Tuy nhiên, nó cũng có một số tính năng khác nhau và giá cả có thể khác nhau tùy thuộc vào ứng dụng cụ thể.

  • Microsoft Azure Blob Storage: Đây là dịch vụ lưu trữ đám mây của Microsoft, cung cấp khả năng lưu trữ với khả năng mở rộng và độ tin cậy cao. Giống như S3, Azure Blob Storage cũng có tính năng lưu trữ đối tượng, đảm bảo an ninh và chia sẻ dữ liệu.

  • Dropbox: Dropbox là một dịch vụ lưu trữ đám mây phổ biến cho phép người dùng lưu trữ và chia sẻ tệp với nhau. Tuy nhiên, nó không cung cấp những tính năng cao cấp và khả năng mở rộng của S3.

  • Backblaze: Backblaze là một dịch vụ lưu trữ đám mây giá rẻ và đơn giản, được thiết kế để dễ dàng sử dụng cho người dùng cá nhân và doanh nghiệp. Tuy nhiên, nó không cung cấp các tính năng cao cấp như khả năng mở rộng và tính năng lưu trữ đối tượng của S3.

Tóm lại, S3 là một dịch vụ lưu trữ đám mây rất phổ biến và có nhiều tính năng và khả năng mở rộng. Tuy nhiên, các dịch vụ lưu trữ đám mây khác cũng có thể được sử dụng tùy thuộc vào ứng dụng cụ thể và yêu cầu của bạn.