{"id":33559531,"url":"https://github.com/mohamedel-sayed28/aws-multitier-webapp","last_synced_at":"2026-04-09T16:02:41.987Z","repository":{"id":325654183,"uuid":"1101953664","full_name":"MohamedEl-Sayed28/aws-multitier-webapp","owner":"MohamedEl-Sayed28","description":"Production-ready multi-tier web application on AWS with Auto Scaling, Load Balancer, Route 53, and comprehensive documentation","archived":false,"fork":false,"pushed_at":"2025-11-22T15:05:59.000Z","size":248,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-22T16:29:22.119Z","etag":null,"topics":["auto-scaling","aws","cloud-computing","devops","docker","ec2-instance","kubernetes","load-balancer","route53","terraform"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MohamedEl-Sayed28.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-22T14:49:45.000Z","updated_at":"2025-11-22T15:15:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/MohamedEl-Sayed28/aws-multitier-webapp","commit_stats":null,"previous_names":["mohamedel-sayed28/aws-multitier-webapp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/MohamedEl-Sayed28/aws-multitier-webapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedEl-Sayed28%2Faws-multitier-webapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedEl-Sayed28%2Faws-multitier-webapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedEl-Sayed28%2Faws-multitier-webapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedEl-Sayed28%2Faws-multitier-webapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MohamedEl-Sayed28","download_url":"https://codeload.github.com/MohamedEl-Sayed28/aws-multitier-webapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohamedEl-Sayed28%2Faws-multitier-webapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27283994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-26T02:00:06.075Z","response_time":193,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-scaling","aws","cloud-computing","devops","docker","ec2-instance","kubernetes","load-balancer","route53","terraform"],"created_at":"2025-11-27T22:01:15.123Z","updated_at":"2025-11-27T22:02:11.484Z","avatar_url":"https://github.com/MohamedEl-Sayed28.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AWS Multi-Tier Web Application Stack\n\nA production-ready, highly available multi-tier web application deployed on AWS cloud infrastructure. This project demonstrates the migration and modernization of a legacy on-premises application (vProfile) to a scalable, cloud-native architecture.\n\n[![AWS](https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge\u0026logo=amazon-aws\u0026logoColor=white)](https://aws.amazon.com/)\n[![Apache Tomcat](https://img.shields.io/badge/apache%20tomcat-%23F8DC75.svg?style=for-the-badge\u0026logo=apache-tomcat\u0026logoColor=black)](https://tomcat.apache.org/)\n[![MySQL](https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)](https://www.mysql.com/)\n[![RabbitMQ](https://img.shields.io/badge/Rabbitmq-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white)](https://www.rabbitmq.com/)\n\n## 🏗️ Architecture Overview\n\nThis project implements a three-tier architecture on AWS with automated scaling, load balancing, and secure network configuration.\n\n### Architecture Diagram\n\n![AWS Architecture](aws_architecture.png)\n```\n[Users] → [GoDaddy DNS] → [Route 53] → [Application Load Balancer] → [Auto Scaling Group - Tomcat Servers] → [Backend Services]\n                                              ↓                              ↓                                    ↓\n                                            [ACM]                      [Security Groups]                   [MySQL, RabbitMQ, Memcached]\n```\n\n## 🚀 Features\n\n- **High Availability**: Application Load Balancer distributes traffic across multiple availability zones\n- **Auto Scaling**: Dynamic capacity adjustment based on demand\n- **Secure Communication**: HTTPS encryption with AWS Certificate Manager\n- **Service Discovery**: Private DNS using Route 53 for backend service resolution\n- **Network Isolation**: Multi-layered security groups for defense in depth\n- **Artifact Management**: S3-based storage with Maven build automation\n\n## 🛠️ Technology Stack\n\n### AWS Services\n- **EC2**: Compute instances for application and backend services\n- **Application Load Balancer (ALB)**: Traffic distribution and SSL termination\n- **Auto Scaling Groups**: Automated capacity management\n- **Route 53**: Private DNS zones for internal service discovery\n- **VPC**: Network isolation and security\n- **S3**: Artifact storage\n- **IAM**: Access management and permissions\n- **ACM**: SSL/TLS certificate management\n- **EBS**: Persistent block storage\n\n### Application Stack\n- **Apache Tomcat**: Application server (Java web application)\n- **MySQL**: Relational database\n- **RabbitMQ**: Message broker\n- **Memcached**: Distributed caching system\n- **Maven**: Build automation and dependency management\n\n## 🔒 Security Architecture\n\n### Security Groups Configuration\n\n1. **Load Balancer Security Group**\n   - Inbound: HTTPS (443) from internet (0.0.0.0/0)\n   - Outbound: Port 8080 to Tomcat instances\n\n2. **Application Tier Security Group**\n   - Inbound: Port 8080 from Load Balancer security group only\n   - Outbound: Access to backend services security group\n\n3. **Backend Services Security Group**\n   - Inbound: \n     - MySQL (3306) from Application tier\n     - RabbitMQ (5672, 15672) from Application tier\n     - Memcached (11211) from Application tier\n   - Outbound: All traffic allowed\n\n## 📊 Traffic Flow\n\n1. Users access application via custom domain registered in GoDaddy DNS\n2. DNS resolves to AWS Route 53 hosted zone\n3. Route 53 directs traffic to Application Load Balancer endpoint\n4. ALB terminates SSL using ACM certificate\n5. ALB distributes requests to healthy Tomcat instances (port 8080)\n6. Auto Scaling Group maintains desired capacity based on CloudWatch metrics\n7. Tomcat instances query Route 53 private DNS for backend service endpoints\n8. Application communicates with MySQL, RabbitMQ, and Memcached using private IPs\n\n## 🎯 Project Objectives\n\nThis project was undertaken to:\n- Migrate a legacy on-premises application to cloud infrastructure\n- Implement modern DevOps practices and cloud-native architecture\n- Achieve cost optimization through auto-scaling\n- Improve application availability and fault tolerance\n- Enhance security with AWS best practices\n\n## 💡 Key Learnings\n\n- AWS networking and VPC configuration\n- Load balancing strategies and SSL/TLS management\n- Auto Scaling policies and CloudWatch metrics\n- Service discovery patterns with Route 53\n- Security group design and network isolation\n- Infrastructure automation and deployment strategies\n\n## 📋 Prerequisites\n\nBefore you begin, ensure you have:\n\n- AWS Account with appropriate permissions\n- AWS CLI installed and configured, or you could do it using AWS console\n- Domain name (can use GoDaddy, Route 53, or any registrar)\n- Maven installed (version 3.6+)\n- Java JDK 11 or higher\n- SSH key pair for EC2 access\n- Basic knowledge of AWS services and Linux commands\n\n## 📝 Setup Instructions\n\n### Step 1: VPC and Network Configuration\n```bash\n# Create VPC\naws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=vprofile-vpc}]'\n\n# Create Public Subnets (for ALB)\naws ec2 create-subnet --vpc-id \u003cvpc-id\u003e --cidr-block 10.0.1.0/24 --availability-zone us-east-1a\naws ec2 create-subnet --vpc-id \u003cvpc-id\u003e --cidr-block 10.0.2.0/24 --availability-zone us-east-1b\n\n# Create Private Subnets (for App and Backend)\naws ec2 create-subnet --vpc-id \u003cvpc-id\u003e --cidr-block 10.0.3.0/24 --availability-zone us-east-1a\naws ec2 create-subnet --vpc-id \u003cvpc-id\u003e --cidr-block 10.0.4.0/24 --availability-zone us-east-1b\n\n# Create and attach Internet Gateway\naws ec2 create-internet-gateway\naws ec2 attach-internet-gateway --vpc-id \u003cvpc-id\u003e --internet-gateway-id \u003cigw-id\u003e\n\n# Create NAT Gateway for private subnets\naws ec2 allocate-address --domain vpc\naws ec2 create-nat-gateway --subnet-id \u003cpublic-subnet-id\u003e --allocation-id \u003ceip-allocation-id\u003e\n```\n\n### Step 2: Security Groups Creation\n```bash\n# Create ALB Security Group\naws ec2 create-security-group --group-name vprofile-alb-sg \\\n  --description \"Security group for Application Load Balancer\" \\\n  --vpc-id \u003cvpc-id\u003e\n\n# Allow HTTPS inbound\naws ec2 authorize-security-group-ingress --group-id \u003calb-sg-id\u003e \\\n  --protocol tcp --port 443 --cidr 0.0.0.0/0\n\n# Create Application Tier Security Group\naws ec2 create-security-group --group-name vprofile-app-sg \\\n  --description \"Security group for Tomcat instances\" \\\n  --vpc-id \u003cvpc-id\u003e\n\n# Allow port 8080 from ALB only\naws ec2 authorize-security-group-ingress --group-id \u003capp-sg-id\u003e \\\n  --protocol tcp --port 8080 --source-group \u003calb-sg-id\u003e\n\n# Create Backend Security Group\naws ec2 create-security-group --group-name vprofile-backend-sg \\\n  --description \"Security group for backend services\" \\\n  --vpc-id \u003cvpc-id\u003e\n\n# Allow MySQL, RabbitMQ, Memcached from App tier\naws ec2 authorize-security-group-ingress --group-id \u003cbackend-sg-id\u003e \\\n  --protocol tcp --port 3306 --source-group \u003capp-sg-id\u003e\naws ec2 authorize-security-group-ingress --group-id \u003cbackend-sg-id\u003e \\\n  --protocol tcp --port 5672 --source-group \u003capp-sg-id\u003e\naws ec2 authorize-security-group-ingress --group-id \u003cbackend-sg-id\u003e \\\n  --protocol tcp --port 11211 --source-group \u003capp-sg-id\u003e\n```\n\n### Step 3: Backend Services Setup\n```bash\n# Launch MySQL Instance\naws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 \\\n  --instance-type t2.micro --key-name \u003cyour-key-pair\u003e \\\n  --security-group-ids \u003cbackend-sg-id\u003e --subnet-id \u003cprivate-subnet-id\u003e \\\n  --user-data file://mysql-setup.sh \\\n  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=vprofile-mysql}]'\n\n# Launch RabbitMQ Instance\naws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 \\\n  --instance-type t2.small --key-name \u003cyour-key-pair\u003e \\\n  --security-group-ids \u003cbackend-sg-id\u003e --subnet-id \u003cprivate-subnet-id\u003e \\\n  --user-data file://rabbitmq-setup.sh \\\n  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=vprofile-rabbitmq}]'\n\n# Launch Memcached Instance\naws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 \\\n  --instance-type t2.micro --key-name \u003cyour-key-pair\u003e \\\n  --security-group-ids \u003cbackend-sg-id\u003e --subnet-id \u003cprivate-subnet-id\u003e \\\n  --user-data file://memcached-setup.sh \\\n  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=vprofile-memcached}]'\n```\n\n### Step 4: Route 53 Private DNS Setup\n```bash\n# Create Private Hosted Zone\naws route53 create-hosted-zone --name vprofile.internal \\\n  --vpc VPCRegion=us-east-1,VPCId=\u003cvpc-id\u003e \\\n  --caller-reference $(date +%s)\n\n# Create DNS records for backend services\n# Create a JSON file: dns-records.json\ncat \u003e dns-records.json \u003c\u003c EOF\n{\n  \"Changes\": [\n    {\n      \"Action\": \"CREATE\",\n      \"ResourceRecordSet\": {\n        \"Name\": \"db01.vprofile.internal\",\n        \"Type\": \"A\",\n        \"TTL\": 300,\n        \"ResourceRecords\": [{\"Value\": \"\u003cmysql-private-ip\u003e\"}]\n      }\n    },\n    {\n      \"Action\": \"CREATE\",\n      \"ResourceRecordSet\": {\n        \"Name\": \"rmq01.vprofile.internal\",\n        \"Type\": \"A\",\n        \"TTL\": 300,\n        \"ResourceRecords\": [{\"Value\": \"\u003crabbitmq-private-ip\u003e\"}]\n      }\n    },\n    {\n      \"Action\": \"CREATE\",\n      \"ResourceRecordSet\": {\n        \"Name\": \"mc01.vprofile.internal\",\n        \"Type\": \"A\",\n        \"TTL\": 300,\n        \"ResourceRecords\": [{\"Value\": \"\u003cmemcached-private-ip\u003e\"}]\n      }\n    }\n  ]\n}\nEOF\n\n# Apply DNS changes\naws route53 change-resource-record-sets --hosted-zone-id \u003czone-id\u003e \\\n  --change-batch file://dns-records.json\n```\n\n### Step 5: Build and Upload Application Artifact\n```bash\n# Clone your application repository\ngit clone \u003cyour-vprofile-repo\u003e\ncd vprofile-project\n\n# Build with Maven\nmvn clean install\n\n# Create S3 bucket for artifacts\naws s3 mb s3://vprofile-artifacts-$(date +%s)\n\n# Upload artifact to S3\naws s3 cp target/vprofile-v2.war s3://\u003cyour-bucket-name\u003e/\n```\n\n### Step 6: Create Launch Template for Tomcat\n```bash\n# Create a user data script: tomcat-userdata.sh\ncat \u003e tomcat-userdata.sh \u003c\u003c 'EOF'\n#!/bin/bash\nyum update -y\nyum install -y java-11-openjdk tomcat wget\n\n# Download application from S3\naws s3 cp s3://\u003cyour-bucket-name\u003e/vprofile-v2.war /usr/share/tomcat/webapps/\n\n# Update application.properties with Route53 DNS names\ncat \u003e /usr/share/tomcat/webapps/application.properties \u003c\u003c PROPS\njdbc.url=jdbc:mysql://db01.vprofile.internal:3306/accounts\nrabbitmq.address=rmq01.vprofile.internal\nmemcached.address=mc01.vprofile.internal\nPROPS\n\n# Start Tomcat\nsystemctl start tomcat\nsystemctl enable tomcat\nEOF\n\n# Create Launch Template\naws ec2 create-launch-template --launch-template-name vprofile-tomcat-lt \\\n  --version-description \"Tomcat v1\" \\\n  --launch-template-data '{\n    \"ImageId\": \"ami-0c55b159cbfafe1f0\",\n    \"InstanceType\": \"t2.micro\",\n    \"KeyName\": \"\u003cyour-key-pair\u003e\",\n    \"SecurityGroupIds\": [\"\u003capp-sg-id\u003e\"],\n    \"UserData\": \"'$(base64 -w0 tomcat-userdata.sh)'\",\n    \"IamInstanceProfile\": {\"Name\": \"\u003cec2-s3-access-role\u003e\"}\n  }'\n```\n\n### Step 7: Create Application Load Balancer\n```bash\n# Create Target Group\naws elbv2 create-target-group --name vprofile-tg \\\n  --protocol HTTP --port 8080 --vpc-id \u003cvpc-id\u003e \\\n  --health-check-path /login --health-check-interval-seconds 30\n\n# Request SSL Certificate from ACM\naws acm request-certificate --domain-name \u003cyourdomain.com\u003e \\\n  --validation-method DNS\n\n# Create Application Load Balancer\naws elbv2 create-load-balancer --name vprofile-alb \\\n  --subnets \u003cpublic-subnet-1-id\u003e \u003cpublic-subnet-2-id\u003e \\\n  --security-groups \u003calb-sg-id\u003e --scheme internet-facing\n\n# Create HTTPS Listener\naws elbv2 create-listener --load-balancer-arn \u003calb-arn\u003e \\\n  --protocol HTTPS --port 443 \\\n  --certificates CertificateArn=\u003cacm-certificate-arn\u003e \\\n  --default-actions Type=forward,TargetGroupArn=\u003ctarget-group-arn\u003e\n```\n\n### Step 8: Create Auto Scaling Group\n```bash\n# Create Auto Scaling Group\naws autoscaling create-auto-scaling-group \\\n  --auto-scaling-group-name vprofile-asg \\\n  --launch-template LaunchTemplateName=vprofile-tomcat-lt \\\n  --min-size 2 --max-size 4 --desired-capacity 2 \\\n  --target-group-arns \u003ctarget-group-arn\u003e \\\n  --vpc-zone-identifier \"\u003cprivate-subnet-1-id\u003e,\u003cprivate-subnet-2-id\u003e\" \\\n  --health-check-type ELB --health-check-grace-period 300\n\n# Create Scaling Policies\naws autoscaling put-scaling-policy \\\n  --auto-scaling-group-name vprofile-asg \\\n  --policy-name scale-up --scaling-adjustment 1 \\\n  --adjustment-type ChangeInCapacity\n\naws autoscaling put-scaling-policy \\\n  --auto-scaling-group-name vprofile-asg \\\n  --policy-name scale-down --scaling-adjustment -1 \\\n  --adjustment-type ChangeInCapacity\n```\n\n### Step 9: Configure DNS in GoDaddy/Route53\n```bash\n# Get ALB DNS name\naws elbv2 describe-load-balancers --names vprofile-alb \\\n  --query 'LoadBalancers[0].DNSName' --output text\n\n# Create CNAME record in your DNS provider pointing to ALB DNS name\n# Example: www.yourdomain.com -\u003e vprofile-alb-xxxxxxxxx.us-east-1.elb.amazonaws.com\n```\n\n### Step 10: Verify Deployment\n```bash\n# Check Auto Scaling Group instances\naws autoscaling describe-auto-scaling-groups \\\n  --auto-scaling-group-names vprofile-asg\n\n# Check Target Group health\naws elbv2 describe-target-health --target-group-arn \u003ctarget-group-arn\u003e\n\n# Access your application\ncurl -I https://www.yourdomain.com\n```\n\n### Optional: CloudWatch Alarms Setup\n```bash\n# Create CloudWatch alarm for high CPU\naws cloudwatch put-metric-alarm --alarm-name vprofile-high-cpu \\\n  --alarm-description \"Alarm when CPU exceeds 70%\" \\\n  --metric-name CPUUtilization --namespace AWS/EC2 \\\n  --statistic Average --period 300 --threshold 70 \\\n  --comparison-operator GreaterThanThreshold \\\n  --evaluation-periods 2\n\n# Create alarm for low CPU\naws cloudwatch put-metric-alarm --alarm-name vprofile-low-cpu \\\n  --alarm-description \"Alarm when CPU below 30%\" \\\n  --metric-name CPUUtilization --namespace AWS/EC2 \\\n  --statistic Average --period 300 --threshold 30 \\\n  --comparison-operator LessThanThreshold \\\n  --evaluation-periods 2\n```\n\n## 🔧 Configuration Files\n\nKey configuration files needed:\n\n- `application.properties` - Application configuration with backend service endpoints\n- `mysql-setup.sh` - MySQL installation and database initialization script\n- `rabbitmq-setup.sh` - RabbitMQ installation and configuration script\n- `memcached-setup.sh` - Memcached installation script\n- `tomcat-userdata.sh` - Tomcat installation and application deployment script\n\n## 📈 Future Enhancements\n\n- [ ] Infrastructure as Code using Terraform/CloudFormation\n- [ ] CI/CD pipeline integration with AWS CodePipeline\n- [ ] Container migration to ECS/EKS\n- [ ] Database migration to RDS for managed services\n- [ ] ElastiCache for Memcached/Redis\n- [ ] Amazon MQ for RabbitMQ\n- [ ] CloudWatch monitoring and alerting setup\n- [ ] AWS Backup for disaster recovery\n- [ ] Multi-region deployment for global availability\n\n## 🤝 Contributing\n\nContributions are welcome! Here's how you can help:\n\n### How to Contribute\n\n1. **Fork the repository**\n```bash\n   git clone https://github.com/yourusername/aws-multitier-webapp.git\n   cd aws-multitier-webapp\n```\n\n2. **Create a feature branch**\n```bash\n   git checkout -b feature/your-feature-name\n```\n\n3. **Make your changes**\n   - Follow AWS best practices\n   - Update documentation if needed\n   - Test your changes thoroughly\n\n4. **Commit your changes**\n```bash\n   git add .\n   git commit -m \"Add: Brief description of your changes\"\n```\n\n5. **Push to your fork**\n```bash\n   git push origin feature/your-feature-name\n```\n\n6. **Open a Pull Request**\n   - Provide a clear description of the changes\n   - Reference any related issues\n   - Ensure all checks pass\n\n### Contribution Guidelines\n\n- **Code Quality**: Follow infrastructure as code best practices\n- **Documentation**: Update README and comments for any changes\n- **Security**: Never commit sensitive information (keys, passwords, etc.)\n- **Testing**: Test infrastructure changes in a development environment first\n- **Commit Messages**: Use clear, descriptive commit messages\n  - ✅ `Add: CloudWatch monitoring for RDS instances`\n  - ✅ `Fix: Security group rule for ALB health checks`\n  - ✅ `Update: Auto Scaling policy thresholds`\n  - ❌ `fixed stuff`\n\n### Areas for Contribution\n\n- **Infrastructure Automation**: Terraform/CloudFormation templates\n- **CI/CD**: GitHub Actions, CodePipeline configurations\n- **Monitoring**: CloudWatch dashboards and alarms\n- **Documentation**: Tutorials, troubleshooting guides\n- **Cost Optimization**: Reserved instances, spot instances strategies\n- **Security**: Additional security hardening measures\n\n### Reporting Issues\n\nIf you find a bug or have a suggestion:\n\n1. Check if the issue already exists\n2. Create a new issue with:\n   - Clear title and description\n   - Steps to reproduce (for bugs)\n   - Expected vs actual behavior\n   - Screenshots if applicable\n   - Your environment details (AWS region, instance types, etc.)\n\n## 📞 Support\n\nIf you have questions or need help:\n\n- 📧 Open an issue in this repository\n- 💬 Start a discussion in the Discussions tab\n- 📖 Check the [AWS Documentation](https://docs.aws.amazon.com/)\n\n## 🙏 Acknowledgments\n\n- AWS documentation and best practices guides\n- The open-source community for tools and resources\n- Contributors who have helped improve this project\n\n## 👤 Author\n\n**[Mohamed Othman]**\n\n- 💼 LinkedIn: [Your LinkedIn Profile](https://www.linkedin.com/in/mohamed-el-sayed-othman/)\n- 🐱 GitHub: [MohamedEl-Sayed28](https://github.com/MohamedEl-Sayed28)\n- 📧 Email: mohamedm.elsayedothman@gmail.com\n\n---\n\n**⭐ If you find this project helpful, please consider giving it a star!**\n\n*Last Updated: November 2025*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedel-sayed28%2Faws-multitier-webapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmohamedel-sayed28%2Faws-multitier-webapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohamedel-sayed28%2Faws-multitier-webapp/lists"}