Skip to content

Commit fb1e437

Browse files
authored
fix data export updates (#279)
1 parent 21b4f05 commit fb1e437

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

data-exports/deploy/data-exports-aggregation.yaml

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
AWSTemplateFormatVersion: "2010-09-09"
2-
Description: AWS Billing Data Export Aggregation v0.1.5
2+
Description: AWS Billing Data Export Aggregation v0.1.6
33
Metadata:
44

55
AWS::CloudFormation::Interface:
@@ -806,6 +806,10 @@ Resources:
806806
- bcm-data-exports:UpdateExport
807807
- bcm-data-exports:DeleteExport
808808
Resource: !Sub "arn:${AWS::Partition}:bcm-data-exports:*:${AWS::AccountId}:*"
809+
- Effect: Allow
810+
Action:
811+
- bcm-data-exports:ListExports
812+
Resource: !Sub "arn:${AWS::Partition}:bcm-data-exports:*:${AWS::AccountId}:*"
809813
- Effect: Allow
810814
Action:
811815
- cur:PutReportDefinition #need this permission for bcm-data-exports to work
@@ -847,30 +851,40 @@ Resources:
847851
848852
try:
849853
export = event['ResourceProperties']['Export']
850-
export_name = event['ResourceProperties']['Export']['Name']
851-
854+
old_export = event.get('OldResourceProperties', {}).get('Export')
852855
if event['RequestType'] == 'Create':
853856
res = client.create_export(Export=export)
854857
print('created:', json.dumps(res))
855858
elif event['RequestType'] == 'Update':
856-
old_export_name = event['OldResourceProperties']['Export']['Name']
857-
if export["Name"] != old_export_name:
859+
old_export_name = old_export['Name']
860+
old_export_arn = list(client.get_paginator('list_exports').paginate().search(f"Exports[? ExportName=='{old_export_name}']"))[0]['ExportArn']
861+
if old_export['Name'] != old_export['Name']:
858862
res = client.create_export(Export=export)
859863
print('created:', json.dumps(res))
860864
try:
861-
res = client.delete_export(Name=old_export_name)
865+
res = client.delete_export(ExportArn=old_export_arn)
862866
print('deleted:', json.dumps(res))
863-
except:
864-
pass # Do not block deletion
867+
except Exception as exc:
868+
print('Exception on deletion:', str(exc))
869+
elif export['DataQuery'] != old_export['DataQuery']: # Data export do not support update of queries
870+
print(export['DataQuery'], '!=', old_export['DataQuery'])
871+
res = client.delete_export(ExportArn=old_export_arn)
872+
print('deleted:', json.dumps(res))
873+
res = client.create_export(Export=export)
874+
print('created:', json.dumps(res))
865875
else:
866-
res = client.update_export(Name=old_export_name, Export=export)
876+
res = client.update_export(ExportArn=old_export_arn, Export=export)
867877
print('updated:', json.dumps(res))
868878
elif event['RequestType'] == 'Delete':
879+
export_name = export['Name']
869880
try:
870-
res = client.delete_export(Name=old_export_name)
881+
export_arn = list(client.get_paginator('list_exports').paginate().search(f"Exports[? ExportName=='{export_name}']"))[0]['ExportArn']
882+
res = client.delete_export(ExportArn=export_arn)
871883
print('deleted:', json.dumps(res))
884+
except client.exceptions.ResourceNotFoundException:
885+
print('Not Found. Nothing to delete')
872886
except:
873-
pass # Do not block deletion
887+
print('Exception on deletion:', str(exc))
874888
else:
875889
raise Exception("Unknown operation: " + event['RequestType'])
876890

0 commit comments

Comments
 (0)