bởi Yashlin Naidoo và Arnav Thakur | vào ngày 04 tháng 01 năm 2024 |
Quản trị viên có thể cần giám sát và kiểm toán các hành động như tải lên, cập nhật và xóa được thực hiện trên các tệp và dữ liệu khác để tuân thủ các quy định hoặc chính sách của công ty. Một phương pháp theo dõi và lưu trữ các hành động thực hiện trên các tệp có thể giảm công việc thủ công và chi phí vận hành trong khi giúp đảm bảo tuân thủ.
Kiến trúc dựa trên sự kiện fanout có thể giúp ghi lại hoạt động tệp và thực hiện các hành động, như kích hoạt các hoạt động lưu trữ dự trữ hoặc quy trình làm việc tự động, để hỗ trợ tuân thủ yêu cầu. Đối với dữ liệu được lưu trữ trên Amazon S3, bạn có thể tận dụng kiến trúc như vậy với các dịch vụ AWS khác như AWS Lambda và Amazon SQS.
Trong bài viết này, chúng tôi sẽ hướng dẫn cách gửi S3 Event Notifications được kích hoạt bởi các hành động thực hiện trên đối tượng trong một bucket S3 đến một chủ đề Amazon SNS, sau đó chia ra thành một luồng giao hàng Amazon Kinesis Data Firehose để cuối cùng gửi thông báo của bạn vào một bucket S3 khác để lưu trữ. Giải pháp này trình bày một kiến trúc dựa trên sự kiện cho phép xử lý và giám sát tự động các hành động thực hiện trên các đối tượng trong Amazon S3 mà có thể mở rộng, đáng tin cậy và có thể tùy chỉnh cho trường hợp sử dụng của bạn.
Tổng quan
Trong giải pháp sau được mô tả trong biểu đồ, các dịch vụ AWS (Amazon S3, Amazon SNS, Amazon Kinesis) được tích hợp để gửi Thông báo Sự kiện S3 mỗi khi có hoạt động đối với các đối tượng được lưu trữ trong một bucket Amazon S3.
- Sự kiện đối tượng được khởi tạo trong bucket S3. Một S3 Event Notification được xuất bản đến SNS topic.
- SNS topic nhận S3 Event Notification được khởi tạo cho đối tượng (các đối tượng).
- SNS sẽ chia ra thông báo cho Amazon Kinesis Data Firehose.
- Amazon Kinesis Data Firehose truyền thông báo sự kiện đến một bucket S3 khác.
Để biết thông tin về giá cả liên quan đến giải pháp này, hãy tham khảo phần “Cost considerations”.
Yêu cầu tiên quyết
Để triển khai giải pháp này, bạn cần có các tài nguyên sau:
- Một bucket S3 để lưu trữ các đối tượng với thông báo sự kiện được kích hoạt.
- SNS topic.
- Một bucket S3 để lưu trữ thông báo sự kiện của các đối tượng.
Để tạo các bucket S3, hãy tham khảo hướng dẫn tạo bucket S3 đầu tiên của bạn trong S3 User Guide. Để tạo một SNS topic, hãy tham khảo hướng dẫn tạo một Amazon SNS Topic trong SNS User Guide.
Dẫn qua giải pháp
Phần này chứa các bước chi tiết về việc tạo và tích hợp tài nguyên cần thiết để triển khai quy trình làm việc dựa trên sự kiện được trình bày trong bài viết này. Điều này bao gồm:
Bước 1: Tạo một luồng Amazon Kinesis Data Firehose
Bước 2: Đăng ký luồng vào chủ đề SNS của bạn được cấu hình để nhận Thông báo Sự kiện S3
Bước 3: Tạo một bucket S3 để lưu trữ Thông báo Sự kiện S3
Bước 4: Kiểm thử tuân thủ và kiểm toán đối với các hành động đối với các đối tượng được lưu trữ trong Amazon S3
Bước 1: Tạo một luồng Amazon Kinesis Data Firehose
- Điều hướng đến bảng điều khiển Amazon Kinesis.
- Chọn Data Firehose trong bảng điều khiển điều hướng.
- Chọn Create delivery stream.
- Nhập giá trị cho các trường sau:
a. Nguồn: Direct PUT
b. Đích luồng giao hàng: Chọn Amazon S3
c. Tên luồng giao hàng: Tên của luồng giao hàng Amazon Kinesis Data Firehose của bạn
- Cuộn xuống Destination settings:
a. Dưới Bucket S3, chọn Browse.
b. Chọn một bucket S3 mà bạn dự định sử dụng để lưu trữ các sự kiện hoạt động của đối tượng và sau đó chọn Choose.
- Chọn Create delivery stream.
Bước 2: Đăng ký vào SNS topic của bạn được cấu hình để nhận S3 Event Notifications
- Hoàn tất các điều kiện tiên quyết ở đây để tạo một vai trò IAM mà Amazon SNS có thể sử dụng để đẩy bản ghi vào Amazon Kinesis Data Firehose.
- Hoàn tất các bước để đăng ký luồng giao hàng Kinesis Data Firehose vào chủ đề Amazon SNS để sử dụng để phân phối sự kiện hoạt động đối tượng được đẩy từ Amazon S3.
Dưới đây là một số điều cần lưu ý:
- Đối với lỗi giảm tốc với giao thức Kinesis Data Firehose, Amazon SNS sử dụng chính sách giao hàng giống như cho các điểm cuối do khách hàng quản lý.
- Bạn có thể đăng ký thêm các đăng ký ứng dụng đến chủ đề để kích hoạt quy trình làm việc tự động bao gồm các tác nhân như Lambda và SQS để xử lý sự kiện được xuất bản đồng thời.
- Đối với theo dõi hoạt động giao hàng từ chủ đề SNS, nên bật ghi nhật ký tình trạng giao hàng.
Bước 3: Tạo một bucket S3 để lưu trữ S3 Event Notifications
- Trên Amazon S3 console, điều hướng đến bucket S3 của bạn.
- Chọn Properties và điều hướng đến Event notifications.
- Điều hướng đến phần Event notifications và chọn Create event notification. Để biết thêm thông tin, hãy tham khảo tài liệu về việc bật và cấu hình thông báo sự kiện bằng cách sử dụng bảng điều khiển Amazon S3.
- Trong phần General configuration, nhập mô tả cho Event name, Prefix – optional and Suffix – optional.
- Trong phần Event types, chọn All object create events, All object removal events và All restore object events.
- Trong phần Destination, chọn SNS Topic và chỉ định SNS Topic được tạo trước đó. Xác minh rằng nó có quyền truy cập chính sách SNS đúng để cho phép S3 xuất bản S3 Event Notifications. Để biết thêm thông tin, hãy tham khảo tài liệu về cách tạo một Amazon SNS Topic.
Sau khi bạn chọn Save changes, Amazon S3 sẽ gửi một thông báo kiểm tra đến đích S3 Event Notification
Bước 4: Kiểm thử tuân thủ và kiểm toán đối với các hành động đối với các đối tượng được lưu trữ trong Amazon S3
Đầu tiên, tải lên một đối tượng vào bucket S3 của bạn để kiểm thử tuân thủ và kiểm toán hoạt động của đối tượng.
- Trên Amazon S3 console, chọn bucket S3 của bạn.
- Điều hướng đến Object
- Chọn Upload.
- Trong cửa sổ Upload, thực hiện một trong các bước sau:
a) Kéo và thả tệp vào ô Upload.
b) Chọn Add file, chọn các tệp cần tải lên và chọn Open.
- Để tải lên các tệp được liệt kê, ở cuối trang, chọn Upload.
Bây giờ, chúng ta sẽ xem xét các thông báo sự kiện liên quan đến hoạt động đối tượng để đảm bảo tuân thủ và kiểm toán đối với các đối tượng được lưu trữ trong bucket S3 của bạn.
- Một S3 Event Notification sẽ được xuất bản đến SNS Topic. Điều này có thể được xác nhận bằng cách xem các số liệu CloudWatch cho Amazon SNS bằng cách lọc cho NumberOfMessagesPublished, NumberOfMessagesDelivered và NumberOfMessagesFailed. Bạn có thể tìm hiểu thêm thông tin trong tài liệu về Cách xem số liệu CloudWatch cho Amazon SNS. Lưu ý rằng CloudWatch là môi trường phân phối và có thể mất một khoảng thời gian để các số liệu xuất hiện.
- Thông báo sự kiện sẽ được phân phối ra Kinesis Firehose Stream. Để xác nhận việc giao hàng thành công, bạn có thể xem số liệu CloudWatch theo các cách sau:
a) Trên Kinesis console, điều hướng đến Data Firehose. Chọn Delivery Stream của bạn. Điều hướng đến theo dõi và xem số liệu Delivery stream. Xem số liệu Delivery to Amazon S3 success để xác nhận việc giao hàng thành công vào Bucket S3 của bạn.
b) Trên CloudWatch metric console, trên bảng điều khiển điều hướng, chọn phần số liệu và chọn All metrics. Chọn Firehose namespace và chọn Delivery Stream Metrics. Tìm kiếm Delivery to Amazon S3 success metric và đánh dấu nó. Xác minh rằng các thống kê, khoảng thời gian và thời lượng được đặt thành giá trị phù hợp. Bạn có thể tìm hiểu thêm thông tin trong tài liệu về số liệu CloudWatch về giao hàng dữ liệu và cách truy cập số liệu CloudWatch cho Kinesis Data Firehose.
- Để xem thông báo sự kiện đối tượng, điều hướng đến S3 console và chọn bucket S3 của bạn. Một thư mục sẽ được tạo dựa trên năm hiện tại, ví dụ (2023). Nếu một thư mục chưa được tạo, đợi một vài phút.
- Sau khi chọn thư mục năm, chọn thư mục tiếp theo chỉ ra tháng dưới dạng số, ví dụ [10 (October)]. Thư mục cuối cùng sẽ là dấu thời gian theo định dạng UTC.
- Một tệp sẽ được lưu trữ trong thư mục này theo định dạng DeliveryStreamName-DeliveryStreamVersion-YYYY-MM-dd-HH-MM-SS-RandomString. Bạn có thể tìm hiểu thêm thông tin trong tài liệu về Định dạng tên đối tượng Amazon S3.
- Khi bạn tải xuống hoặc mở tệp, định dạng sẽ xuất hiện như sau:
| { “Type”: “Notification”, “MessageId”: “509780d4-adb4-5150-9e15-dd4304bc659b”, “TopicArn”: “arn:aws:sns:us-west-2:1234567890:s3complianceaudit”, “Subject”: “Amazon S3 Notification”, “Message”: “{\”Records\”:[{\”eventVersion\”:\”2.1\”,\”eventSource\”:\”aws:s3\”,\”awsRegion\”:\”us-west-2\”,\”eventTime\”:\”2023-10-04T17:54:15.662Z\”,\”eventName\”:\”ObjectCreated:Put\”,\”userIdentity\”:{\”principalId\”:\”AWS:XXXXXXXX:XXXXXXX-XXXXXX\”},\”requestParameters\”:{\”sourceIPAddress\”:\”XXXXXXXX\”},\”responseElements\”:{\”x-amz-request-id\”:\”N6PDT6NX774FDFC3\”,\”x-amz-id-2\”:\”HlCevKZnkENGegZOVihFDxHiGmKns97aLBytRH0urm2MXX92RfROUuCkDf5eBfpS5vnImi7Q1Q0yUzRgA1RmbnP9KsUyHL3B\”},\”s3\”:{\”s3SchemaVersion\”:\”1.0\”,\”configurationId\”:\”snstopic\”,\”bucket\”:{\”name\”:\”s3bucketcomplianceaudit\”,\”ownerIdentity\”:{\”principalId\”:\”A2SE7YNEUS8CN0\”},\”arn\”:\”arn:aws:s3:::s3bucketcomplianceaudit\”},\”object\”:{\”key\”:\”avis-budget-inbound-charges-explained.pdf\”,\”size\”:421642,\”eTag\”:\”e08e4a434b672d206f551df3efd31428\”,\”sequencer\”:\”00651DA6C799C2748F\”}}}]}”, “Timestamp”: “2023-10-04T17:54:16.180Z”, “UnsubscribeURL”: “https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:1234567890:s3complianceaudit:41dde2df-85bd-4284-bc09-38ee6dfdd7b5” } |
Bạn có thể tìm thêm thông tin trong tài liệu về cấu trúc thông báo sự kiện. Bạn có thể truy vấn dữ liệu được lưu trữ trong S3 bằng cách sử dụng Amazon Athena. Để biết tổng quan ngắn về việc sử dụng Athena với S3, bạn có thể tham khảo blog này, blog này, hoặc phần Hướng dẫn Người dùng S3 về truy vấn các báo cáo S3 Inventory với Amazon Athena. Bạn cũng có thể sử dụng Amazon S3 Select để lọc và truy xuất dữ liệu.
Khi dữ liệu được lưu trữ ở đây, bạn có thể sử dụng S3 Lifecycle để cấu hình một bộ quy tắc để quản lý đối tượng của bạn một cách tiết kiệm chi phí.
Xem xét về Chi phí
Amazon SNS và Kinesis Data Firehose không có chi phí cố định trước hoặc chi phí tối thiểu. Amazon Kinesis Data Streams sử dụng mô hình đơn giản thanh toán theo sử dụng, và bạn chỉ thanh toán cho các nguồn lực bạn sử dụng. Đối với Amazon SNS, bạn thanh toán dựa trên số lượng thông báo bạn xuất bản, số lượng thông báo bạn giao hàng và bất kỳ cuộc gọi API bổ sung nào để quản lý chủ đề và đăng ký.
Chi phí của giải pháp này là 51.75 USD mỗi tháng (621 USD mỗi năm) dựa trên các thông số sau đây:
Amazon Kinesis Data Firehose: 10 Số lượng bản ghi cho việc chuyển đổi dữ liệu mỗi giây cho Direct PUT.
Amazon Simple Notification Service (SNS): 100000 Yêu cầu và 100000 Giao hàng Luồng Giao hàng Amazon Kinesis mỗi tháng.
Amazon S3: 1 TB Lưu trữ và 100000 Yêu cầu PUT hàng tháng cho tệp được lưu trữ.
Amazon S3 (compliance and auditing S3 Event Notifications stored): 1 TB Lưu trữ và 100000 Yêu cầu PUT hàng tháng cho Thông báo sự kiện S3 được lưu trữ.
Sử dụng AWS Pricing Calculator để có ước tính cho khối công việc của bạn.
Dọn dẹp
Dọn dẹp bucket S3 chứa các sự kiện tuân thủ và kiểm toán được tạo trong các bước trước đó để đảm bảo bạn không phải trả chi phí lưu trữ. Bạn có thể thực hiện điều này bằng cách sử dụng hướng dẫn S3 ở đây.
Tương tự, bạn nên xóa cài đặt S3 Event Notification được cấu hình trên bucket lưu trữ đối tượng của bạn để không tạo thêm dữ liệu về sự kiện hoạt động tài liệu trong tương lai. Tiếp theo, theo quy tắc tốt nhất được khuyến nghị, bạn nên xóa tất cả các đăng ký liên quan đến SNS topic được sử dụng trong cài đặt trước khi xóa chủ đề. Cuối cùng, để hoàn tất quá trình dọn dẹp, những người đăng ký SNS topic không sử dụng nhưKinesis Data Firehose Stream có thể được loại bỏ.
Kết luận
Trong bài viết này, chúng tôi đã thể hiện một giải pháp dựa trên sự kiện để giám sát tự động các hành động được thực hiện trên các đối tượng được lưu trữ trong Amazon S3.
Giải pháp được trình bày giúp các quản trị viên có thể cần giám sát và kiểm toán các hành động được thực hiện trên các tệp và dữ liệu khác để tuân thủ theo các quy định hoặc chính sách của công ty. Điều này sẽ tránh việc lưu trữ dữ liệu dư thừa hoặc không cần thiết thông qua giám sát, làm cho kiểm toán hiệu quả hơn và lưu trữ dữ liệu ít tốn kém hơn.
Mở rộng giải pháp bằng cách bao gồm các đăng ký ứng dụng bổ sung cho SNS topic của bạn. Điều này sẽ cho phép kích hoạt các quy trình làm việc tự động để xử lý các sự kiện hoạt động tài liệu để bổ sung khả năng lưu trữ của Amazon Kinesis.
Về tác giả:
Yashlin Naidoo
Yashlin là Kỹ sư hỗ trợ đám mây tại AWS. Anh ấy là Chuyên gia về chủ đề trong SNS và có Chứng chỉ AWS Professional. Anh ấy thích làm việc với khách hàng và giải quyết các vấn đề phức tạp.
Arnav Thakur
Arnav đã làm việc cho AWS hơn 4 năm và là Chuyên gia về chủ đề của Amazon SNS. Anh ấy thích giải quyết các vấn đề phức tạp và giúp khách hàng thành công trên AWS.