Xây dựng ứng dụng hướng sự kiện với Amazon EventBridge

bởi  Talia Nassi | vào 11 APR 2022 | in Amazon EventBridge, Events, Serverless | Permalink |

Kiến trúc hướng sự kiện (Event-Driven Architecture) là nơi các dịch vụ tương tác với nhau thông qua các sự kiện. Sự kiện là những điều đã xảy ra trong ứng dụng của bạn (ví dụ: một mặt hàng được thêm vào giỏ hàng, một đơn hàng mới được đặt). Sự kiện là các đối tượng JSON cung cấp thông tin cho bạn về những điều đã xảy ra trong ứng dụng. Trong kiến trúc hướng sự kiện, mỗi thành phần của ứng dụng sẽ kích hoạt một sự kiện bất cứ khi nào có gì thay đổi. Các thành phần khác lắng nghe và quyết định cách xử lý sự kiện đó.

Khi xây dựng ứng dụng theo hướng sự kiện, bạn tách rời (decouple) các nguồn sự kiện và đối tượng nhận sự kiện. Điều này cho phép các nhóm hoạt động độc lập hơn vì các dịch vụ của bạn được liên kết lỏng lẻo. Khi thêm các tính năng mới vào ứng dụng, bạn sẽ tạo các sự kiện mới và sau đó quyết định nguồn sự kiện và đối tượng nhận sự kiện. Nguồn sự kiện là nơi phát ra sự kiện và đối tượng nhận sự kiện là bên đăng ký hoặc nhận sự kiện. Việc tách rời các nguồn sự kiện và đối tượng nhận sự kiện có thể giúp tăng tốc đáng kể thời gian phát triển và đơn giản hóa việc thay đổi ứng dụng của bạn.

Tách rời (Decouple) ứng dụng của bạn có thể cho phép cộng tác giữa các nhóm liền mạch hơn. Ví dụ: bạn là nhà phát triển tại một công ty thương mại điện tử và đang xây dựng một ứng dụng thương mại điện tử không server. Nhóm của bạn phụ trách quy trình tạo và xác thực tài khoản. Bạn xây dựng quy trình đăng nhập và kích hoạt một sự kiện khi người dùng mới tạo tài khoản.

Khi sự kiện được kích hoạt, các nhóm khác có thể được thông báo. Đội marketing có thể lắng nghe sự kiện “Tạo tài khoản” và hành động dựa trên nó (ví dụ: gửi email khuyến mãi). Trong kiến trúc tách rời này, nhà sản xuất và người tiêu dùng sự kiện không cần biết về nhau. Họ chỉ cần lắng nghe các sự kiện và hành động phù hợp khi họ quan tâm đến một sự kiện. Điều này có thể đẩy nhanh việc phát triển bằng cách giảm thiểu sự phức tạp do việc xây dựng các tính năng mới gây ra.

Trong AWS, các sự kiện được dàn dựng thông qua các quy tắc của Amazon Event Bridge. Các quy tắc này tương ứng với các sự kiện đến từ nguồn sự kiện (Event sources) và gửi chúng đến điểm đích của sự kiện (Event targets) để xử lý.

EventBridge có thể nhận sự kiện từ nhiều nguồn khác nhau, bao gồm hơn 200 dịch vụ AWS, các sự kiện tùy chỉnh từ các hàm Lambda hoặc ứng dụng của bạn và các ứng dụng SaaS của bên thứ ba. Bạn chỉ định hành động cần thực hiện khi EventBridge nhận được sự kiện khớp với mẫu sự kiện trong quy tắc. Khi một sự kiện khớp, Amazon EventBridge sẽ gửi sự kiện đến đối tượng được chỉ định và kích hoạt hành động được xác định trong quy tắc.

Để định tuyến các sự kiện từ các nguồn này đến đúng đối tượng, các sự kiện phải được đặt trên một bus sự kiện (event bus) tương ứng. Có ba loại bus sự kiện. Loại đầu tiên là bus mặc định (default bus), luôn có sẵn trong mọi tài khoản và là nơi các sự kiện AWS được định tuyến đến. Loại thứ hai là bus sự kiện tùy chỉnh (custom event bus). Bạn có thể tạo các bus sự kiện tùy chỉnh cho các ứng dụng riêng của mình để đáp ứng nhu cầu kinh doanh. Cuối cùng, bạn cũng có thể tạo các bus sự kiện SaaS (SaaS event bus), được tạo khi bạn cấu hình các ứng dụng SaaS làm nguồn sự kiện.

Có nhiều đối tượng nhận sự kiện tiềm năng. Đối tượng nhận sự kiện là nơi bus sự kiện định tuyến đến sau khi một sự kiện tương ứng xảy ra. Các đối tượng bao gồm AWS Lambda, Amazon Kinesis, AWS Step Functions, Amazon API Gateway và thậm chí cả bus sự kiện trong các tài khoản khác. Thiết kế linh hoạt này cho phép bạn tạo ra nhiều mẫu tích hợp khác nhau dựa trên các nhu cầu cụ thể của mình.

Cấu hình sự kiện với Amazon EventBridge

Hướng dẫn này sẽ hướng dẫn bạn cách gửi sự kiện từ Amazon S3 (nguồn sự kiện) đến AWS Lambda (đích sự kiện) bằng quy tắc sự kiện.

