Trang chủTác giảLiên hệ

Batch Operations cho S3

By Cao Văn Thành
Published in AWS
August 09, 2021
5 min read

Xin chào các anh em, hôm nay trong chuyên mục AWS, mình sẽ giới thiệu chút chút cho mọi người về một tính năng không phải cũ, nhưng cũng không phải quá mới trên S3. Đó chính là Batch Operations.

1. Khái quát

Batch Operations là 1 tính năng xuất hiện vào thời điểm năm 2019, hồi S3 vẫn còn chưa đổi giao diện. Vậy nó ra đời trong hoàn cảnh thế nào ?

Các bác thao tác với S3 Console thì cũng biết, việc thao tác trên cửa sổ giao diện thì đơn giản, nhưng lại mất nhiều thời gian. Còn viết code để thực hiện chức năng (như viết trên AWS CLI) thì cũng chẳng phải là chuyện click vài nhát là xong. Trong khi chúng ta chỉ cần những thao tác rất đơn giản như Copy Objects sang 1 cái Bucket mới, hoặc là Chuyển 1 số Object sang Storage Class khác.

Thế là Batch Operations ra đời với mục đích: Đơn giản hóa các thao tác với Objects trên S3. Các thao tác trên S3 Console, chúng ta có thể dễ dàng làm là:

  • Copy objects
  • Invoke AWS Lambda function
  • Replace all object tags
  • Delete all object tags
  • Replace access control list
  • Restore objects
  • S3 Object Lock retention
  • S3 Object Lock legal hold

Thì đây, S3 Batch Operations sẽ giúp các bác thực hiện những thao tác này nhưng trên nhiều objects.

2. Create Job

Bác nào mà làm dev quen, chắc sẽ biết khái niệm Cron Job nhỉ. Đây là những tác vụ chạy ngầm trên hệ thống server. Mỗi tác vụ sẽ được coi là 1 job. Thì từ job ở đây trong Batch Operations có ý nghĩa kiểu kiểu như vậy. Khi nói tới Batch Operations thì chúng ta đang hình dung là chạy nhiều tác vụ gì đó trên nhiều file, và chạy ngầm ngầm kiểu lúc nào xong thì xong ý.

Ok, không chém gió giông dài nữa, chúng ta sẽ cần tìm hiểu tạo Job thì cần những gì nhé. Ở đây, nếu các bác biết ý nghĩa của Batch Operations rồi thì các bác sẽ biết, chúng ta cần phải tạo 1 cái Job, cho những object nào đó, làm gì đó. Đúng không ?

2.1 Việc đầu tiên là áp dụng với những object nào:

alt text

Tại vị trí này, chúng ta thấy AWS cho chúng ta lựa chọn Manifest format. Đây là file giúp chúng ta lựa chọn ra những object để chạy. Có 2 format cho chúng ta chọn là S3 inventory report, và loại thứ 2 là CSV.

Nếu bác nào chưa biết thì S3 inventory report ấy nhé, các bác có thể sử dụng tính năng Inventory configurations của S3 để đặt lịch tạo inventory list hằng ngày hoặc hằng tuần để liệt kê thôi. Tuy nhiên là trong lúc viết bài này thì không thể ngồi đợi đến hết ngày nó tạo ra file cho mình được nên em sẽ dùng file CSV nhé. Thêm nữa là nếu dùng manifest.json thì các bác sẽ hơi khó kiểm soát chạy với object nào, mà nhìn chung là chạy cho tất cả object hoặc các bác viết SELECT query để ra cái Inventory list là subset của bucket.

(Use cases: Số lượng nhỏ thì nên dùng CSV, còn số lượng lớn thì nên dùng SELECT query -> generate ra Inventory list cũng là CSV rồi chạy thôi)

CSV thì file nói chung đơn giản, chỉ bắt buộc 2 trường là bucket name vaf object key (và version ID nếu có bật versioning). Thế thôi.

alt text

Ok, vậy là đã chuẩn bị xong, sang bước tiếp theo:

2.2 Xác định làm gì.

alt text

Chỗ này thì khá đơn giản thui, bác nào biết tiếng Anh chắc cũng đọc được. Loanh quanh là những thao tác đã nói trước đó. Với mỗi operation, thì sẽ có các tham số khác nhau. Ví dụ như là

  • Copy thì Copy đi đâu
  • Invoke Lambda thì Invoke lambda nào
  • Thay thế tag thành tag nào
  • Cập nhật ACL thì cập nhật thành cái gì
  • Restore data thì restore từ Storage nào

