def handler(event, context): print "Start FIFO Auto Scale" prefix = util.get_stack_name_from_arn(event[c.ENV_STACK_ID], False) request_type = event['RequestType'] assigned_suffix = event['ResourceProperties'].get('Suffix', None) type = event['ResourceProperties'].get('QueueType', "fifo") initial_number_of_queues = int(event['ResourceProperties'].get( 'IntialNumberOfQueues', 5)) if assigned_suffix: prefix = "{0}{1}".format(prefix, assigned_suffix) sqs = Sqs({}, queue_prefix=prefix, type=type) if request_type == 'Delete': sqs.delete_all_queues(prefix) else: queues = sqs.get_queues() number_of_queues = len(queues) #5 queues to start, each queue can support 300 send message calls per second. total: 1500 messages per second if number_of_queues < initial_number_of_queues: for i in range(number_of_queues, initial_number_of_queues): sqs.add_fifo_queue(prefix) return custom_resource_response.success_response({}, "*")
def handler(event, context): print "Start FIFO Auto Scale" prefix = util.get_stack_name_from_arn(event[c.ENV_STACK_ID], False) sqs = Sqs({}, queue_prefix=prefix) request_type = event['RequestType'] print request_type, prefix if request_type == 'Delete': sqs.delete_all_queues(prefix) else: queues = sqs.get_queues() print queues number_of_queues = len(queues) #5 queues to start, each queue can support 300 send message calls per second. total: 1500 messages per second for i in range(number_of_queues, 5): sqs.add_fifo_queue(prefix) return custom_resource_response.success_response({}, "*")
def main(event, lambdacontext): context = dict({}) stack_id = os.environ[c.ENV_DEPLOYMENT_STACK_ARN] context[c.KEY_LAMBDA_FUNCTION] = lambdacontext.function_name if hasattr( lambdacontext, 'function_name') else None context[c.KEY_REQUEST_ID] = lambdacontext.aws_request_id if hasattr( lambdacontext, 'aws_request_id') else None is_lambda = context[c.KEY_REQUEST_ID] is not None db = DynamoDb(context) if not is_lambda: import lambda_fifo_message_consumer as consumer prefix = util.get_stack_name_from_arn(stack_id) sqs = Sqs(context, "{0}_".format(prefix)) awslambda = Lambda(context) if sqs.is_all_under_load: sqs.add_fifo_queue(prefix) queues = sqs.get_queues() for queue_url in queues: payload = {c.KEY_SQS_QUEUE_URL: queue_url, "context": context} print "Starting {} with queue url '{}'".format( "lambda" if is_lambda else "thread", queue_url) if is_lambda: invoke(context, awslambda, payload) else: payload[c.ENV_STACK_ID] = event['StackId'] consumer.main( payload, type('obj', (object, ), {'function_name': context[c.KEY_LAMBDA_FUNCTION]})) print "{} {} lambdas have started".format(len(queues), context[c.KEY_LAMBDA_FUNCTION]) return custom_resource_response.success_response({}, "*")