Over the past decade, Clearview Team has built and maintained a pair of interconnected platforms for a confidential awards group. This is the event-driven AWS architecture that keeps both systems observable.

Prefer a downloadable version Read the case study as a PDF Download

The Client

A Confidential Non-profit and Awards Group *Membership Operations, Automated and Simplified *

At one time managed primarily through Excel spreadsheets and mail-in forms, the client’s membership system was functional but time-intensive for its administrators. With the benefit of an automated, online membership management system, client’s Board of Directors wisely contracted Clearview to combine member-related functions into one web-based platform.

More than a decade later, we’re still working in close partnership with the client to maintain and streamline member processes and relations through a secure, custom-built online portal. We’re continually finding new ways to empower administrators and members alike with rich tools and features, supporting this 501(c)(3) non-profit’s continued growth.

  • Purpose-built member dashboard with quick access to useful member functions including online signup, membership upgrade, and renewal; info & address changes; member-only services and perks; automated password reset & forgotten login recovery; notification preferences.
  • Powerful administrator dashboard, complete with tiered admin privileges, quick member lookup & sorting, bulk member management, numerous import/export options, and detailed reports.
  • Secure, multi-method payment processing with in-dashboard payment logs, receipts, and refund processing.
  • Newsletter and notification management including automated synchronization with MailChimp newsletter and SendGrid transactional email platforms.
  • Scheduled self-maintenance and member relations tasks including proactive address validation and expiration notifications.

The Digital Workflow Platform

Annual Intake and Review Workflow

The client also runs an annual intake-and-review cycle that once involved sorting through over a thousand hand-mailed physical packages. This veritable mountain of material was then shuffled through very extensive multi-stage review and selection processes by hand.

Since joining the client’s team in 2010, Clearview has systematically brought each of these processes together in a single online platform.

  • Fully web-based intake process, including secure online payment; upload of video clips, documents, and signoff forms; followup intake for supplementary materials.
  • Automated media verification, storage, and transcoding, utilizing Vimeo API integration for high-quality, secure, and familiar playback for reviewers. All media is secured against unauthorized download.
  • Advanced partner dashboard, enabling organizations with many moving parts to delegate intake tasks to multiple designated contributors and divide labor.
  • Review management, including secure reviewer application and selection process; a dedicated review portal with high-quality material review, shortlisting, issue flagging, and discussion features; selection and notification workflows.
  • Selection management, including application and eligibility processes and a secure selection interface.
  • Tight integration with the organization’s membership database for permissions verification.
  • Extensive administration dashboard, including tiered admin roles; organization and intake management; category and field management; payment, receipt, and transaction management; flexible sponsor-credits system; deadline management, late fee rules, and exceptions; numerous import/export tools.
  • Secure, triple-redundant data archival following each year’s cycle.
  • On-call support, including email support for contributors, reviewers, and participants.

The Project

Clearview Team's engineers and clients are spread across time zones, so monitoring and incident response carry real coordination overhead. This engagement is where we chose Event-driven architecture.

Challenges

The challenges we aim to solve with this approach:

  • Decoupling of services: To improve the agility of the application we designed our system not to be tightly coupled.
  • Real-time responsiveness: The application services operate on event-driven communication, which means the services can produce an event in real time. This enables our on-call engineers to react to important events that are produced by either user actions or system events.
  • Improved observability: The event-driven approach improves system observability. By analyzing event flows, we constantly monitor and improve the system behavior, identify bottlenecks, and locate the root cause of issues more effectively.

Deployment

The application is deployed on the AWS Cloud platform as AWS already provides all the communication buses that we need to produce, broker, and consume events.

Event Types We have covered the most important event types in the app, such as:

  • Finance events
  • Membership events
  • Scheduled job events
  • Health check events.

Goals

This project aims to solve the client’s requirements to create and continuously improve the membership and awards system while implementing a modern system architecture. More details about what kind of problems the application is designed to solve can be seen in the diagram below.

Editorial cover — three event sources (submit, vote, payment) fan into an AWS EventBridge bus, which fans out to a Lambda, an SQS queue, and a Kinesis stream.

System Architecture

This application is built around separate services, each running inside its own container. Services communicate through events — state changes that trigger actions elsewhere in the system.

Event-driven Architecture

An event is a state change — a user placing an order, a payment failing, a scheduled job firing. Services produce events and other services consume them, without needing to know about each other directly.

Event-driven architecture is often called EDA for short.

The rest of this post covers how we wired the event bus for job scheduling and monitoring — the piece that lets our team get notified in real-time and react before downtime reaches users.

Event-driven Architecture Showcase

Below is a diagram showing what a typical EDA system looks like and how it functions.

AWS based Event-driven architecture
AWS based Event-driven architecture

The Application

The application is built on NodeJS with an API service serving multiple front-end domains. This approach has served us well. We have been running the app as a container on AWS.

The diagram shows API and the DB secured and isolated in the VPC. Frontend is served to the client via CloudFront which pulls the website assets from the S3 bucket.
The diagram shows API and the DB secured and isolated in the VPC. Frontend is served to the client via CloudFront which pulls the website assets from the S3 bucket.

