in aws_sra_examples/solutions/macie/macie_org/lambda/src/app.py [0:0]
def get_available_service_regions(user_regions: str, aws_service: str,
control_tower_regions_only: bool = False) -> list:
"""
Get the available regions for the AWS service
:param: user_regions
:param: aws_service
:return: available region list
"""
try:
if user_regions.strip():
logger.info(f"USER REGIONS: {str(user_regions)}")
service_regions = [value.strip() for value in user_regions.split(",") if value != '']
elif control_tower_regions_only:
cf_client = boto3.Session().client('cloudformation')
paginator = cf_client.get_paginator("list_stack_instances")
region_set = set()
for page in paginator.paginate(StackSetName="AWSControlTowerBP-BASELINE-CLOUDWATCH"):
for summary in page["Summaries"]:
region_set.add(summary["Region"])
service_regions = list(region_set)
else:
service_regions = boto3.session.Session().get_available_regions(aws_service)
logger.info(f"SERVICE REGIONS: {service_regions}")
except ClientError as ce:
logger.error(f"get_available_service_regions error: {ce}")
raise ValueError("Error getting service regions")
available_regions = check_available_regions(service_regions)
logger.info(f"AVAILABLE REGIONS: {available_regions}")
return available_regions