Pictured: Someone who would get use out of the app.
Technologies used: AWS, Lambda, Step Functions, API Gateway, S3, SNS & SES.
What Is This?:
A small app for pets to both you for cuddles that will send an alert to a phone and an email address. Both points of contact must be opted into first.
Stage 1
- I register 4 objects - Two email addresses (sending messages, receiving messages) and 2 phone numbers (one to receive SMS [text messages], and an origination number.
Stage 2
- I used CloudFormation (again, our old friend) to create an IAM role that email_reminder_lambda uses to interact with other AWS services. Really beats searching through the policies!
- In the Lambda console, I create a function that uses Python 3.9 rundown and use the LambdaRole created via CloudFormation. There are multiple entries called some variation of LambdaRole, so look for the one with SES/SNS and CloudWatch roles.
- The function in question needs the email address added, so it goes from
FROM_EMAIL_ADDRESS = 'REPLACE_ME
To
FROM_EMAIL_ADDRESS = 'morganlucas@runtcpip.com
Stage 3
-
Making and configuring the state machine through a CloudFormation stack yet again. It has the ability to invoke the email lambda function to send emails, logging permissions and SNS sending abilities.
-
The State machine will be written in Amazon States Language, which looks like JSON to me.
-
Here is the workflow and my interpretation; The actual workthrough is in the instructions.
Start: The function exists
Timer I’m not sure of yet
ChoiceState is obvious with 4 choices - Email only SMS only, Both, or neither. When one of the message options are chosen, it moves on to pushing the message and ends. NoChoice ends the function.
- The ARN created in Step 2 is put into
EMAIL_LAMBDA_ARN
- Logging is enabled for all events
- The State Machine is created and given an ARN.
Stage 4
- This creates the API gateway and Lambda function to act as the front end for the application.
- I make yet another function in the Lambda console using Python 3.9 as the runtime that supports the API Gateway, which is created now, alongside the API Gateway, API, and Method.
- The API has the Regional Endpoint and is deployed in the current region.
- For more control over the information, I don’t click
Configure as proxy resource
Enable API Gateway CORS
eases restrictions on things calling our APIs with different DNS names.- The resource (petcuddleotron) is given the POST method to work with api_lambda.
- Lambda Proxy Integration is checked.
- The API is deployed and I get an invoke URL.
Stage 5
- Creating an S3 bucket to hold the visuals of the webpage that allows public access.
- Static hosting is placed upon the bucket , and I note how straightforward it is on AWS. I’m given a bucket website endpoint.
- The files are uploaded to the Objects portion of the bucket. Note that I had to click and drag the files for the webpage to appear; Uploading the entire folder did not work, nor did using the upload dialog.
- Testing the app with information; I use my receiving email set up in Step 1 (It’s not this);
My dog is very enthusiastic about chicken.
- In Step Functions, under the petcuddleotron app and Executions, I can see it running!
It did fail; It doesn’t seem to like my email address, despite it being the confirmed one. Every failure involves my email being involved.
When I hit SMS only, it does succeed, but I don’t receive the message until I put the 1 in front of my phone number; I had forgotten.
And now my dog can bother me for attention (If she knew how to use technology);
Comments
Post a Comment