Please keep in mind that the client communicates with the API after it has been loaded on the client-side rendered website.

Event Producers

Events are generated from various services and can be produced either by a client action or by a scheduled job.

API Event Producer

The best example of a client-produced event is any type of event related to credit card payments. The app uses the “@aws-sdk/client-eventbridge” library to communicate with the AWS Event Bridge service.

API Events List

The core services of the app produce events. Below is a list of services with a description of what each does.

The diagram shows API Services and Controllers that send events.
The diagram shows API Services and Controllers that send events.

API Produced Sample Events

Finance Related Events Below you can find payment processing failed sample events

Health Check Events
Health Check Events
Mailing List Events
Mailing List Events

Event-driven architecture diagram

Scheduler Event Producer

As it was not necessary to re-implement the wheel and create our scheduling service, we relied on the well-tested and proven AWS EventBridge Scheduler for the scheduling system. For this purpose a custom and dedicated Event Bus was created and named Client Production Scheduler Bus.

In this case, the Event Producer is the Scheduler itself.

The diagram shows events that are sent from the first event producer which is the Event Bridge Scheduler received and processed by The Production Event Bus, parsed by AWS Lambda, and at the end sent to a Slack webhook.
The diagram shows events that are sent from the first event producer which is the Event Bridge Scheduler received and processed by The Production Event Bus, parsed by AWS Lambda, and at the end sent to a Slack webhook.

As per the diagram every cron job has the following flow:

  • a scheduler of recurring type that produces an event and sends it to the custom scheduler bus,
  • an endpoint that is defined as part of the api_destination event rule.

Evaluated Jobs

The complete list can be found below.

The diagram shows the list of Scheduled jobs, their endpoints, and json payload event they generate which gets sent to the Event Bus.
The diagram shows the list of Scheduled jobs, their endpoints, and json payload event they generate which gets sent to the Event Bus.

Company Statistic Scheduled Job

The diagram shows events that are produced the Event Bridge Scheduler, received and processed by The Production Event Bus, and forwarded to the target which is unique endpoint via API Destination.
The diagram shows events that are produced the Event Bridge Scheduler, received and processed by The Production Event Bus, and forwarded to the target which is unique endpoint via API Destination.

Event Scheduler Job Notes:

  • Recurring schedule type
  • Cron expression style
  • Runs every 8 hours
  • Target: Scheduler Bus
  • API PutEvents

Event Rule

The bus receives the event and triggers the api cron company statistic rule.

API Destination
API Destination

Event-driven architecture diagram

The Infrastructure

In this section, we will cover how the AWS infrastructure was set up, the services that send events to the default Event Bus, and how we process and consume those events.

The AWS Account

We used AWS Organizations to separate Production and Development environments. This is important as infrastructure-related events are sent to the default event bus. We wanted production and development events not to trigger the same rules as this could lead to unexpected behaviors.

The diagram shows how we separated production and development accounts while managing both with a single management account.
The diagram shows how we separated production and development accounts while managing both with a single management account.

It makes it easier to have two environments not mixing up as we know for a fact that development events will not end up on the production Event Bus causing potential problems.

AWS RDS

The database service’s health and availability are very important for the app’s reliability. Therefore, we have a setup of monitoring database events with Slack notifications.

Every time there is an event such as the database service backing up an event is created and sent to the Event Bus. Such an event will end up as a Slack notification and be read by our team.

The diagram shows events that are sent from the MariaDB service, received and processed by AWS EventBridge, parsed by AWS Lambda, and at the end sent to a Slack webhook.
The diagram shows events that are sent from the MariaDB service, received and processed by AWS EventBridge, parsed by AWS Lambda, and at the end sent to a Slack webhook.

We decided that the following event categories will be forwarded to Slack: Notification, availability, backup, failure, low storage, maintenance and recovery.

The EventBridge Rule

Event-driven architecture diagram

AWS Health

The diagram shows events that are sent from the AWS Health service, received and processed by AWS EventBridge, parsed by AWS Lambda, and at the end sent to a Slack webhook.
The diagram shows events that are sent from the AWS Health service, received and processed by AWS EventBridge, parsed by AWS Lambda, and at the end sent to a Slack webhook.

Events type can be one of the following categories:

  • accountNotification
  • issue
  • scheduledChange

AWS Health events are sent to the default Event Bus. We want to react when we receive an event from the AWS Health service, therefore we create rules. For example, you can use AWS Health to receive email notifications if you have AWS resources in your AWS account scheduled for updates, such as EC2 instances. Below you can find examples of such rules.

EC2 service

Event-driven architecture diagram

Sample rules

Trigger on Every Event

Trigger on Specific Service-related Event
Trigger on Specific Service-related Event

Rule for a specific service and event type category.

In this example, we will create a rule so that EventBridge reacts to the following.

Event-driven architecture diagram

Multiple Services and Event Type Categories

The examples in the previous procedure show you how to create a rule for a single service and event type category. You can also create a rule for multiple services and event-type categories. This means that you don’t have to create a separate rule for each service and category that you want to monitor. To do so, you must edit the event pattern as per following example

Example Rule

Event-driven architecture diagram

Event-driven architecture diagram

Type to search. to navigate. Enter to open. Esc to close.