Cách dùng AWS S3 Bucket để lưu file tĩnh và media trong Django

Nếu đang dùng app web Django, bạn cần phải xử lý hiệu quả nội dung tĩnh và tệp tin đa phương tiện do người dùng tải lên. AWS S3 Bucket sẽ giúp bạn làm điều đó trong Django dễ dàng.

Kết hợp Django và Bucket

Amazon Web Services (AWS) Simple Storage Service (S3) Bucket là một giải pháp thay thế để lưu trữ các tệp đa phương tiện và tĩnh. Bằng cách tích hợp S3 với Django, bạn có thể giảm tải gánh nặng quản lý tệp trên máy chủ , giảm tải và đảm bảo phân phối nội dung nhanh hơn, đáng tin cậy hơn.

Bước 1: Tạo tài khoản AWS

Nếu chưa có tài khoản, hãy tới trang AWS để tạo tài khoản mới.

Tài khoản AWS mới có quyền truy cập miễn phí 5GB lưu trữ chuẩn S3 mỗi tháng trong một năm.

Bước 2: Tạo S3 Bucket cho dự án

  1. Sau khi tạo tài khoản AWS, đăng nhập và tìm S3 trên thanh tìm kiếm ở phía trên cùng, rồi click lựa chọn đầu tiên.
  2. Sau đó, bạn sẽ thấy một trang mới, click nút Create bucket.
  3. Tiếp theo, đặt tên cho bucket S3 của bạn. Bạn có thể giữa nguyên cấu hình mặc định.
  4. Cuộn xuống dưới Block Public Access settings for this bucket, bỏ tích Block all public access và xác nhận cảnh báo hiện ra.
  5. Sau khi hoàn tất, click nút Create bucket. Nó sẽ đưa bạn tới trang hiện một danh sách các bucket S3 đã tạo.

Tạo bucket

Bước 3: Tạo IAM User trên AWS

AWS cung cấp một dịch vụ tên IAM (Identity and Access Management). Điều này cho phép bạn tạo một tài khoản riêng cho người hoặc ứng dụng cụ thể cần tương tác với các dịch vụ AWS.

Bạn có thể gán các cấp độ phân quyền khác nhau cho người dùng IAM, đại diện cho cá nhân hoặc ứng dụng tương tác với các dịch vụ AWS đã tạo. Với người dùng IAM, bạn có thể đảm bảo mỗi người dùng chỉ có quyền truy cập tài nguyên họ cần và không nhiều hơn.

Vì mục đích bảo mật, bạn nên tạo một người dùng IAM cho dự án Django để tương tác với bucket S3. Hãy làm theo những bước này để tạo một người dùng IAM trên AWS:

  1. Trong thanh tìm kiếm, gõ IAM và click lựa chọn đầu tiên. Một trang mới xuất hiện:
  2. Ở bên tay trái của trang IAM, chọn Users, sau đó tiếp tục click nút Add users. Nó sẽ mở ra một trang khác để điền thông tin.
  3. Bắt đầu bằng cách nhập tên cho người dùng IAM và click nút Next ở phía dưới cùng.
  4. Trên trang tiếp theo, bạn phải chọn các cấp độ quyền cho người dùng IAM. Hãy làm theo những bước sau:
    1. Đầu tiên, chọn Attach policies directly từ Permissions options.
    2. Tiếp theo, xác định chính sách phân quyền cho người dùng IAM. Hành động này sẽ quyết định việc người dùng IAM có thể làm và không. Vì bạn muốn app Django download và upload file, bạn nên cho nó toàn quyền truy cập bucket S3.
    3. Trong phần Permissions policies, bạn nên tìm & chọn S3FullAccess. Sau đó, click Next.
  5. Tiếp theo, xem lại các chính sách cho người dùng IAM và click nút Create user để tạo người dùng IAM.

Tạo người dùng

Bước 4: Tạo khóa truy cập cho người dùng IAM

Trong AWS, khóa truy cập chỉ thông tin xác thực bạn có thể dùng để xác thực và truy cập an toàn tài nguyên AWS theo chương trình. Dự án Django của bạn phải cung cấp những thông tin xác thực này để truy cập bucket S3.

