43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
r"""
|
|
Documentation
|
|
|
|
License: This program is released under the MIT License
|
|
"""
|
|
|
|
# Imports
|
|
import boto3
|
|
import pickle
|
|
import os
|
|
# import logging
|
|
#
|
|
# logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
# logger = logging.getLogger(__name__)
|
|
PICKLE_FILE = 'cache.pkl'
|
|
|
|
def getRegions(all_regions=False) -> list[str]:
|
|
"""
|
|
Returns all aws regions, cached in pickle file to avoid repeated AWS calls.
|
|
|
|
:param all_regions:
|
|
:return:
|
|
"""
|
|
cache_key = "aws_regions"
|
|
|
|
if os.path.exists(PICKLE_FILE):
|
|
with open(PICKLE_FILE, 'rb') as f:
|
|
cache = pickle.load(f)
|
|
if cache_key in cache:
|
|
# logger.info("Return aws regions from cache...")
|
|
return cache[cache_key]
|
|
|
|
# Fetch from AWS and cache it
|
|
# logger.info("Getting AWS regions and cache them...")
|
|
ec2 = boto3.client('ec2', region_name='us-east-1')
|
|
response = ec2.describe_regions(AllRegions=all_regions)
|
|
regions = [region['RegionName'] for region in response['Regions']]
|
|
|
|
cache = {cache_key: regions}
|
|
with open(PICKLE_FILE, 'wb') as f:
|
|
pickle.dump(cache, f)
|
|
|
|
return regions |