agent: |
oEDiBh3NgMnMbUV0r5r0Get Unhealthy targets associated to an ALB or NLB
Get Unhealthy targets associated to an ALB or NLB
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task retrieves and lists targets that are marked as 'unhealthy' and linked to AWS Application Load Balancers (ALB) or Network Load Balancers (NLB). This process helps in detecting non-performing targets to maintain optimal load distribution and service availability.
inputs
outputs
import boto3
from botocore.exceptions import ClientError
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def get_unhealthy_targets(regions, elb_arn=None):
"""
Fetch targets (instances) that are in "unhealthy" state for AWS Application Load Balancers (ALBs) and Network Load Balancers (NLBs).
Parameters:
- elb_arn (str, optional): Specific ARN of the Elastic Load Balancer to check. Default is None, which checks all ELBs.
- regions (list): List of AWS regions to check.
Returns:
- list: A list of dictionaries containing details of unhealthy targets.
"""
# Initialize an empty list to store results
result = []
# Loop through each specified region to check for unhealthy targets
for reg in regions:
try:
# Create a new client for the ELBv2 service in the specified region
elbv2_client = boto3.client('elbv2', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=reg)
# Retrieve the list of all ALBs and NLBs in the current region
elbs = elbv2_client.describe_load_balancers()["LoadBalancers"]
# Loop through each Load Balancer and inspect its targets
for elb in elbs:
# If a specific ELB ARN is provided, skip all other load balancers
if elb_arn and elb["LoadBalancerArn"] != elb_arn:
continue
# Get all target groups associated with the current load balancer
target_groups = elbv2_client.describe_target_groups(LoadBalancerArn=elb["LoadBalancerArn"])["TargetGroups"]
# Check the health status of each target within the target group
for tg in target_groups:
health_descriptions = elbv2_client.describe_target_health(TargetGroupArn=tg["TargetGroupArn"])["TargetHealthDescriptions"]
# If a target is found to be "unhealthy", store its details in the result list
for desc in health_descriptions:
if desc["TargetHealth"]["State"] == "unhealthy":
data_dict = {
"target_id": desc["Target"]["Id"],
"region": reg,
"load_balancer_arn": elb["LoadBalancerArn"],
"target_group_arn": tg["TargetGroupArn"]
}
result.append(data_dict)
# Catch any AWS-related exceptions and print an error message
except ClientError as e:
print(f"ClientError in region {reg}: {e}")
# Catch any other general exceptions and print an error message
except Exception as e:
print(f"An error occurred in region {reg}: {e}")
return result
# Specify the AWS regions to check for unhealthy targets
#regions_to_check = ['us-east-1', 'us-west-2']
# Retrieve and print the details of any found unhealthy targets
unhealthy_targets = get_unhealthy_targets(regions)
if unhealthy_targets:
print("Unhealthy targets detected:")
for target in unhealthy_targets:
print(f"Region: {target['region']}\nLoadBalancer ARN: {target['load_balancer_arn']}\nTargetGroup ARN: {target['target_group_arn']}\nTarget ID: {target['target_id']}\n")
else:
print("No unhealthy targets found.")
copied