# sqs

Creates SQS queues (standard and FIFO) with optional encryption, dead-letter queue redrive policies, redrive allow policies, and access policies.

FIFO queue names are automatically suffixed with `.fifo` if not already present. Dead-letter queue references use queue keys from the same module invocation, so DLQ ARNs are resolved automatically.

## Usage

```hcl
module "sqs" {
  source  = "hcassc.jfrog.io/iac-terraform-modules-virtual/messaging/sqs/aws"
  version = "0.1.0"

  queues = {
    orders_dlq = {
      name                      = "prod-orders-dlq"
      message_retention_seconds = 1209600
      kms_master_key_id         = module.kms.key_arn
    }

    orders = {
      name                       = "prod-orders"
      visibility_timeout_seconds = 60
      kms_master_key_id          = module.kms.key_arn

      redrive_policy = {
        dead_letter_queue_key = "orders_dlq"
        max_receive_count     = 5
      }
    }

    events_dlq = {
      name       = "prod-events-dlq"
      fifo_queue = true
      kms_master_key_id = module.kms.key_arn
    }

    events = {
      name                        = "prod-events"
      fifo_queue                  = true
      content_based_deduplication = true
      kms_master_key_id           = module.kms.key_arn

      redrive_policy = {
        dead_letter_queue_key = "events_dlq"
        max_receive_count     = 3
      }
    }
  }

  queue_policies = {
    orders = {
      policy = data.aws_iam_policy_document.orders_sqs.json
    }
  }

  tags = {
    Environment = "prod"
    Team        = "platform"
  }
}
```

<!-- BEGIN_TF_DOCS — DO NOT EDIT BELOW THIS LINE -->
## Requirements

| Name | Version |
| ---- | ------- |
| <a name="requirement_terraform"></a> [terraform](#requirement_terraform) | ~> 1.5 |
| <a name="requirement_aws"></a> [aws](#requirement_aws) | ~> 6.50 |

## Providers

| Name | Version |
| ---- | ------- |
| <a name="provider_aws"></a> [aws](#provider_aws) | 6.50.0 |

## Resources

| Name | Type |
| ---- | ---- |
| [aws_sqs_queue.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue) | resource |
| [aws_sqs_queue_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue_policy) | resource |

## Inputs

| Name | Description | Type | Default | Required |
| ---- | ----------- | ---- | ------- | :------: |
| <a name="input_queue_policies"></a> [queue_policies](#input_queue_policies) | Map of SQS queue policy definitions keyed by queue key | <pre>map(object({<br/>    policy = string<br/>  }))</pre> | `{}` | no |
| <a name="input_queues"></a> [queues](#input_queues) | Map of SQS queue definitions | <pre>map(object({<br/>    name                              = string<br/>    fifo_queue                        = optional(bool, false)<br/>    content_based_deduplication       = optional(bool, false)<br/>    deduplication_scope               = optional(string, null)<br/>    fifo_throughput_limit             = optional(string, null)<br/>    delay_seconds                     = optional(number, 0)<br/>    max_message_size                  = optional(number, 262144)<br/>    message_retention_seconds         = optional(number, 345600)<br/>    receive_wait_time_seconds         = optional(number, 0)<br/>    visibility_timeout_seconds        = optional(number, 30)<br/>    kms_master_key_id                 = optional(string, null)<br/>    kms_data_key_reuse_period_seconds = optional(number, 300)<br/>    sqs_managed_sse_enabled           = optional(bool, null)<br/><br/>    redrive_policy = optional(object({<br/>      dead_letter_queue_key = string<br/>      max_receive_count     = optional(number, 3)<br/>    }), null)<br/><br/>    redrive_allow_policy = optional(object({<br/>      redrive_permission = optional(string, "byQueue")<br/>      source_queue_arns  = optional(list(string), [])<br/>    }), null)<br/>  }))</pre> | `{}` | no |
| <a name="input_tags"></a> [tags](#input_tags) | Resource tags to apply to all resources | `map(string)` | `{}` | no |

## Outputs

| Name | Description |
| ---- | ----------- |
| <a name="output_queue_arns"></a> [queue_arns](#output_queue_arns) | Map of queue keys to SQS queue ARNs |
| <a name="output_queue_ids"></a> [queue_ids](#output_queue_ids) | Map of queue keys to SQS queue URLs (IDs) |
| <a name="output_queue_names"></a> [queue_names](#output_queue_names) | Map of queue keys to SQS queue names |
| <a name="output_queue_urls"></a> [queue_urls](#output_queue_urls) | Map of queue keys to SQS queue URLs |
<!-- END_TF_DOCS — DO NOT EDIT ABOVE THIS LINE -->
