A scalable, cloud-based Job Application Portal deployed on AWS using Infrastructure as Code (IaC) principles. This project demonstrates the implementation of a multi-tier architecture using Terraform, CloudFormation, and Python Boto3.
- Networking: VPC with public and private subnets across availability zones
- Compute: EC2 instances behind an Application Load Balancer with Auto Scaling
- Database: Amazon RDS (MySQL) in private subnet
- Storage: S3 bucket for resumes, company logos, and static assets
- Serverless: Lambda function triggered by S3 uploads, logging to CloudWatch
- Security: Security groups with least-privilege access controls
aws-job-portal-infrastructure/
├── terraform/ # Terraform IaC scripts
│ ├── main.tf # Main Terraform configuration
│ ├── variables.tf # Variable definitions
│ ├── outputs.tf # Output definitions
│ ├── terraform.tfvars # Variable values (DO NOT COMMIT)
│ └── modules/
│ ├── vpc/ # VPC module
│ └── security-groups/ # Security groups module
├── cloudformation/ # CloudFormation templates
│ ├── ec2-stack.yaml # EC2 and ALB resources
│ ├── rds-stack.yaml # RDS database resources
│ └── lambda-stack.yaml # Lambda function resources
├── lambda/ # Lambda function code
│ └── s3_upload_logger.py # S3 event logging function
├── boto3-scripts/ # Python Boto3 scripts
│ ├── s3_operations.py # S3 bucket and upload operations
│ ├── ec2_operations.py # EC2 metadata and listing
│ └── lambda_operations.py # Lambda invocation
├── web-app/ # Web application code
│ ├── app.py # Flask application
│ ├── templates/ # HTML templates
│ └── static/ # CSS, JS, images
├── docs/ # Documentation
│ ├── architecture/ # Architecture diagrams
│ └── screenshots/ # Deployment screenshots
├── scripts/ # Utility scripts
│ └── deploy.sh # Deployment automation
├── .gitignore # Git ignore rules
└── README.md # This file
- AWS Account with appropriate permissions
- AWS CLI configured with credentials
- Terraform >= 1.0.0
- Python >= 3.9
- Git
git clone https://github.com/YOUR_USERNAME/aws-job-portal-infrastructure.git
cd aws-job-portal-infrastructureaws configure
# Enter your AWS Access Key ID
# Enter your AWS Secret Access Key
# Enter default region (e.g., us-east-1)
# Enter output format (json)cd terraform
terraform init
terraform plan
terraform apply# Deploy EC2 Stack
aws cloudformation create-stack --stack-name job-portal-ec2 \
--template-body file://cloudformation/ec2-stack.yaml \
--capabilities CAPABILITY_IAM
# Deploy RDS Stack
aws cloudformation create-stack --stack-name job-portal-rds \
--template-body file://cloudformation/rds-stack.yaml
# Deploy Lambda Stack
aws cloudformation create-stack --stack-name job-portal-lambda \
--template-body file://cloudformation/lambda-stack.yaml \
--capabilities CAPABILITY_IAMcd boto3-scripts
pip install boto3
python s3_operations.py
python ec2_operations.py
python lambda_operations.py| Service | Purpose |
|---|---|
| VPC | Network isolation with public/private subnets |
| EC2 | Web application hosting |
| ALB | Load balancing and traffic distribution |
| Auto Scaling | Dynamic scaling based on demand |
| RDS (MySQL) | Relational database for job data |
| S3 | Object storage for files |
| Lambda | Serverless compute for S3 event logging |
| CloudWatch | Monitoring and logging |
| IAM | Access management |
This project demonstrates three methods of AWS interaction:
- AWS Management Console - Visual verification of deployments
- AWS CLI - Command-line resource management
- Python Boto3 - Programmatic AWS operations
# Upload a test file to S3
aws s3 cp test-resume.pdf s3://job-portal-bucket/resumes/
# Check CloudWatch Logs
aws logs tail /aws/lambda/s3-upload-logger --follow# Get ALB DNS name
aws elbv2 describe-load-balancers --query 'LoadBalancers[0].DNSName'
# Access the application via browser- RDS instance placed in private subnet (no public access)
- Security groups follow least-privilege principle
- S3 bucket has appropriate access policies
- Sensitive data stored in AWS Secrets Manager
- IAM roles with minimal required permissions
- Implement CI/CD pipeline with GitHub Actions
- Add API Gateway for RESTful API
- Implement Step Functions for workflow automation
- Add CloudFront CDN for static assets
- Implement multi-region disaster recovery
Your Name
- Course: Cloud Computing
- Institution: UMBC
- Date: December 2025
This project is for educational purposes as part of a cloud computing course.
