SES のバウンス、苦情、拒否イベントをシミュレートする
シミュレーターアドレスを使って、実際の受信者にメールを送ることなく SES のバウンス、苦情、拒否通知をトリガーする方法。
SES には、実際の受信者に本物のメールを送信することなく、アプリケーションがバウンス、苦情、拒否通知をどのように扱うかをテストするためのシミュレーターアドレスが用意されています。詳細は公式ドキュメントを参照してください。
前提条件
始める前に、以下を完了させてください。
- AWS SES にメールアドレスを登録する。
- 登録したメールアドレスに対して Email Feedback Forwarding を有効化する。

バウンスのシミュレーション
バウンスは以下でシミュレートできます。
aws ses send-email \ --from <YOUR_EMAIL> \ --subject test \ --text test--from オプションで指定したアドレスに、バウンスが発生したことを示すメールが届きます。

苦情のシミュレーション
苦情も同様のパターンで、異なるシミュレーターアドレスを指定します。
aws ses send-email \ --from <YOUR_EMAIL> \ --subject test \ --text test苦情を示すメールが --from アドレスに送信されます。

拒否のシミュレーション
拒否をシミュレートするには、EICAR テストファイルを添付したメールを送信する必要があります。SES のウイルススキャンがこれを検知します。
FROM=<YOUR_EMAIL>MESSAGE='{"Data": "From: $FROM\nTo: $FROM\nSubject: test\nMIME-Version: 1.0\nContent-type: Multipart/Mixed; boundary=\"NextPart\"\n\n--NextPart\nContent-Type: text/plain\n\ntest\n\n--NextPart\nContent-Type: text/plain;\nContent-Disposition: attachment; filename=\"sample.txt\"\n\nX5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\n\n--NextPart--"}'MESSAGE=$(echo $MESSAGE | sed "s/\$FROM/$FROM/g")aws ses send-raw-email \ --cli-binary-format raw-in-base64-out \ --raw-message "$MESSAGE"FROM アドレスに拒否通知メールが届きます。

まとめ
この 3 つのシミュレーターアドレスを使えば、実際の受信者にメールを送ることなく、SES のバウンス、苦情、拒否通知をトリガーできます。[email protected] と [email protected] は、単純な send-email の呼び出しだけで、最も一般的な 2 つの通知経路をカバーしてくれます。おかげで、実際の受信者が関わるよりずっと前の段階で、そのハンドリングロジックを検証できます。拒否のケースはもう少し手間がかかり、単純なテキスト本文ではなく、EICAR フラグの立った添付ファイルを含む MIME ペイロードを伴う send-raw-email が必要です。ただ、この余分な手順を踏む価値はあります。バウンスを処理するのと同じコードパスがウイルススキャンによる拒否も正しく処理してくれると当てにするのではなく、明示的にテストしておくべきだからです。
Related posts
Cognito User PoolsとOIDCでSlackサインインを実装する
Cognito user poolをOIDC経由でSlackと連携させ、"Sign in with Slack"をAmplifyでNext.jsアプリに組み込みます。
Lambda Web AdapterでFastAPIをAWS Lambdaにデプロイする
Lambda Web Adapterを使うと、FastAPIで書いたAPIバックエンドをコンテナのまま単一のLambda関数にデプロイできます。
API Gateway WebSocket:モック統合の実装
バックエンドのLambdaを一切使わず、モック統合のみでAPI Gateway WebSocket APIを構築し、あらかじめ用意されたレスポンスを返します。
CloudFront署名付きURL経由でS3にアップロードする
CloudFrontの署名付きURLを使えば、独自ドメイン経由でS3にアップロードできます。S3の直接の署名付きURLが使えない場合に有用です。
AWS EventBridge Scheduler:スケジュールに沿ってEC2を起動・停止する
Lambdaを介さずEventBridge SchedulerがEC2 APIを直接呼び出すことで、cronスケジュールに従ってEC2インスタンスを起動・停止します。