Những bước sau sẽ giúp bạn tạo một khóa truy cập cho dự án:

  1. Sau khi tạo người dùng IAM, bạn sẽ nhận được thông báo nhắc xem user. Bạn có thể xem user bằng cách click User name.
  2. Tiếp theo, chọn tab Security credentials > cuộn xuống dưới tìm Access keys và chọn Create access key.
  3. Bạn cần chọn trường hợp sử dụng cho truy cập, nhờ đó, AWS có thể đề xuất lựa chọn thay thế phù hợp. Nó không ảnh hưởng tới khóa truy cập. Thoải mái click một tùy chọn như Third-party service hoặc Local code và xác nhận cảnh báo. Sau đó, click nút Next.
  4. Ở trang tiếp theo, nhập thẻ mô tả cho khóa truy cập và click nút Create access key.
  5. Sau khi tạo khóa truy cập, bạn có thể sao chép thông tin xác thực hoặc tải chúng dưới dạng file CSV. Dù bằng cách nào, hãy đảm bảo dữ liệu này an toàn và bảo mật.

Khóa truy cập

Bước 5: Cấu hình dự án Django cho S3 Bucket

Để dùng bucket S3 với dự án Django, hãy cài đặt những gói sau:

  • django-storages giúp bạn xác định một backend lưu trữ cho file.
  • boto3 là AWS Software Development Kit (SDK) giúp dự án Python tương tác với AWS.

Bạn có thể cài những gói này vào môi trường Python ảo với trình quản lý gói Pip của Python bằng lệnh sau trong terminal:

pip install django-storages boto3

Sau khi đã cài thành công những gói này, mở file settings.py và thêm boto3 vào app đã cài.

Cuối cùng, cấu hình dự án Django để dùng bucket AWS S3. Đây là cấu hình phổ biến:

AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID '
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
AWS_STORAGE_BUCKET_NAME = 'AWS_STORAGE_BUCKET_NAME'
AWS_S3_SIGNATURE_NAME = 's3v4',
AWS_S3_REGION_NAME = 'AWS_S3_REGION_NAME'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERITY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

Dán cấu hình trên vào trong file settings.py và thay giá trị tương ứng. Thay AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY bằng khóa truy cập và khóa truy cập bí mật bạn đã sao chép hoặc tải ban đầu. Bạn cũng nên thay đổi AWS_STORAGE_BUCKET_NAME và AWS_S3_REGION_NAME sang tên của bucket và vùng S3.

Bạn có thể lấy tên miền bằng cách điều hướng tới bucket S3 và sao chép giá trị cuối cùng ở cột AWS region.

Snapshot tài khoản

Bước 6: Kiểm tra cấu hình AWS

Mẫu code sau sẽ upload file trực tiếp từ bảng admin, nhưng bạn thoải mái upload dữ liệu từ vị trí khác.

Ở đây, bạn cso một mẫu như sau:

class Post(models.Model):
    title = models.CharField(max_length=225, blank=False, null=False)
    content = models.TextField('Post Body', blank=False, null=False)
    author = models.CharField(max_length=225, blank=False, null=False)
    date_published = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='posts')

    def __str__(self):
        return self.title

Đảm bảo bạn triển khai các hoạt động cần thiết như di chuyển, thêm nó vào bảng admin, tạo cửa sổ xem và những thứ cần cho dự án. Đảm bảo bạn tuân thủ quy tắc MVT của Django.

Sau khi hoàn tất, điều hướng tới bảng admin hoặc biểu mẫu đã tạo cho upload file và tải một file ảnh.

Điều hướng tới trang chính và xác nhận ảnh ở đó. Nếu có, click chuột phải vào ảnh, rồi chọn Open image in new tab. Trong tab mới chứa ảnh, bạn sẽ thấy thanh địa chỉ tham chiếu bộ chứa S3 đã tạo từ đầu:

Quản lý bộ nhớ trong Python

Bước 7: Thu thập file tĩnh cho bucket S3

Thêm những cấu hình sau vào file settings.py:

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'

Sau đó, mở Command Line Interface (CLI) và chạy lệnh:

python manage.py collectstatic --noinput

Để xác nhận mọi thứ hoạt động tốt, mở bucket S3 trong console AWS. Bạn sẽ thấy một thư mục tên static.

Thế là xong! Hi vọng bài viết hữu ích với các bạn.

Thứ Tư, 16/08/2023 14:46
51 👨 245
0 Bình luận
Sắp xếp theo