Skip to content
This repository has been archived by the owner on Apr 17, 2023. It is now read-only.

speakforme/infrastructure

Repository files navigation

infrastructure

Infrastructure Components for Speakforme campaign.

Writing our Infrastructure as Code allows us to make easier changes, rollback if needed, and most importantly - allow everyone to contribute to the infrastructure.

Directory Structure

infrastructure/
├── api.tf
├── data.tf (IAM Policies)
├── dns.tf (DNS Records)
├── dynamodb.tf (DynamoDB Tables)
├── iam.tf (IAM policies and role attachment)
├── lambda (Lambda code)
│   ├── email-receipt
│   └── unsubscribe
├── lambda.tf (Create lambda on AWS)
├── output.tf (Output variables)
├── permissions.tf (AWS Lambda Permissions)
├── policies.tf (IAM policy and documents)
├── provider.tf (Terraform providers)
├── README.md
├── s3.tf (S3 Bucket)
└── ses.tf (SES configuration)

How does it work?

We run entirely off Terraform, AWS (SES+Lambda+DynamoDB).

The website part of it is at speakforme/website. We mark ourselves in the bcc ([email protected]). This is caught by SES, which triggers a Lambda job.

The Lambda job:

  • Generates a UUID.
  • Saves the from email in dynamoDB against the UUID.
  • Sends an acknowledgement email with a unsubscription link that has the UUID.
  • Bumps counters in another table for every email marked on the email

Here's a graph:

The unsubscription link triggers another Lambda job which:

  • Deletes the email entry from the DynamoDB using the UUID.

About

Infrastructure as Code for the SpeakForMe project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •