備忘のため。
前提
東京リージョンは2021年1月現在、SESでの受け取りに対応していません。下記は us-east-1
で設定。
tfファイル全体
# account idを取得するためにcaller identityのdataを用意 data "aws_caller_identity" "current" {} # # Route53 # # zoneを作る resource "aws_route53_zone" "domain_zone" { name = "yourdomain.com" } # SESに設定したドメインが自分のものであることを示すためのTXTレコードを作成 resource "aws_route53_record" "ses_validation_record" { zone_id = aws_route53_zone.domain_zone.zone_id name = "_amazonses.yourdomain.com" type = "TXT" ttl = "60" records = [aws_ses_domain_identity.your-domain-identity.verification_token] } # メール受信のためMXレコード作成 resource "aws_route53_record" "mx_record" { zone_id = aws_route53_zone.domain_zone.zone_id name = "" type = "MX" ttl = "60" records = ["10 inbound-smtp.us-east-1.amazonaws.com"] } # # S3 # # S3のバケットを作成 resource "aws_s3_bucket" "your_s3_bucket" { bucket = "yourdomain-unique-email-bucket-name" acl = "private" } # S3のバケットに対しSESからのオブジェクト作成を許可 resource "aws_s3_bucket_policy" "ses_s3_allow_put" { bucket = aws_s3_bucket.your_s3_bucket.bucket policy = <<-EOF { "Version":"2012-10-17", "Statement": [ { "Sid":"AllowSESPuts", "Effect":"Allow", "Principal":{ "Service":"ses.amazonaws.com" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::${aws_s3_bucket.your_s3_bucket.bucket}/*", "Condition":{ "StringEquals":{ "aws:Referer":"${data.aws_caller_identity.current.account_id}" } } } ] } EOF } # # SES # # SESに利用するドメイン名を設定 resource "aws_ses_domain_identity" "your-domain-identity" { domain = "yourdomain.com" } # SES上にreceipt ruleを作る resource "aws_ses_receipt_rule_set" "default_set" { rule_set_name = "default" } # SESで admin@yourdomain.com として届いたものを S3 に作成するルールを作る resource "aws_ses_receipt_rule" "ses_to_s3_rule" { name = "store" rule_set_name = aws_ses_receipt_rule_set.default_set.rule_set_name recipients = ["admin@yourdomain.com"] enabled = true scan_enabled = true s3_action { bucket_name = aws_s3_bucket.your_s3_bucket.bucket position = 2 } } # SES上のreceipt ruleをActiveにする resource "aws_ses_active_receipt_rule_set" "default" { rule_set_name = aws_ses_receipt_rule_set.default_set.rule_set_name }