はじめに

2024年5月にAWSから一般提供(GA)が開始された「SES Mail Manager」をご存知でしょうか?
従来のSES受信(Receipt Rules)よりも高度なルールエンジンやIngress Point(受信口となるエンドポイント)の管理機能が備わった、「企業グレードのメールゲートウェイ(E-mail Security Gateway)」としての機能をSESに追加するマネージドサービスです。
従来のSESが「プログラムからの送受信」に特化していたのに対し、Mail Managerは組織全体のメールトラフィックの統制、アーカイブ、ルーティングを担います。

今回は、このSES Mail Managerを使って「受信したメールをS3にアーカイブしつつ、VPC内のEC2で稼働するsmtp4dev(外部SMTPサーバー相当)にリレーする」という実験を行いました。
さらに、この検証環境全体の構築からトラブルシューティングまでを、Antigravity をはじめとする複数のAIを適材適所で活用しながら進めた過程をレポートします。

実験の目的と構成

今回のゴールは、「カスタムドメインを用意せず、AWSが提供する既存のドメイン(Ingress Endpoint)のみを使ってメール受信フローを検証する」 ことです。

主な構成要素

  • AWS SES Mail Manager: 受信口(Ingress Point)、振り分けルール(Rule Set)、リレー設定(Relay)。
  • S3バケット: 受信メールの生データ保存用。
  • EC2 (Docker + smtp4dev): リレーされたメールをWeb GUIで確認するための仮想SMTPサーバー。
  • Terraform 1.5+: インフラ全体のコード化(IaC)。

アーキテクチャ図(イメージ)

検証環境構成図

Terraformによる構築のポイント

1. Ingress Point の活用

SES Mail Managerでは「Ingress Point」という受信口を作成します。今回は検証を容易にするため、認証なしで受け入れ可能な OPEN タイプを使用しました。これにより、作成時に発行されるエンドポイント(vpce-xxx.open.mail-manager-smtp.ap-northeast-1.vpce.amazonaws.com)に対して直接メールを送ることができます。

2. Rule Set のアクション定義

受信したメールに対して何をするかを Rule Set で定義します。今回は一つのルールの中に「S3への書き込み」と「Relayを通じたEC2への転送」の2つのアクションを定義しました。
※ここで awscc プロバイダー特有のスキーマ(プロパティ名が s3 ではなく write_to_s3 である点など)に苦労しましたが、AIが即座に修正案を提示してくれました。

現場で遭遇したトラブルとAIによる解決

今回の検証では、いくつかの「ハマりポイント」がありました。Antigravityがどのようにサポートしてくれたかを併せて紹介します。

① TLSとHELO、そしてポート25の壁

EC2から swaks コマンドでテストメールを送信した際、SES側から接続を拒否されました。

  • 原因:
  1. SESエンドポイントは STARTTLS を必須としており、かつ適切な HELO 文字列を求めていました。
  2. SES Mail ManagerからEC2への通信が、AWSの標準的な制限(OP25B等のスパム対策)に抵触していたようです。
  • 解決:
  1. swaks コマンドに --tls--helo [IP] を追加し、さらにEC2に必要なPerlモジュールをインストールするよう user_data を修正。
  2. 通信ポートを 25 から 1025 などに変更して制限を回避しました。
    【最終的なテストコマンド例】
swaks --to test@example.com --from test@example.com --server vpce-XXXXX.open.mail-manager-smtp.[region].vpce.amazonaws.com --port 1025 --helo localhost --tls

② セキュリティグループとリレー先の疎通

メールは受理されるものの、smtp4devに届かない問題が発生。

  • 原因: EC2のSGでポート25をVPC内に絞っており、SESマネージドリレーからのパブリックアクセスが遮断されていました。
  • 解決: SGのポート25を 0.0.0.0/0 に公開(検証用)することで疎通を確認。また、リレー先でもSTARTTLSが有効であることを確認するため以下のコマンドでTLS応答テストも実施し、EC2のDockerポートマッピング等の見直しも行いました。
swaks --server [smtp4devのIP_ADDRESS] --port 25 --quit-after STARTTLS

③ SESのサンドボックス制限(検証済みID)

CloudWatch Logs上で調査すると、リレーアクション以前に送信自体が拒否される挙動も発見できました。

  • 原因: AWSアカウント内のSESがサンドボックス制限下にあり、未検証の宛先への送信が弾かれていました。
  • 解決: CloudWatch Logsの出力エラーを元に、Antigravityとは別のAIに解析を依頼したところ、サンドボックス制限が原因であると特定されました。これに従い、AWSコンソールの「検証済みID」にテスト送信で使うメールアドレスを登録して解決しました。

複数のAIを活用した検証のメリット

今回の検証において、AIは単なる「コード生成機」ではありませんでした。

  1. 得意分野の掛け合わせ: コード構築や全体進行はAntigravityに任せつつ、特定のエラーログ解析は別のAIに任せるなど、複数のAIを組み合わせることで解決までのリードタイムが大幅に短縮されました。
  2. 作業履歴の自動記録: 複雑なトラブルシューティングの過程を「履歴」としてマークダウンで残すよう指示することで、後からの振り返りやこの記事の執筆が非常にスムーズになりました。
  3. 最新リソースへの追従: まだ比較的新しい awscc プロバイダーの独特な記述ミス(PascalCaseとcamelCaseの混在など)を即座にAIが指摘・修正してくれました。

まとめ

AWS SES Mail Managerは、非常に柔軟で強力なメール基盤です。カスタムドメインなしのIngress Point機能は、クローズドな環境やPoCにおいて非常に有用だと感じました。

また、インフラ構築におけるAIの活用は、単に「早い」だけでなく、「試行錯誤のプロセスを資産化する」という点において非常に強力な武器になります。

皆さんもぜひ、SES Mail ManagerとAIを活用したインフラ構築を試してみてください!