In this updated guide, we’ll deploy multiple PHP applications using AWS Elastic Beanstalk (EB) environments, and configure a single standalone Application Load Balancer (ALB) for all environments. Based on the actual implementation, this article clarifies how to manage multiple Elastic Beanstalk environments with dedicated target groups under one centralized ALB.
Overview
We’ll set up multiple PHP applications as separate EB environments. Instead of configuring a load balancer for each environment, we’ll use one ALB with dedicated target groups for each environment. This approach is cost-efficient, simplifies management, and ensures centralized control over routing and scaling.
Architecture
Key Components:
• Elastic Beanstalk Environments: Each PHP application runs in its own environment.
• Standalone ALB: A single ALB handles all incoming traffic and routes it to the appropriate target group.
• Target Groups: Each Elastic Beanstalk environment has its own target group for routing.
Architecture Workflow:
- ALB receives traffic for all applications.
- Listener rules on the ALB route traffic to the correct target group based on host headers or path patterns.
- Target groups forward traffic to the registered instances of the respective Elastic Beanstalk environments.
Step-by-Step Guide
Step 1: Set Up Elastic Beanstalk Environments
Create Separate Environments for PHP Applications:
- Open the Elastic Beanstalk Console.
- Click Create Application and configure:
• Application Name: Example: PHP-App-1.
• Platform: Select PHP.
• Environment: Choose Web Server Environment. - Upload your .zip package containing the PHP application (e.g., index.php, composer.json).
- Deploy the application.
- Repeat these steps for additional applications (e.g., PHP-App-2, PHP-App-3).
Step 2: Create a Standalone ALB
Create the ALB:
- Go to the EC2 Console > Load Balancers.
- Click Create Load Balancer and select Application Load Balancer.
- Configure:
• Name: standalone-alb.
• Scheme: Internet-facing.
• Listeners: Add an HTTPS listener (port 443).
• Availability Zones: Choose the same zones as your Elastic Beanstalk environments. - Click Create.
Register ALB with Elastic Beanstalk:
- Navigate to each Elastic Beanstalk environment.
- Under Configuration, link the environment to the newly created ALB.
- Ensure health checks are consistent with the ALB configuration.
Step 3: Configure Target Groups for Each Environment
Create Target Groups:
- Go to EC2 Console > Target Groups.
- Click Create Target Group for each Elastic Beanstalk environment.
• Name: Example: php-app-1-tg.
• Target Type: Instance.
• Protocol: HTTP.
• Port: 80.
• Health Check Path: / (or a custom endpoint defined in your application). - Add instances of the respective Elastic Beanstalk environment to the target group.
- Navigate to the Targets tab in each target group and confirm the registered instances are healthy.
Step 4: Add Listener Rules to the ALB
- Go to the ALB Console > Listeners > HTTP:80 > Edit Rules.
- Add a rule for each target group:
• Condition: Use Host Header to match the subdomain or domain (e.g., app1.example.com).
• Action: Forward traffic to the corresponding target group (e.g., php-app-1-tg). - Repeat this process for all environments.
Testing the Setup
• Confirm that each subdomain resolves to the correct Elastic Beanstalk environment.
• Test HTTPS redirection and certificate validity.
• Simulate traffic to ensure the ALB forwards requests correctly based on listener rules.
Conclusion
By using a single ALB with target groups for multiple Elastic Beanstalk environments, you achieve a cost-effective, scalable, and centralized solution for hosting PHP applications.