def describe_queue_from_meta(name, meta): region = meta.get('region', CONFIG.region) is_fifo = meta.get('fifo_queue', False) resource_name = _build_resource_name(is_fifo, name) queue_url = CONN.sqs(region).get_queue_url(resource_name, CONFIG.account_id) if not queue_url: return {} response = CONN.sqs(region).get_queue_attributes(queue_url) return { _build_queue_arn(resource_name, region): build_description_obj(response, name, meta) }
def _remove_queue(arn, config): region = arn.split(':')[3] queue_name = config['resource_name'] resource_meta = config['resource_meta'] try: is_fifo = resource_meta.get('fifo_queue', False) resource_name = _build_resource_name(is_fifo, queue_name) queue_url = CONN.sqs(region).get_queue_url(resource_name, CONFIG.account_id) if queue_url: CONN.sqs(region).delete_queue(queue_url) _LOG.info('SQS queue %s was removed.', queue_name) else: _LOG.warn('SQS queue %s is not found', queue_name) except ClientError as e: exception_type = e.response['Error']['Code'] if exception_type == 'ResourceNotFoundException': _LOG.warn('SQS queue %s is not found', queue_name) else: raise e
def _create_sqs_queue_from_meta(name, meta): region = meta.get('region', CONFIG.region) is_fifo = meta.get('fifo_queue', False) resource_name = _build_resource_name(is_fifo, name) queue_url = CONN.sqs(region).get_queue_url(resource_name, CONFIG.account_id) if queue_url: _LOG.warn('SQS queue %s exists.', name) return describe_queue(queue_url, name, meta, resource_name, region) delay_sec = meta.get('delay_seconds') max_mes_size = meta.get('maximum_message_size') mes_ret_period = meta.get('message_retention_period') policy = meta.get('policy') recieve_mes_wait_sec = meta.get('receive_message_wait_time_seconds') redrive_policy = meta.get('redrive_policy') vis_timeout = meta.get('visibility_timeout') kms_master_key_id = meta.get('kms_master_key_id') kms_data_reuse_period = meta.get('kms_data_key_reuse_period_seconds') if is_fifo and region not in FIFO_REGIONS: raise AssertionError('FIFO queue is not available in {0}.', region) content_deduplication = meta.get('content_based_deduplication') params = dict(queue_name=resource_name, delay_seconds=delay_sec, maximum_message_size=max_mes_size, message_retention_period=mes_ret_period, policy=policy, receive_message_wait_time_seconds=recieve_mes_wait_sec, redrive_policy=redrive_policy, visibility_timeout=vis_timeout, kms_master_key_id=kms_master_key_id, kms_data_key_reuse_period_seconds=kms_data_reuse_period, fifo_queue=is_fifo, content_based_deduplication=content_deduplication) queue_url = CONN.sqs(region).create_queue(**params)['QueueUrl'] _LOG.info('Created SQS queue %s.', name) return describe_queue(queue_url, name, meta, resource_name, region)
def _create_sqs_trigger_from_meta(lambda_name, lambda_arn, role_name, trigger_meta): required_parameters = ['target_queue', 'batch_size'] validate_params(lambda_name, trigger_meta, required_parameters) target_queue = trigger_meta['target_queue'] if not CONN.sqs().get_queue_url(target_queue, CONFIG.account_id): _LOG.debug('Queue %s does not exist', target_queue) return queue_arn = 'arn:aws:sqs:{0}:{1}:{2}'.format(CONFIG.region, CONFIG.account_id, target_queue) _LAMBDA_CONN.add_event_source(lambda_arn, queue_arn, trigger_meta['batch_size']) _LOG.info('Lambda %s subscribed to SQS queue %s', lambda_name, target_queue)
def describe_queue(queue_url, name, meta, resource_name, region): response = CONN.sqs(region).get_queue_attributes(queue_url) arn = _build_queue_arn(resource_name=resource_name, region=region) return {arn: build_description_obj(response, name, meta)}