In this 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 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 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: 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 Elastic Beanstalk environment domain (e.g., php-app-1.elasticbeanstalk.com). • Action: Forward traffic to the corresponding target group (e.g., php-app-1-tg).
- Repeat this process for all environments.
Testing the Setup
• Simulate traffic to verify that the ALB forwards requests correctly to the appropriate target groups based on listener rules.
• Check the health of each target group to ensure all instances are healthy and receiving traffic as expected.
• Use tools like curl or Postman to send requests directly to the ALB DNS endpoint. Confirm that the traffic is routed to the correct Elastic Beanstalk environment and returns the expected responses.
Key Benefits:
1. Cost Efficiency: Reduces infrastructure costs by using one ALB for all environments.
2. Simplified Management: Centralizes traffic routing and listener rule configuration in one place.
3. Scalability: Supports independent scaling of target groups for each environment.
4. Enhanced Traffic Control: Provides granular routing with ALB listener rules.
5. Centralized Health Monitoring: Consolidates health checks for all environments.
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.