Рубрики
Uncategorized

Публикация электронной почты Отложить уведомления к очереди SQS

В этом посте я настроил AWS для публикации уведомлений об отказе электронного письма к очереди SQS с использованием террафора. Помечено террафом, AWS, DEVOPS.

Недавно я должен был работать над заданием, чтобы уведомить нас в расслаиваться всякий раз, когда электронное письмо, которое было отправлено через Amazon Simple Email Service (SES), отскочившейся. Рохан Дешпанде имеет отличный Статья, которая показывает, как обращаться с отскаками и жалобами Отказ Поскольку эта статья тяжело наклоняется к своему подходу, я рекомендую прочитать это первым.

Давай, я буду ждать.

О, хорошо, ты вернулся. Таким образом, вам может быть интересно, что если Rohan уже написал статью, почему я пишу это и важнее, почему вы должны проводить свое драгоценное время, читая это?

Ну, хотя его решение решает проблему, это требует, чтобы я использовал консоль управления AWS. Тем не менее, я хочу использовать террафор Так что любые изменения, которые я зарабатываю, может быть легко развернута для всех сред.

Шаг 1: Создайте очередь Amazon SQS

Я настрою очередь SQS, используя Ресурс: aws_sqs_queue.

resource "aws_sqs_queue" "ses_bounces_queue" {
  name = "ses_bounces_queue"
  message_retention_seconds = 1209600
  redrive_policy = "{\"deadLetterTargetArn\":\"${aws_sqs_queue.ses_dead_letter_queue.arn}\",\"maxReceiveCount\":4}"
}

resource "aws_sqs_queue" "ses_dead_letter_queue" {
  name = "ses_dead_letter_queue"
}
  • Установите читаемое человеком имени очереди на ses_bounces_queue. Так что Terraform не назначает случайное имя в нашу очередь.
  • Установите количество секунд SQS сохраняет сообщение на 14 дней (1209600 секунд).
  • Установите очередь нашей мертвой буквы для обработки сообщений, которые не могут быть обработаны, чтобы помочь с проблемами отладки и изоляции. Узнайте больше о Очередь мертвой буквы SQS Отказ

Шаг 2: Создать Amazon Sns Topic_arn

Я настрою тему SNS, используя Ресурс: AWS_SNS_TOPIC

resource "aws_sns_topic" "ses_bounces_topic" {
  name = "ses_bounces_topic"
}
  • Установите читаемое человеком имени очереди на ses_bounces_topic. Так что Terraform не назначает случайное имя в нашу очередь.

Шаг 3: Настройте тему Amazon SNS для публикации к очереди SQS

Я буду использовать Ресурс: AWS_SNS_TOPIC_SUBSCRICE Чтобы автоматически разместить сообщения, отправленные на тему SNS в очереди SQS.

resource "aws_sns_topic_subscription" "ses_bounces_subscription" {
  topic_arn = aws_sns_topic.ses_bounces_topic.arn
  protocol = "sqs"
  endpoint = aws_sqs_queue.ses_bounces_queue.arn
}
  • Установите ARN SNS-темы, чтобы подписаться на SES_BOUNCES_TOPIC Отказ
  • Установите протокол к SQS. Так что мы можем отправить данные в очередь SQS.
  • Установите конечную точку на ses_bounces_queue Отказ

Шаг 4: Настройте Amazon SES для публикации уведомлений об отказе с использованием SES-Bounce-Topic к SES-Bounces-queue

Я буду использовать Ресурс: ses_identity_notification_topic Чтобы установить тему SNS для использования при доставке уведомлений об отказе.

resource "aws_ses_identity_notification_topic" "ses_bounces" {
  topic_arn = aws_sns_topic.ses_bounces_topic.arn
  notification_type = "Bounce"
  identity = email_domain
  include_original_headers = true
}
  • Установите The Amazon Sns Themic в SES_BOUNCES_TOPIC Отказ
  • Установите тип уведомления в Отказов Отказ
  • Установите удостоверение личности на домен электронной почты, например. Установка на example.com установит его на электронные письма в example.com домен.
  • Включите оригинальные заголовки электронной почты в уведомлениях SNS.

Шаг 5: Убедитесь, что политики IAM находятся так, чтобы Amazon SNS имеет доступ для публикации в соответствующие очереди SQS

Я буду использовать Источник данных: AWS_IAM_POLICY_DOCUумник Чтобы настроить политику IAM, чтобы разрешить тему SNS отправлять сообщения в очередь SQS и использовать Ресурс: aws_sqs_queue_policy установить политику очереди.

data "aws_iam_policy_document" "ses_bounces_queue_iam_policy" {
  policy_id = "SESBouncesQueueTopic"
  statement {
    sid = "SESBouncesQueueTopic"
    effect = "Allow"
    actions = ["SQS:SendMessage"]
    resources = ["${aws_sqs_queue.ses_bounces_queue.arn}"]
    principals {
      identifiers = ["*"]
      type = "*"
    }
    condition {
      test = "ArnEquals"
      values = ["${aws_sns_topic.ses_bounces_topic.arn}"]
      variable = "aws:SourceArn"
    }
  }
}

resource "aws_sqs_queue_policy" "ses_queue_policy" {
  queue_url = aws_sqs_queue.ses_bounces_queue.id
  policy = data.aws_iam_policy_document.ses_bounces_queue_iam_policy.json
}
  • Установите идентификатор для документа политики.
  • Разрешить отправку сообщения на ses_bounces_queue Очереди SQS.
  • Разрешить это по всем принципам. Мы, вероятно, можем заблокировать его, чтобы просто AWS ARN’s Отказ
  • Сдерживайте политику, чтобы доступен доступен только тогда, когда запрос возникает из SES_BOUNCES_TOPIC Отказ
  • Установите URL-адрес очереди SQS в ses_bounces_queue Отказ
  • Установите политику.

Следующие шаги

Вы можете увидеть код здесь Отказ

Пока что мы настроили AWS, чтобы опубликовать уведомления об отказе к очереди SQS. В следующем посте мы увидим, как мы можем настроить AWS Lambda для обработки сообщений в очереди и отправить пользовательское сообщение на Slack Channel.

Читать Часть 2

Оригинал: «https://dev.to/ankursheel/how-to-handle-bounces-in-aws-ses-using-terraform-2h6»