https://github.com/eddmann/step-function-secret-santa
Uses an AWS Step Function workflow and every Lambda runtime to allocate Secret Santa's
https://github.com/eddmann/step-function-secret-santa
custom-runtime lambda step-function
Last synced: 2 months ago
JSON representation
Uses an AWS Step Function workflow and every Lambda runtime to allocate Secret Santa's
- Host: GitHub
- URL: https://github.com/eddmann/step-function-secret-santa
- Owner: eddmann
- Created: 2022-10-25T17:26:05.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-10-31T19:20:10.000Z (over 2 years ago)
- Last Synced: 2025-01-23T03:26:44.564Z (4 months ago)
- Topics: custom-runtime, lambda, step-function
- Language: Java
- Homepage: https://eddmann.com/posts/allocating-secret-santas-using-an-aws-step-function-workflow-and-every-available-lambda-runtime/
- Size: 49.8 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Step Function Secret Santa
This year (2022) I decided to over-engineer the problem of allocating Secret Santa's for my family, by building a AWS Step Function workflow which uses **every** available [Lambda runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) (managed and custom runtime).
For the custom runtime `provided.al2` I explored the ability of using [my own language](https://github.com/eddmann/santa-lang-ts) which I have been developing throughout the year.
## Getting Started
```
make package
make deploy AWS_ACCESS_KEY_ID=ID AWS_SECRET_ACCESS_KEY=KEY
```## The Workflow
| Function | Purpose | Language |
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| [Parse Participants](./src/parse-participants/) | Converts the CSV input supplied by the clients API Gateway request into a JSON form used throughout the workflow. | C# `dotnet6` |
| [Validate Participants](./src/validate-participants/) | Ensures that all supplied participant data is present and valid. | JavaScript `nodejs16.x` |
| [Allocate](./src/allocate/) | Allocates each participant to a random recipient. | [santa-lang](https://github.com/eddmann/santa-lang-ts/tree/main/src/lambda) `provided.al2` |
| [Validate Allocations](./src/validate-allocations/) | Ensures that the supplied allocations are valid, taking into consideration participant exclusions. | Java `java11` |
| [Store Allocations](./src/store-allocations/) | Stores the allocations within an plain-text file S3 object for review. | Go `go1.x` |
| [Notify Email](./src/notify-email/) | Sends an email (via Mailgun) to the given participant with their allocated recipient name in. | Python `python3.9` |
| [Notify SMS](./src/notify-sms/) | Sends an SMS (via Twilio) to the given participant with their allocated recipient name in. | Ruby `ruby2.7` |## Other Years
Interested in seeing how I over-engineered the problem of allocating Secret Santa's in other years?
- 2020 - [Clojure Secret Santa](https://github.com/eddmann/clojure-secret-santa)
- 2021 - [Pico Secret Santa](https://github.com/eddmann/pico-secret-santa)
- 2022 - [Step Function Secret Santa](https://github.com/eddmann/step-function-secret-santa)