The AWS Calendar Server Stack
How we built the Simple Invite Service (SIS) for sending of calendar invites using the AWS Server Less stack
What’s in the AWS calendar server box?
The calendar server for AWS is a SAM template in a private repo we maintain under a commercial license agreement for $2500 a year.
The license includes two VUE.JS applications you can modify for immediate use in production using our workflows attached to the nine different calendar server APIs.
The calendar server stack components include the calendar server APIs, open Lambdas, email notification templates, and proprietary disassembly and reassembly of the calendar invite data for sending, updating, and reporting pipelines on your AWS infrastructure.
The pre-built application, calendarsnack, is a versatile tool that demonstrates the full potential of our SAM template. It can send embedded calendar invites off web pages or uploaded email lists using the 9 APIs.
Support, including a single domain, unlimited organizers, an administration dashboard for all events, and comprehensive domain calendar invite analytics.
In this post, we explore the eight messaging pipelines that simulate the life of the calendar client and how its native CRUD interacts with AWS server less to build a solution for sending calendar invites for hundreds of use cases.
How are the APIs used?
The best way to understand how they are used is by going to get a calendarsnack. You can see them in action here.
An example screen shot here of API number one. Single Event details.
Calendar Invite ETL
We leverage the Create, Read, Update, and Delete (CRUD) functionality of a Google or Microsoft Calendar Client by using AWS server less components in a messaging workflow that simulates the IETF specification for sending and receiving calendar invites of a traditional calendar server, using your AWS SES for final sending.
Anyone with a calendar client can inject the calendar invite data into your AWS account in 2 minutes.
The event promoter can embed that calendar invite into a website or send it to a list of subscribed customers. Those events are tracked and reported on.
Calendar Invite Data is injected into your AWS account using an email box for your Simple Email Service (SES), which you configure with our SAM template.
The AWS messaging components process the calendar invite data. You can add a paywall or registration to the service if you wish. We have done both.
The creation, sending, updating, deleting, and reporting of calendar invites are completed by a blend of message processing using SNS, SQS, SES, Dynamo DB, S3, Lamdas, and an API gateway you access through the APIs we have developed.
As needed, we disassemble and reassemble the calendar invite data from the organizer’s calendar clients.
The calendarsnack application automates sending calendar invites to an email list, upcoming landing pages, or RSVP buttons for email marketing providers inside email templates, with detailed reporting using the calendar server APIS.
The license agreement allows you to modify the workflow of specific generic components to the AWS message pipeline, such as SES configuration, Route 53, Domain Certificate, Host Zones, and Email Notification Templates.
The Calendarsnack VUE.JS application allows modification, including inserting logos, copying the code, and adding components if needed for the front-end application.
How the SAM App is packaged
The YAML template defines the resources and their configurations.
So, we have a Topic, Policy, and Subscription for SNS.
SQS has a Queue and Policy for both the primary and dead letter queue (for failed retries).
For Lambda, we call the server less stack, which references the SAM app that was published through CICD and passes in the Environment Variables - email template (repo file location or locally passed), outgoing SQS queue to send notifications to (which triggers other Lambdas), SES info, etc - that the function will use to process the data sent to the Lambda (which is triggered by a new item in the corresponding SQS).
The API Gateway (Dashboard/UI calls) is also set up with the template, which would create the Domain and Certificate if needed, Route53 HostedZone if needed, RestAPI, Stage, Method (Lambda with desired configuration), Resources, Key, Base Path Mappings, etc.
The Lambda logic is stored in the Event Management or the Dashboard repo and then published through the CICD pipeline.
The stack template is generated in the CICD repo for the respective account/profile (dev, stage, prod, etc.) and then launched into CloudFormation.
Calendar Client CRUD machines
Step Zero—Customers drop the Calendar Invite into your defined SES Mailbox at create@yourdomain.com using their Calendar Client as the CRUD machine.
That calendar invite data is transformed and stored in your AWS account for use in one of the nine APIs.
Those APIs allow you and your customers to create, send, update, and cancel calendar invites using our starter application, which we include to kick-start your journey to using the calendar invite as a commercial tool.
We have a configuration in the SAM template that allows you to insert an SES Mailbox address that you configure in your AWS SES administration panel, stitching your SES account to our AWS SAM stack.
Of course, you can integrate the calendar invite APIs into any workflow you imagine for your business.
Pipeline 1 - Calendar Invite Client CRUD
Step 1A—When a message is published to the SNS topic, SNS sends an SQS message to the subscribed queues of a new calendar invite received in the SES Mailbox.
Pipeline 2- Calendar Invite ETL in AWS
Step 2A - The Lambda receives notification of the new event from SQS, creates a UID for that Calendar Invite in Dynamo DB, disassembles the details of the calendar invitation from the customer calendar client, inserts them into Dynamo DB, and stores them for use later in all our APIs.
Step 2A Lambda is our proprietary workflow that disassembles all inbound Calendar Invites from the SES Email box you set up and prepares them for the Calendar Server API to use for reporting, sending, and updating calendar invite information in the messaging pipeline. There is no direct call to this protected LAMBDA; other APIs use it in the messaging pipeline included in the SAM stack.
Pipeline 3 - Failed Calendar Invite Create in AWS
Suppose the 3A is a FAILED EVENT (the Calendar Invite does not process).
In that case, the SNS topic will send a message to SQS to send the 3B Lambda SES notification to the event organizer using the 3C email notification template, which you can access in the SAM template to brand and change the email template if needed.
API#1 - Single Event Detail Description: The Event Details API retrieves the Calendar event UID details to display in the Calendarsnack interface - Calendar Invite UID, Subject, Time Start, Time End, Location, and Message Body.
Pipeline 4- Calendar Invite in AWS is a successful create
Suppose 4A - is a successful EVENT (the 2A LAMBDA processes the calendar invite data, and a UID is assigned in Dynamo DB with the disassembled calendar invite components is successful).
4A SNS sends an alert to the SQS message of a successful event to the step 4B LAMBDA to send an HTML notification email to the event organizer with the hyperlinks into the dashboard to see the event details such as calendar invite embedding codes for web pages, VIP List sending interface options with reporting for number of calendar invite sends, RSVP’s, and Messaging Updates from the Calendar Clients.
Suppose step 4E reaches the EVENT limit in the SQS/SNS Que. In that case, we pick up the changes, and in 4F, the 4G Lambda sends a notification email to the event organizer using the AWS SES account with a hyperlink to the calendar snack dashboard APIs indicating that the limit has been reached. You can change the sending limits in the SAM template.
API#1 - Single Event Detail - Description: The Event Details API retrieves the Calendar event UID details to display in the Calendarsnack interface. This includes the Calendar Invite UID, Subject, Time Start, Time End, Location, and Message Body.
API #2—Single Event Statistics and Reporting—Description: The Event Statistics API retrieves the total number of invitations and RSVPs received for that UID calendar invite.
Pipeline 5 - Sending Calendar Invites to a single email address in AWS
5A - SNS listens and notifies SQS of the Calendar Invite, send a request to Step 5B Lambda and extracts and transforms the Calendar Client payload for that UID using the processed Calendar Invite data from Step 2A Proprietary Lambda and reassembles that payload using the AWS RAW SES API to build the MIME compliant calendar Invite with the multi-part messaging components stored in the Dynamo DB and then notifies Step 5C SNS queue to notify SQS to send the Calendar Invite via Step 5D Propriety Lambda using your SES account to the email address provided by the interface of the webpage or the TEXT list manager with the email addresses in Dynamo DB.
In Step 5A, we can send a list of email names using an attached TEXT file of email names to an email address, which we include in the SAM template.
API #3 Single Event Calendar Invitation Send -Description: Sends an Invitation to a single email address.
API #2 Single Event Statistics and Reporting—Description: The Event Statistics API retrieves the total number of invitations and RSVPs received for that UID calendar invite.
Pipeline 6 - Gathering RSVP receipts from customers Calendar Clients in AWS
Step 6A -SNS receives a notification that a customer has initiated a Calendar Invite response of Y, N, M to the SES Mailbox marked for return receipt in your SES configuration with our SAM template.
Step 6B -SQS detects that the calendar receipt of Y, N, M is in from SNS and passes it to the Step 6C LAMBDA to validate the correct UID and match it to that record for placement into the Dynamo DB. Step 6D LAMBDA inserts the RSVP data into the Dynamo DB, which sets up API #2's ability to gather Single Event Statistics for Reporting for a client browser interface or attached email report with the data in it when requested.
API #3 Single Event Calendar Invitation Send
API #2 Single Event Statistics and Reporting
Pipeline 7 - Calendar Invite Canceled from Organizer’s Calendar Client to AWS
Step 7A -SNS receives a notification that an Organizer has Canceled the Calendar Invite from the SES mailbox, and SQS relays to kickoff the 7B Lambda to Cancel the Event and send out Calendar Invite Cancels to anyone that has RSVP'd to the Event.
Step 7B—Lambda validates the correct UID match from the Organizer's Calendar Client Cancel Request and matches it to the Dynamo DB UID along with the organizer's Email address to validate whether sending calendar invites cancels will work.
Step 7C -SNS receives a notification from Lambda 7B for validation complete that there are calendar receipts for that Event UID in the DB, and 8C SNS kicks off the message to SQS to proceed forward with the cancel calendar invite send and notifies the Step 8D Lambda.
Step 7D—Lambda searches the DB to find the email addresses for the UIDs in the DB that have responded Y, N, or M from the Calendar Invite they received in the original send on the AWS SES account and gathers the list.
Step 7E - SNS sends a notification to SQS to take the final list of Calendar Invite email addresses for the UID cancel calendar invite message and fire up the 8F Lambda.
Step 7F—Lambda executes sending the final list of Calendar Invite email addresses for the UID cancel calendar invite message, assembling the updated calendar invite components, and sending the calendar invite using the AWS RAW SES API.
Pipeline 8 -Calendar Invite Update to from Organizer’s Calendar Client to AWS
Step 8A -SNS receives a notification that an Organizer has Updated the Calendar Invite from the SES mailbox and SQS relays to kickoff the 8B Lambda to Update the Event and send out Calendar Invite Updates to anyone that has RSVP'd to the Event.
Step 8B—Lambda validates the correct UID match from the Organizer's Calendar Client Update Request and matches it to the Dynamo DB UID along with the Organizer's Email address to validate whether sending calendar invite updates will work.
Step 8C -SNS receives a notification from Lambda 8B for validation complete that there are calendar receipts for that Event UID in the DB, and 8C SNS kicks off the message to SQS to proceed forward with the update calendar invite send and notifies the Step 8D Lambda.
Step 8D—Lambda searches the DB to find the email addresses for the UIDs in the DB that have responded Y, N, or M from the Calendar Invite they received in the original send on the AWS SES account and gathers the list.
Step 8E—SNS sends a notification to SQS to take the final list of Calendar Invite email addresses for the UID updated calendar invite message and fire up the 8F Lambda.
Step 8F—Lambda executes sending the final list of Calendar Invite email addresses for the UID updated calendar invite message, assembling the updated calendar invite components, and sending the calendar invite using the AWS RAW SES API.
Any Questions. Reach out to me at greghanchin@31events.com.