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.
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à:
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.
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 ?
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.
Ok, vậy là đã chuẩn bị xong, sang bước tiếp theo:
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à
Rất trực quan và dễ hiểu. Bây giờ mới đến bước là thiết lập ra sao
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.
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.
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:
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:
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é :))
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.
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à:
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.
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 ?
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.
Ok, vậy là đã chuẩn bị xong, sang bước tiếp theo:
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à
Rất trực quan và dễ hiểu. Bây giờ mới đến bước là thiết lập ra sao
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.
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.
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:
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:
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é :))
Quick Links
Social Media