Rất trực quan và dễ hiểu. Bây giờ mới đến bước là thiết lập ra sao

2.3 Thiết lập tham số chạy

Tại đây thì cũng có vài tham số cần thiết lập, tuy nhiên chúng ta sẽ tập trung vào 2 tham số quan trọng đó là Priority và Permission.

alt text

alt text

Priority chỉ là 1 số nguyên. Nếu chạy 1 mình, thì nó không có tác dụng gì lắm. Tuy nhiên khi chạy nhiều Job cùng 1 lúc, chúng ta muốn đảm bảo các Job chạy theo 1 thứ tự nào đó, thì chúng ta có thể thiết lập tham số này. Ví dụ như là chúng ta muốn resize ảnh bằng lambda, sau đó move file ảnh lớn sang Storage Class IA chẳng hạn.

Muốn Job nào có độ ưu tiên cao hơn (chạy trước, chúng ta sẽ cho Priority lớn hơn. Các Job sẽ chạy theo thứ tự Priority giảm dần. Tuy nhiên là bên AWS cũng không chắc chắn lắm về cái thứ tự chạy này, nên là họ khuyên chúng ta nếu muốn chắc cú, thì hãy chạy bằng tay, tức là xong cái nào, thì hẵng start cái Job sau :)) .

Permission là dùng để thiết lập quyền cho phép chạy. Tất nhiên khi chạy bất kỳ 1 cái logic nào, thì chúng ta cần phải chắc chắn là mình có quyền thao tác đúng không ? Ở đây thì Permission của Batch Operation không phải thực thể (Entity), nên chúng ta chỉ gắn Role được thôi nhé.

Ở đây, với các thao tác tới S3, thì nói chung chúng ta sẽ cần quyền truy cập/thay đổi gì đó các metadata của object trên S3. Còn thì có những thao tác khác như upload hay Copy sang bucket khác thì sẽ cần quyền tương ứng để có thể upload lên các bucket đó.

Next 1 hồi là đã tạo xong Job rồi nha.

3. Run Job

Trước khi Run Job, chúng ta phải chắc cú là những thiết lập phía trước là ok (như các quyền, các thao tác được phép thực hiện, bla bla, … ).

Sau khi tạo xong Job, sẽ hiện lên ở khung Job như này:

alt text

Không biết là vì lý do gì, mà AWS hơi ngáo ngáo lại không cho mình ẩn những cái Job không cần thiết đi, nó cứ hiện lên cả lố ở đây y như log ý. Và có 1 thông báo là 90 ngày sau nó sẽ xóa nếu đã chạy xong hoặc chạy fail.

Failed Job sẽ hiện Status Failed màu đỏ rực rỡ như kia :D … Để biết lý do failed, chúng ta chỉ việc nhấn vào Job đó, ở ô Status sẽ hiển thị nguyên nhân Failed:

alt text

Nếu Job không Failed thì nó sẽ ở trạng thái New -> Confirm to operation (đại loại là chờ chúng ta chạy, chứ nó cũng không có chạy liền đâu nha).

Đó, chạy xong là chúng ta ngồi nhìn thành quả thôi :))

Vậy đó, chúc mọi người thành công với việc chạy thử Batch Operations nha.

Lưu ý 1 cái lưu ý rất to: là chạy Batch Operations sẽ mất phí nhé. Em có search đỏ mắt nhưng vẫn chưa thấy cách tính giá của Batch Operations các bác ạ (ở đây chạy 2 lượt thành công là thấy mất 0.5 $ rồi, nên chắc khoảng 0.25$ / 1 lượt nhé mọi người). Ai biết giá phần này tính sao thì comment cho em biết với nhé :))


Tags

AWSS3 Batch OperationS3

Cao Văn Thành

Mình đã làm việc với web được 1 thời gian và mình thích chia sẻ về công nghệ. Hy vọng chúng ta sẽ xây dựng được một cộng đồng vững mạnh cho thế hệ Dev GenZ tại Việt Nam.

Related Posts

Static & Dynamic webpage in Cloudfront (AWS CDN)
August 10, 2021
3 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media