0
1

メールをSES→S3に保存する(terraform)

Posted at

SESからS3にメールを保存したい

メールの処理で大きいファイルなどを扱うとき、SNSを使っているとキャパシティーをオーバーしてしまいます。

SES+SNS構成

構成としては以下になります。
SESでEメールを受信できるようにし、メールを送信します。
SESのアクションとしてSNSトピックへの発行を行います。
SNSからは処理用のLambdaへ通知をして処理を行います。
しかし、メールの容量が150KBを超えてしまうとそもそもLabmdaに通知されず、処理もできません。
image.png

SES+S3(SNS)構成

そこでS3を使用した構成に変更を行います。
S3を使用すると、150KBを超えるような大きいメールを受信することが可能になります。
公式のページ: S3バケットアクションへの配信

構成は以下の通りです。
先ほどと違う点は受信したメールをS3へ配信するというところです。
SESのアクションとして「S3へ配信」+「SNSへ通知」の様にできるのでこちらを使用します。
SNS→Lambdaの流れは同じです。
Lambdaに通知された内容にはS3のバケット情報、オブジェクトのキー情報が含まれているのでこれらの情報からS3へメールを取得しに行くという形になります。
image.png

terraformで作成

  • S3を作成
    まずはSESからS3に配信するためのS3バケットを作成します。
    有効期限は7日間とします。
resource "aws_s3_bucket" "mailbox" {
  bucket = "mailBacket"
}

resource "aws_s3_bucket_lifecycle_configuration" "mailbox" {
  bucket = aws_s3_bucket.mailbox.id
  rule {
    id = "mailbox"

    expiration {
      days = 7
    }

    status = "Enabled"
  }
}
  • SNSを作成
    オプションとして通知するためにSNSを作成します。
    SNSからのエンドポイントにはメールを処理するLambdaを指定します。
resource "aws_sns_topic" "mail_notification" {
  name = "mail-notification"
}

resource "aws_sns_topic_subscription" "notification_mail" {
  topic_arn = aws_sns_topic.mail_notification.arn
  protocol  = "lambda"
  endpoint  = aws_lambda_function.mail_recv.arn
}
  • SESを作成
    aws_ses_receipt_rule_setでルールセットを作成し、aws_ses_active_receipt_rule_setで有効化します。

aws_ses_receipt_ruleの受信ルールではs3_actionを使ってS3バケットにメール内容を配信できるようにします。
topic_arnにSNSを指定することでオプションとして通知を送ることができます。

resource "aws_ses_receipt_rule_set" "main" {
  rule_set_name = var.ses_rule_set_name
}

resource "aws_ses_receipt_rule" "main" {
  name          = "mailnotify-ses"
  rule_set_name = var.ses_rule_set_name
  recipients    = ["${var.recipient_name_prefix}@${var.email_domain}"]
  enabled       = true
  scan_enabled  = true

  s3_action {
    bucket_name = "${aws_s3_bucket.mailbox.id}"
    topic_arn   = aws_sns_topic.mail_notification.arn
    position    = 1
  }
}

resource "aws_ses_active_receipt_rule_set" "main" {
  rule_set_name = "${aws_ses_receipt_rule_set.main.rule_set_name}"
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1