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)}