AWS提供了基于路径的路由功能,可以根据请求的路径将流量转发到不同的目标组。下面是一个示例:
创建两个目标组,分别为web-servers和api-servers,这里假设目标组中已经添加了对应的实例。
创建应用负载均衡器并绑定监听器
import boto3
elbv2 = boto3.client('elbv2')
response = elbv2.create_load_balancer(
Name='my-loadbalancer',
Subnets=[
'subnet-0123456789abcdef0',
'subnet-0123456789abcdef1',
],
Scheme='internet-facing',
Type='application',
)
load_balancer_arn = response['LoadBalancers'][0]['LoadBalancerArn']
response = elbv2.create_listener(
LoadBalancerArn=load_balancer_arn,
Protocol='HTTP',
Port=80,
DefaultActions=[
{
'Type': 'fixed-response',
'FixedResponseConfig': {
'ContentType': 'text/plain',
'MessageBody': 'Hello from my Load Balancer',
'StatusCode': '200'
}
}
]
)
listener_arn = response['Listeners'][0]['ListenerArn']
response = elbv2.create_target_group(
Name='web-servers',
Protocol='HTTP',
Port=80,
VpcId='vpc-0123456789abcdef0'
)
web_target_group_arn = response['TargetGroups'][0]['TargetGroupArn']
response = elbv2.create_target_group(
Name='api-servers',
Protocol='HTTP',
Port=80,
VpcId='vpc-0123456789abcdef0'
)
api_target_group_arn = response['TargetGroups'][0]['TargetGroupArn']
response = elbv2.create_rule(
ListenerArn=listener_arn,
Conditions=[
{
'Field': 'path-pattern',
'Values': [
'/api/*'
]
}
],
Priority=1,
Actions=[
{
'Type': 'forward',
'TargetGroupArn': api_target_group_arn
}
]
)
response = elbv2.create_rule(
ListenerArn=listener_arn,
Conditions=[
{
'Field': 'path-pattern',
'Values': [
'/web/*'
]
}
],
Priority