Blog
Thoughts on engineering, design, and building great products.
EC2: Create Your First Virtual Server and Run a Web Server
Create an EC2 instance, SSH into it, install nginx, and open the web page in a browser. The first article with a billable resource, so also the first with a cleanup section.
VPC and Security Group: Networking and Basic Firewalling on AWS
Understand VPC, public/private subnets, route tables, and Security Groups. Know why your server lets some in and not others, and how to tighten access correctly.
S3: Store Files and Host a Static Website
Create an S3 bucket, upload files, and host a static website on the Internet without any server running continuously. Understand buckets, objects, and managing access.
RDS: Running an AWS-Managed PostgreSQL Database
Create a PostgreSQL database on RDS, put it in a private subnet, connect from EC2, and understand why RDS beats running your own database on EC2. RDS is the easiest service to rack up a bill, so cleanup matters most here.
Dockerizing an Application and Pushing the Image to ECR
Package a Node.js application into a Docker image, create an ECR repository, and push the image to it. This is the foundation for the CI/CD article that follows.
CI/CD with GitHub Actions: Automatically Build and Deploy to AWS
Build a pipeline: every push to GitHub automatically builds a Docker image, pushes it to ECR, and deploys to EC2. Uses OIDC so you don't store an AWS access key in GitHub.
CloudWatch: Monitoring and Viewing Your Application's Logs
Create a CPU alarm that emails you via SNS, and ship container logs to CloudWatch Logs for centralized viewing. Know how the system is running and get alerted when something goes wrong.