Недавно я должен был работать над заданием, чтобы уведомить нас в расслаиваться всякий раз, когда электронное письмо, которое было отправлено через 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»