【ITニュース解説】AWS SES -> Gmail using Terraform
2025年09月21日に「Dev.to」が公開したITニュース「AWS SES -> Gmail using Terraform」について初心者にもわかりやすく解説しています。
ITニュース概要
AWSとTerraformを使い、自分のドメインを使ったメールアドレスをGmailで管理する方法を解説。メールサーバーを自分で持たずに、AWS SES、S3、Lambdaを使い、受信メールをGmailへ転送し、返信も可能にする設定手順を紹介する。
ITニュース解説
システムエンジニアを目指す皆さんにとって、インターネットの仕組みやクラウドサービスは避けて通れないテーマだ。今回は、自分のウェブサイトのドメインでメールアドレスを持ちたいけれど、メールサーバーの管理は避けたい、というよくある要望を、AWSのサービスとGmailを使って実現する方法について解説する。この方法は、インフラをコードで管理する「Infrastructure as Code (IaC)」の考え方を取り入れ、Terraformというツールを使用している点も注目に値する。
まず、このソリューションが解決しようとする課題は、カスタムドメインのメールアドレス(例:info@yourdomain.com)を持ちながら、Gmailのような使い慣れたインターフェースでメールを管理したい、というものだ。通常のメールサーバーを構築・運用するには、セキュリティ対策やメンテナンスなど専門的な知識と手間がかかる。このソリューションでは、AWSのクラウドサービスを活用することで、これらの手間を大幅に削減できる。
このシステムの大まかな流れは次のようになる。誰かがあなたのカスタムドメインのメールアドレス宛にメールを送信すると、そのメールはまずAWSの「Simple Email Service (SES)」というメール送受信サービスに届く。SESは、受信したメールをAWSの「Simple Storage Service (S3)」というストレージサービスに保存する。S3に新しいメールが保存されると、それを検知してAWSの「Lambda」というサーバーレスなプログラム実行サービスが自動的に動き出す。LambdaはS3に保存されたメールの内容を読み取り、最終的にあなたのGmailアドレスへそのメールを転送する。これにより、あなたはGmailの受信トレイでカスタムドメイン宛のメールを受け取ることができ、さらにカスタムドメインのメールアドレスとして返信することも可能になる。
この一連のシステムを構築するために、私たちはAWSの様々なサービスとTerraformを利用する。 AWS SES(Simple Email Service) は、大量のメールを効率的に送受信するためのサービスだ。ここでは、あなたのカスタムドメインのメールを受信し、他のAWSサービスへ引き渡すゲートウェイの役割を果たす。メールの信頼性を確保するため、「DKIM」や「SPF」、「DMARC」といった認証設定もSESと連携して行う。これらは、メールが正当な送信元から送られたものであることを証明し、スパムメールと区別するために非常に重要だ。
次に、AWS Route53 はAWSが提供するDNS(Domain Name System)サービスである。DNSは、ウェブサイトのアドレス(ドメイン名)と、そのウェブサイトが置かれているサーバーの場所(IPアドレス)を結びつけるインターネットの「電話帳」のようなものだ。このソリューションでは、Route53に「MXレコード」という設定を追加する。MXレコードは、あなたのカスタムドメイン宛のメールがどこに送られるべきかを指定するもので、この設定をSESのサーバーに向けることで、カスタムドメイン宛のメールが正しくSESに届くようになる。また、前述のDKIM、SPF、DMARCといったメール認証に関するレコードもRoute53に設定し、メールの信頼性を高める。
AWS S3(Simple Storage Service) は、非常に信頼性の高いオブジェクトストレージサービスだ。ここでは、SESが受信したカスタムドメイン宛のメールを一時的に保存する「バケット」として機能する。S3バケットは、ファイルが追加されるなどのイベントが発生した際に、特定の処理を自動的に実行する「イベント通知」の機能を持っている。この機能を利用して、新しいメールがS3に保存されたことを検知すると、次のステップであるLambda関数を呼び出すトリガーとなる。
AWS Lambda は、サーバーを管理することなくコードを実行できるサーバーレスコンピューティングサービスだ。S3バケットからメールが到着したことを通知されると、Lambda関数が自動的に起動する。このLambda関数の中には、S3からメールを読み込み、メールの内容を解析し、それを指定されたGmailアドレスにSESを使って転送するためのPythonコードが書かれている。Lambdaが他のAWSサービスと連携するためには、適切な権限設定が必要だ。これを「IAM(Identity and Access Management)」というサービスで管理し、Lambda関数がS3からファイルを読み取ったり、SESを使ってメールを送信したりするための最小限の権限を与える。
これらのAWSサービスの設定は、すべて「Terraform」というツールを使ってコードで記述される。Terraformは「Infrastructure as Code (IaC)」を実現するための一つの主要なツールであり、クラウドインフラストラクチャの構築、変更、バージョン管理を安全かつ効率的に行うことができる。これにより、手動での設定ミスを防ぎ、同じ環境を何度でも簡単に再現できるようになる。Terraformの設定ファイルには、SESのドメイン認証、Route53の各種DNSレコード、S3バケットの作成とイベント通知設定、Lambda関数のコードと実行環境、IAMロールとポリシーといった、このシステムを構成するすべての要素が定義されている。
システムがTerraformによって構築された後、最後のステップはGmail側での設定だ。Gmailのメール設定画面で、あなたのカスタムドメインのメールアドレスを「別のメールアドレスとして送信」するためのエイリアスとして追加する。この際、メールの送信にはAWS SESのSMTPサーバーを利用する設定を行う。これにより、Gmailのインターフェースからカスタムドメインのメールアドレスとして返信を送信することが可能になる。SESのSMTPサーバーに接続するためには、Terraformの実行結果として出力されるユーザー名やパスワードといった認証情報が必要となる。
最後に、重要な注意点として、AWS SESには「サンドボックスモード」という初期状態がある。このモードでは、未検証のメールアドレスにはメールを送信できないという制限があるため、カスタムドメイン宛に届いたメールを検証済みのGmailアドレスに転送することはできても、そのGmailアドレスから任意のアドレスにカスタムドメインとして返信しようとすると、受信者が未検証のため送信できない場合がある。この制限を解除し、自由にメールを送受信できるようにするには、AWSサポートに連絡してサンドボックスモードの解除を申請する必要がある。この申請が承認されれば、あなたはカスタムドメインのメールアドレスで、誰とでも自由にメールのやり取りができるようになる。
このソリューションは、クラウドサービスの組み合わせとIaCの原則を活用することで、複雑なメールサーバーの運用から解放され、柔軟かつ強力なメール環境を手に入れる方法を示している。システムエンジニアを目指す皆さんにとって、このようなクラウドサービスの連携やIaCの考え方は、現代のシステム開発において不可欠なスキルとなるだろう。