in deployment_lambda/lambda_function.py [0:0]
def cf_handler(event, context):
response = {
'StackId': event['StackId'],
'RequestId': event['RequestId'],
'LogicalResourceId': event['LogicalResourceId'],
'Status': 'SUCCESS',
'Data': {},
}
# PhysicalResourceId is meaningless here, but CloudFormation requires it
if 'PhysicalResourceId' in event:
response['PhysicalResourceId'] = event['PhysicalResourceId']
else:
uuid_val = str(uuid.uuid4())
response['PhysicalResourceId'] = uuid_val
event['PhysicalResourceId'] = uuid_val
try:
response_data = {}
request_type = event['RequestType']
ca_arn = event['ResourceProperties']['CAArn']
if request_type == 'Create':
logger.info('Create stack event. event %s', json.dumps(event))
iot_ca_arn = register_ca(ca_arn)
response_data['arn'] = iot_ca_arn
elif request_type == 'Update':
logger.info('Update stack event. event %s', json.dumps(event))
old_ca_arn = event['OldResourceProperties'].get('CAArn')
if old_ca_arn and old_ca_arn != ca_arn:
delete_ca(old_ca_arn)
iot_ca_arn = register_ca(ca_arn)
response_data['arn'] = iot_ca_arn
elif request_type == 'Delete':
logger.info('Delete stack event. event %s', json.dumps(event))
delete_ca(ca_arn)
response['Reason'] = 'Success'
except Exception as e:
logger.error('Fail to run custom resource. event: %s, error: %s', json.dumps(event), str(e))
response['Status'] = 'FAILED'
response['Reason'] = str(e)
return send_response(event, response)