From e78e87e619232beb927eecce730a3d81e439edb7 Mon Sep 17 00:00:00 2001 From: badra001 Date: Mon, 28 Mar 2022 11:47:41 -0400 Subject: [PATCH] add sqs code --- README.md | 7 ++++ sqs.tf | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) diff --git a/README.md b/README.md index 93e1627..60d7685 100644 --- a/README.md +++ b/README.md @@ -116,11 +116,18 @@ No modules. | [aws_lambda_permission.allow_cloudwatch](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission) | resource | | [aws_sns_topic.topic](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic) | resource | | [aws_sns_topic_policy.topic](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_policy) | resource | +| [aws_sns_topic_subscription.queue](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription) | resource | +| [aws_sqs_queue.queue](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue) | resource | +| [aws_sqs_queue.queue_deadletter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue) | resource | +| [aws_sqs_queue_policy.queue](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue_policy) | resource | +| [aws_sqs_queue_policy.queue_deadletter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue_policy) | resource | | [aws_arn.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/arn) | data source | | [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source | | [aws_iam_policy.lambda_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy) | data source | | [aws_iam_policy_document.lambda_assume](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | | [aws_iam_policy_document.lambda_policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | +| [aws_iam_policy_document.queue_sqs](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | +| [aws_iam_policy_document.queue_sqs_deadletter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | | [aws_iam_policy_document.topic](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | | [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source | diff --git a/sqs.tf b/sqs.tf index e69de29..9e2911b 100644 --- a/sqs.tf +++ b/sqs.tf @@ -0,0 +1,119 @@ +locals { + sqs_name = var.sqs_queue_name != null ? var.sws_queue_name : local.name + enable_sqs = var.enable_sns && var.enable_sqs +} + +resource "aws_sqs_queue" "queue_deadletter" { + count = var.create && local.enable_sqs ? 1 : 0 + # delay=0 retention=4d max=256k visibility=1h + name = format("%v-deadletter", local.sqs_name) + delay_seconds = 0 + max_message_size = 262144 + message_retention_seconds = 345600 + receive_wait_time_seconds = 15 + visibility_timeout_seconds = 3600 + + kms_master_key_id = "alias/aws/sqs" + kms_data_key_reuse_period_seconds = 300 + + tags = merge( + local.base_tags, + var.tags, + { "Name" = format("%v-deadletter", local.sqs_name) }, + ) + + lifecycle { + ignore_changes = [tags["boc:tf_module_version"]] + } +} + +resource "aws_sqs_queue_policy" "queue_deadletter" { + count = var.create && local.enable_sqs ? 1 : 0 + queue_url = aws_sqs_queue.queue_deadletter[0].id + policy = data.aws_iam_policy_document.queue_sqs_deadletter[0].json +} + +data "aws_iam_policy_document" "queue_sqs_deadletter" { + count = var.create && local.enable_sqs ? 1 : 0 + statement { + sid = "AllowSQSReceiveMessage" + effect = "Allow" + actions = ["SQS:ReceiveMessage"] + resources = [aws_sqs_queue.queue_deadletter[0].arn] + + principals { + type = "AWS" + identifiers = ["*"] + } + + condition { + test = "ArnEquals" + variable = "aws:SourceArn" + values = [aws_sqs_queue.queue[0].arn] + } + } +} + +resource "aws_sqs_queue" "queue" { + count = var.create && local.enable_sqs ? 1 : 0 + # delay=0 retention=7d max=256k visibity=2h + name = local.sqs_name + delay_seconds = 0 + max_message_size = 262144 + message_retention_seconds = 604800 + receive_wait_time_seconds = 0 + visibility_timeout_seconds = 600 + + redrive_policy = <