TerraformでSESの設定をする機会があったので記事にします。
SPFとDKIMとDMARCの認証を含めてまるっとTerraformでデプロイします。
なお、DNSはすでに作成済みのRoute 53ホストゾーンを使う想定です。
設定手順
Terraformコード
まずはSESのIDを定義します。
ドメイン名はこのあとよく出てくるので変数で定義しておきます。
1 2 3 4 5 6 7 8 9 | variable "domain_name" { type = string default = "iret.media" } # SES resource "aws_ses_domain_identity" "main" { domain = var.domain_name } |
次にDKIMとSPFの設定を定義します。
(depends_onは明示しなくても通るかもしれないですが念のため)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | ## For DKIM resource "aws_ses_domain_dkim" "main" { domain = var.domain_name depends_on = [ aws_ses_domain_identity.main ] } ## For SPF resource "aws_ses_domain_mail_from" "main" { domain = var.domain_name mail_from_domain = "mail.${var.domain_name}" depends_on = [ aws_ses_domain_identity.main ] } |
最後にDNSレコードを定義します。
SESのID・SPF・DKIM・DMARCの認証をしています。
01 02 03 04 05 06 07 08 09 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 | # For SES resource "aws_route53_record" "ses_txt" { zone_id = aws_route53_zone.primary.zone_id name = "_amazonses.${var.domain_name}" type = "TXT" ttl = "600" records = [aws_ses_domain_identity.main.verification_token] } # For DKIM resource "aws_route53_record" "ses_dkim" { count = 3 zone_id = aws_route53_zone.primary.zone_id name = "${element(aws_ses_domain_dkim.main.dkim_tokens, count.index)}._domainkey.${var.domain_name}" type = "CNAME" ttl = "600" records = ["${element(aws_ses_domain_dkim.main.dkim_tokens, count.index)}.dkim.amazonses.com"] } # For SPF resource "aws_route53_record" "ses_spf_mx" { zone_id = aws_route53_zone.primary.zone_id name = aws_ses_domain_mail_from.main.mail_from_domain type = "MX" ttl = "600" records = ["10 feedback-smtp.ap-northeast-1.amazonses.com"] } resource "aws_route53_record" "ses_spf_txt" { zone_id = aws_route53_zone.primary.zone_id name = aws_ses_domain_mail_from.main.mail_from_domain type = "TXT" ttl = "600" records = ["v=spf1 include:amazonses.com ~all"] } # For DMARC resource "aws_route53_record" "ses_dmarc" { zone_id = aws_route53_zone.primary.zone_id name = "_dmarc.${var.domain_name}" type = "TXT" ttl = "600" records = ["v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@${var.domain_name}"] } |
Terraformデプロイ
変更内容を確認します。
1 | terraform plan |
内容確認して問題なければデプロイします。
1 | terraform apply |
デプロイが完了すれば、SESのIDの作成からSPF・DKIM・DMARCの設定まで完了します。