main.tf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# SNS topics ==================================================================

resource "aws_sns_topic" "this" {
  for_each = var.topics

  name         = local.topic_names[each.key]
  display_name = each.value.display_name

  fifo_topic                  = each.value.fifo_topic
  content_based_deduplication = each.value.fifo_topic ? each.value.content_based_deduplication : null

  kms_master_key_id = each.value.kms_master_key_id
  delivery_policy   = each.value.delivery_policy
  signature_version = each.value.signature_version
  tracing_config    = each.value.tracing_config
  archive_policy    = each.value.archive_policy

  # Application feedback
  application_success_feedback_role_arn    = each.value.application_success_feedback_role_arn
  application_failure_feedback_role_arn    = each.value.application_failure_feedback_role_arn
  application_success_feedback_sample_rate = each.value.application_success_feedback_sample_rate

  # HTTP/HTTPS feedback
  http_success_feedback_role_arn    = each.value.http_success_feedback_role_arn
  http_failure_feedback_role_arn    = each.value.http_failure_feedback_role_arn
  http_success_feedback_sample_rate = each.value.http_success_feedback_sample_rate

  # Lambda feedback
  lambda_success_feedback_role_arn    = each.value.lambda_success_feedback_role_arn
  lambda_failure_feedback_role_arn    = each.value.lambda_failure_feedback_role_arn
  lambda_success_feedback_sample_rate = each.value.lambda_success_feedback_sample_rate

  # SQS feedback
  sqs_success_feedback_role_arn    = each.value.sqs_success_feedback_role_arn
  sqs_failure_feedback_role_arn    = each.value.sqs_failure_feedback_role_arn
  sqs_success_feedback_sample_rate = each.value.sqs_success_feedback_sample_rate

  # Firehose feedback
  firehose_success_feedback_role_arn    = each.value.firehose_success_feedback_role_arn
  firehose_failure_feedback_role_arn    = each.value.firehose_failure_feedback_role_arn
  firehose_success_feedback_sample_rate = each.value.firehose_success_feedback_sample_rate

  tags = local.tags
}

# SNS topic policies ==========================================================

resource "aws_sns_topic_policy" "this" {
  for_each = var.topic_policies

  arn    = aws_sns_topic.this[each.key].arn
  policy = each.value.policy
}

# SNS data protection policies ================================================

resource "aws_sns_topic_data_protection_policy" "this" {
  for_each = var.data_protection_policies

  arn    = aws_sns_topic.this[each.key].arn
  policy = each.value.policy
}

# SNS subscriptions ===========================================================

resource "aws_sns_topic_subscription" "this" {
  for_each = var.subscriptions

  topic_arn                       = aws_sns_topic.this[each.value.topic_key].arn
  protocol                        = each.value.protocol
  endpoint                        = each.value.endpoint
  raw_message_delivery            = each.value.raw_message_delivery
  filter_policy                   = each.value.filter_policy
  filter_policy_scope             = each.value.filter_policy != null ? each.value.filter_policy_scope : null
  redrive_policy                  = each.value.redrive_policy
  delivery_policy                 = each.value.delivery_policy
  confirmation_timeout_in_minutes = each.value.confirmation_timeout_in_minutes
  endpoint_auto_confirms          = each.value.endpoint_auto_confirms
}