A serverless AI-powered resume analyzer built on AWS, with a full 3-stage CI/CD pipeline using GitHub Actions, Docker, and Amazon ECR.
Every push to main automatically runs tests, builds a Docker container, pushes it to ECR, and deploys it to AWS Lambda.
Paste your resume and a job description. The app uses Amazon Bedrock (Claude) to return:
- Match score (0-100)
- Strengths
- Skill gaps
- Improvement suggestions
- Verdict (Strong Match, Good Match, Partial Match, or Not a Match)
Live demo: irbcho.github.io/AI-Resume-Analyzer
GitHub Push
|
v
GitHub Actions CI/CD Pipeline
|
|-- Job 1: Run Tests (pytest)
|
|-- Job 2: Build Docker Image --> Push to Amazon ECR
|
|-- Job 3: Deploy Container Image --> AWS Lambda
|
API Gateway
|
Amazon Bedrock (Claude)
| Layer | Technology |
|---|---|
| AI / LLM | Amazon Bedrock (Claude Sonnet) |
| Compute | AWS Lambda (Container Image) |
| Container Registry | Amazon ECR |
| API | Amazon API Gateway |
| CI/CD | GitHub Actions |
| Containerization | Docker |
| Testing | pytest |
| IaC | AWS IAM, ECR, Lambda via CLI |
The pipeline has 3 jobs that run in sequence on every push to main.
Installs dependencies and runs 5 unit tests using pytest. If any test fails, the pipeline stops and nothing gets deployed.
Tests cover:
- CORS preflight (OPTIONS) request handling
- Missing resume input validation
- Missing job description input validation
- Invalid JSON body handling
- Full valid request with mocked Bedrock response
Builds a Docker image using the AWS Lambda Python 3.12 base image, tags it with the Git commit SHA for traceability, and pushes it to Amazon ECR. Also tags the image as latest.
Updates the Lambda function to run the new container image from ECR, waits for the update to complete, and verifies the deployment.
AI-Resume-Analyzer/
├── .github/
│ └── workflows/
│ └── deploy.yml # CI/CD pipeline definition
├── tests/
│ └── test_lambda.py # Unit tests
├── Dockerfile # Container image definition
├── lambda_function.py # Lambda handler
├── requirements.txt # Python dependencies
├── index.html # Frontend
└── README.md
- AWS account
- GitHub repository
- Docker installed locally
- AWS CLI configured
Go to AWS Console → ECR → Create repository.
Set the name to resume-analyzer and leave all other settings as default.
Copy the repository URI. You will need it in Step 4.
Go to AWS Console → IAM → Users → Create user.
Name it GitHubActionsDeployer and attach these policies:
AmazonEC2ContainerRegistryPowerUserAWSLambda_FullAccess
Generate an access key and copy the Access Key ID and Secret Access Key.
Go to your GitHub repository → Settings → Secrets and variables → Actions → New repository secret.
Add these two secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
Go to AWS Console → Lambda → Create function → Container image.
Set the function name to ResumeAnalyzer and browse ECR to select your resume-analyzer repository. After creating, go to Configuration → Permissions and attach an IAM role with Bedrock access.
git add .
git commit -m "Initial CI/CD pipeline setup"
git push origin mainGo to the Actions tab and watch all 3 jobs turn green.
- How to containerize a Lambda function using Docker and the AWS Lambda Python base image
- How to push container images to Amazon ECR using GitHub Actions
- How to write unit tests with pytest and mock AWS SDK calls
- How to structure a multi-job CI/CD pipeline where each stage depends on the previous one
- How to manage IAM permissions for automated deployments
- The difference between Lambda Zip deployment and Container Image deployment



