要解决AWS ELB的4XX请求计数与总请求数相同,但所有这些请求仍然到达EC2机器的问题,您可以通过以下方式进行处理:
以下是一个示例Lambda函数的代码,用于处理ELB日志文件并注销相关的EC2实例:
import boto3
import re
def lambda_handler(event, context):
# 定义ELB名称和EC2实例ID
elb_name = 'your-elb-name'
ec2_instance_id = 'your-ec2-instance-id'
# 创建ELB和EC2客户端
elb_client = boto3.client('elbv2')
ec2_client = boto3.client('ec2')
# 下载ELB日志文件
elb_logs_bucket = event['Records'][0]['s3']['bucket']['name']
elb_logs_key = event['Records'][0]['s3']['object']['key']
s3_client = boto3.client('s3')
s3_client.download_file(elb_logs_bucket, elb_logs_key, '/tmp/elb_logs.log')
# 解析ELB日志文件
with open('/tmp/elb_logs.log', 'r') as file:
for line in file:
# 提取HTTP状态码
match = re.search(r'\s(\d{3})\s', line)
if match:
http_status_code = int(match.group(1))
if http_status_code >= 400: # 4XX状态码
# 注销EC2实例
response = elb_client.deregister_targets(
TargetGroupArn='your-target-group-arn',
Targets=[
{
'Id': ec2_instance_id,
'Port': 80
}
]
)
print(f"EC2 instance {ec2_instance_id} deregistered from ELB.")
请注意,上述代码中的参数需要根据您的实际情况进行替换,如ELB名称、EC2实例ID、目标组ARN等。
您可以根据自己的需求对代码进行修改和调整,以适应您的具体场景。
上一篇:AWS ELB不健康的4xx
下一篇:AWS ELB的Grok过滤器