def cf_handler()

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)