Trong hướng dẫn này, bạn sẽ học cách cấu hình sự kiện với Amazon EventBridge bằng cách triển khai mẫu AWS Serverless Application Model (AWS SAM). AWS Serverless Application Model (AWS SAM) là một khung mã nguồn mở để xây dựng các ứng dụng không server. Nó cung cấp cú pháp viết tắt để thể hiện các hàm, API, cơ sở dữ liệu và ánh xạ nguồn sự kiện. AWS SAM là một tiện ích mở rộng của AWS CloudFormation, là công cụ mã hóa cơ sở hạ tầng AWS. Bạn xác định tài nguyên bằng CloudFormation trong mẫu AWS SAM của mình và sử dụng toàn bộ bộ tài nguyên, hàm nội tại và các tính năng mẫu khác có sẵn trong AWS CloudFormation.

Trước tiên, bạn tải ảnh lên một bucket S3. Điều này kích hoạt một sự kiện, sự kiện này kích hoạt một hàm Lambda, hàm này sẽ thay đổi kích thước ảnh và đặt nó vào một bucket S3 khác.

Điều kiện tiên quyết:

  1. AWS SAM CLI (Nếu bạn sử dụng AWS Cloud9, công cụ này đã được cài đặt sẵn cho bạn)

Để cấu hình sự kiện với Amazon EventBridge:

  1. Điều hướng đến Serverlessland Patterns Collection và chọn mẫu Amazon S3 to Amazon EventBridge to AWS Lambda. Mẫu AWS SAM này triển khai một thùng S3, một hàm Lambda, một quy tắc EventBridge và các tài nguyên IAM cần thiết để chạy ứng dụng.
  2. Sao chép và dán hướng dẫn sao chép vào terminal của bạn.
  3. Chạy sam deploy –guided để triển khai mẫu.
  4. Bạn sẽ thấy thông báo thành công:
  1. Điều hướng đến bảng điều khiển EventBridge và chọn Rules từ bảng điều khiển bên trái. Sau đó chọn quy tắc được tạo bởi AWS SAM (bắt đầu bằng sam-app).

Nguồn sự kiện là S3 và quy tắc được kích hoạt khi một ảnh được đặt vào bucket nguồn trong S3.

Tiếp theo, lưu ý rằng đích sự kiện là hàm Lambda mà bạn đã tạo từ mẫu AWS SAM.

  1. Điều hướng đến bảng điều khiển S3 và chọn Buckets trên bảng điều khiển bên trái. Sau đó chọn thùng được tạo cho bạn (bắt đầu bằng sam-app). Chọn tab Properties và lưu ý rằng tích hợp với EventBridge đã được bật.
  2. Từ tab Objects, chọn Upload và tải lên một ảnh.
  1. Điều hướng đến bảng điều khiển Lambda và chọn hàm Lambda của bạn (bắt đầu bằng sam-app). Chọn tab Monitor và chọn View Logs in CloudWatch.
  1. Bạn có thể thấy sự kiện kích hoạt hàm Lambda trong nhật ký.

Thêm nhiều quy tắc sự kiện vào ứng dụng của bạn

Trong ví dụ trước, bạn đã thêm một quy tắc EventBridge định tuyến các sự kiện từ S3 (nguồn sự kiện) đến Lambda (mục tiêu sự kiện) bằng cách sử dụng một bus sự kiện. Bây giờ, hãy thêm một quy tắc khác:

  1. Từ bảng điều khiển EventBridge, chọn Rules, sau đó chọn Create rule .
  2.  Nhập tên và mô tả cho quy tắc.
  1. Xác định mẫu sự kiện được sử dụng để kích hoạt các mục tiêu sự kiện. Đối với Service Provider (Nhà cung cấp dịch vụ), chọn AWS và đối với Service Name (Tên dịch vụ), chọn S3. Đối với Loại sự kiện (Event Type), chọn Amazon S3 event notification (Thông báo sự kiện Amazon S3) và trong danh sách thả xuống sự kiện, chọn Đối tượng được tạo (Object created). Bạn đang cấu hình nguồn sự kiện thành một đối tượng được tạo trong bucket S3 của mình.
  1. Chọn bus sự kiện AWS mặc định hoặc bus sự kiện tùy chỉnh.
  2. Chọn mục tiêu sự kiện. Trong ví dụ này, hãy cấu hình một nhóm nhật ký (log group) Amazon CloudWatch. Nhập bất kỳ tên nào cho nhóm nhật ký, nhóm này sẽ được tạo tự động.
  1. Chọn Tạo (Create).
  2. Tải lên một hình ảnh vào bucket S3, như được hiển thị trong bước 7 ở trên.
  3. Điều hướng đến bảng điều khiển Amazon CloudWatch và chọn Nhóm nhật ký từ bảng điều khiển bên trái. Chọn nhóm nhật ký, sau đó chọn một luồng nhật ký.
  4. Sự kiện được ghi vào CloudWatch Logs.

Việc thêm quy tắc sự kiện thứ hai không thay đổi hành vi của nguồn sự kiện hoặc ảnh hưởng đến các mục tiêu sự kiện khác.

Kết luận

Bài đăng này là phần giới thiệu ngắn gọn về kiến trúc theo sự kiện và hướng dẫn chi tiết về cách bạn tạo một ứng dụng theo sự kiện với Bộ sưu tập mẫu Serverlessland. Bạn cũng có thể thêm hai quy tắc sự kiện khác nhau vào bus sự kiện của mình.

Để biết thêm tài liệu học tập về serverless, hãy truy cập Serverless Land.

Leave a comment