Skip to content

Commit

Permalink
add sqs code
Browse files Browse the repository at this point in the history
  • Loading branch information
badra001 committed Mar 28, 2022
1 parent 9b8f0aa commit e78e87e
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |

Expand Down
119 changes: 119 additions & 0 deletions sqs.tf
Original file line number Diff line number Diff line change
@@ -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 = <<EOP
{
"deadLetterTargetArn":"${aws_sqs_queue.queue_deadletter[0].arn}",
"maxReceiveCount":100
}
EOP

kms_master_key_id = "alias/aws/sqs"
kms_data_key_reuse_period_seconds = 300

tags = merge(
local.base_tags,
var.tags,
{ "Name" = local.sqs_name },
)

lifecycle {
ignore_changes = [tags["boc:tf_module_version"]]
}
}

resource "aws_sqs_queue_policy" "queue" {
count = var.create && local.enable_sqs ? 1 : 0
queue_url = aws_sqs_queue.queue[0].id
policy = data.aws_iam_policy_document.queue_sqs[0].json
}

data "aws_iam_policy_document" "queue_sqs" {
count = var.create && local.enable_sqs ? 1 : 0
statement {
sid = "AllowSNSSendMessage"
effect = "Allow"
actions = ["SQS:SendMessage"]
resources = [aws_sqs_queue.queue[0].arn]

principals {
type = "AWS"
identifiers = ["*"]
}

condition {
test = "ArnEquals"
variable = "aws:SourceArn"
values = [aws_sns_topic.topic[0].arn]
}
}
}

resource "aws_sns_topic_subscription" "queue" {
protocol = "sqs"
topic_arn = aws_sns_topic.topic[0].arn
endpoint = aws_sqs_queue.queue[0].arn
}

0 comments on commit e78e87e

Please sign in to comment.