A company needs to provision a secure and scalable AWS environment for public-facing workloads. The goal is to automate the creation of a network and compute resources using Terraform, following best practices and clear requirements.
Architecture Overview
The solution provisions the following AWS resources:
- Custom VPC with a defined CIDR block
- Public Subnet associated with the VPC
- Internet Gateway attached to the VPC for outbound/inbound internet access
- Route Table with a route to the Internet Gateway, associated with the public subnet
- Security Group allowing inbound SSH (port 22) and all outbound traffic
- EC2 Instance (t2.micro) launched in the public subnet
- S3 Bucket (to be created manually) for storing the Terraform backend state
Below is the architecture diagram for reference:

Definition of Done (DoD)
This solution fulfills the following requirements:
- A custom VPC is created with its own CIDR block.
- At least one public subnet is defined and associated with the VPC.
- A public route table is configured with a route to the Internet Gateway.
- An Internet Gateway is implemented and attached to the VPC.
- A Security Group is created to allow SSH traffic (port 22).
- An EC2 instance (t2.micro) is launched in the public subnet.
- An existing SSH key can be used for access, or it is documented if omitted for simplicity.
Prerequisites
- Terraform installed
- AWS CLI configured
- LocalStack for local AWS emulation
Quick Start
- Start LocalStack:
localstack start -d
- Set environment variables:
export AWS_ENDPOINT_URL=http://localhost:4566 export AWS_ENDPOINT_URL_S3=http://s3.localhost.localstack.cloud:4566 export AWS_ACCESS_KEY_ID=test export AWS_SECRET_ACCESS_KEY=test export AWS_DEFAULT_REGION=us-east-1
- Initialize Terraform:
terraform init
- Apply the configuration:
terraform apply
Note: Manually create the S3 bucket for the Terraform backend before running
terraform apply
.