@@ -128,7 +128,9 @@ Resources:
128128 ZipFile : |
129129 import os
130130 import json
131+ import uuid
131132 import logging
133+ from datetime import datetime
132134 from functools import partial
133135
134136 import boto3
@@ -141,6 +143,9 @@ Resources:
141143 EXCLUDED_ACCOUNT_LIST_KEY = os.environ.get('EXCLUDED_ACCOUNT_LIST_KEY')
142144 EUC_ACCOUNTS = os.environ.get('EUC_ACCOUNT_IDS', '').strip()
143145 TMP_FILE = "/tmp/data.json"
146+ START_TIME = str(datetime.now().isoformat())
147+ LINKED_ACCOUNT_LIST_KEY = os.environ.get('LINKED_ACCOUNT_LIST_KEY', 'linked-account-list.json')
148+ PAYER_ACCOUNT_LIST_KEY = os.environ.get('PAYER_ACCOUNT_LIST_KEY', 'payer-account-list.json')
144149
145150 logger = logging.getLogger(__name__)
146151 logger.setLevel(getattr(logging, os.environ.get('LOG_LEVEL', 'INFO').upper(), logging.INFO))
@@ -156,6 +161,8 @@ Resources:
156161 logger.error(message)
157162 raise Exception(message) #pylint: disable=broad-exception-raised
158163
164+ module = event.get("module", '').lower()
165+ params = event.get("params", '')
159166 functions = { # keep keys same as boto3 services
160167 'linked': iterate_linked_accounts,
161168 'euc': partial(iterate_accounts_with_filter, EUC_ACCOUNTS),
@@ -164,7 +171,7 @@ Resources:
164171 'compute-optimizer': partial(iterate_admins_accounts, 'compute-optimizer'),
165172 'backup': partial(iterate_admins_accounts, 'backup'),
166173 }
167- account_type = event.get("Type ", '').lower()
174+ account_type = event.get("type ", '').lower()
168175 if account_type not in functions:
169176 raise Exception(f"Lambda event must have 'Type' parameter with value = ({list(functions.keys())})") #pylint: disable=broad-exception-raised
170177
@@ -173,6 +180,14 @@ Resources:
173180 count = 0
174181 f.write("[\n")
175182 for account in account_iterator():
183+ account['main_exe_uuid'] = event.get("main_exe_uuid", str(uuid.uuid4()))
184+ account['module'] = module
185+ account['bucket'] = BUCKET
186+ account['dc_account'] = boto3.client('sts').get_caller_identity()['Account']
187+ account['dc_region'] = boto3.session.Session().region_name
188+ account['params'] = params
189+ account['prefix'] = RESOURCE_PREFIX
190+ account['stack_version'] = event.get("stack_version", '')
176191 if count > 0:
177192 f.write(",\n")
178193 f.write(json.dumps(account))
@@ -183,6 +198,7 @@ Resources:
183198 raise Exception('No accounts found. Check the log.') #pylint: disable=broad-exception-raised
184199
185200 key = f"account-list/{account_type}-account-list.json"
201+ key = f"account-collector/{module+'-'+(params+'-' if params else '')+(LINKED_ACCOUNT_LIST_KEY if account_type == 'linked' else PAYER_ACCOUNT_LIST_KEY)}"
186202 s3 = boto3.client('s3')
187203 s3.upload_file(TMP_FILE, Bucket=BUCKET, Key=key)
188204
@@ -285,6 +301,7 @@ Resources:
285301 aws_secret_access_key=credentials['SecretAccessKey'],
286302 aws_session_token=credentials['SessionToken'],
287303 )
304+
288305 Handler : ' index.lambda_handler'
289306 MemorySize : 2688
290307 Timeout : 600
@@ -298,6 +315,7 @@ Resources:
298315 PREDEF_ACCOUNT_LIST_KEY : " account-list/account-list"
299316 EXCLUDED_ACCOUNT_LIST_KEY : " account-list/excluded-linked-account-list.csv"
300317 EUC_ACCOUNT_IDS : !Ref EUCAccountIDs
318+
301319 Metadata :
302320 cfn_nag :
303321 rules_to_suppress :
@@ -310,4 +328,4 @@ Resources:
310328 Type : AWS::Logs::LogGroup
311329 Properties :
312330 LogGroupName : !Sub "/aws/lambda/${LambdaFunction}"
313- RetentionInDays : 60
331+ RetentionInDays : 60
0 commit comments