今回、Amazon SESの利用実績が少ない環境で、 AWS Step Functions の AWS SDK サービス統合と EventBridgeを利用した 暖気を試みる機会がありましたので、 紹介させていただきます。
StepFunctions
Amazon SESを設定済みのリージョンに、「Express」タイプのステートマシンを作成しました
デザイン
Map
送信先メールアドレスを1件ずつ、2秒の待機時間を待って処理する定義を行いました。
SendEmail
AWS SDK サービス統合を利用し、sesv2 の sendEmailを実行しました。
送信元メールアドレス(FROM)と、表題(Subject)には、ステートマシン実行時の引数を利用する設定にしました。
Contextオブジェクトより実行時間と実行環境のARN(Id)を取得して、メール本文に反映する指定としました。
Code定義
{
"Comment": "Amazon SES warmup",
"StartAt": "Map",
"States": {
"Map": {
"Type": "Map",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "SendEmail",
"States": {
"SendEmail": {
"Type": "Task",
"Next": "Wait",
"Parameters": {
"FromEmailAddress.$": "$$.Execution.Input.FromAddress",
"Destination": {
"ToAddresses.$": "States.Array($)"
},
"Content": {
"Simple": {
"Subject": {
"Data.$": "$$.Execution.Input.Subject"
},
"Body": {
"Text": {
"Data.$": "States.Format('StartTime: {}, \n Id: {}', $$.Execution.StartTime, $$.Execution.Id)"
}
}
}
}
},
"Resource": "arn:aws:states:::aws-sdk:sesv2:sendEmail"
},
"Wait": {
"Type": "Wait",
"Seconds": 3,
"End": true
}
}
},
"End": true,
"ItemsPath": "$.Addresses",
"MaxConcurrency": 1
}
}
}
実行ロール
ステートマシンにSESのSendmail操作を許可するため、 作成時に自動作成されたロールに対しインラインポリシーを追加しました。
- インラインポリシー (ses:SendEmail)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ses:SendEmail",
"Resource": "arn:aws:ses:<リージョン>:<アカウントID>:*"
}
]
}
テスト実行
3通のテストメールの送信を試みました。
- 入力(JSON)
{
"FromAddress": "warmup@example.jp",
"Subject": "warmup mail",
"Addresses": [
"id1@example.com",
"id2@example.com",
"id3@example.com"
]
}
テスト実行結果
テーブルビューに切り替え、約3秒毎にメール送信された事が確認できました。
SESで送信したメール、Gmailで確認できました。
EventBridge
Amazon EventBridgeのスケジュールを追加しました。
Cron式を利用した定期実行設定を行いました。
ターゲットは作成したStep Functionsのステートマシンを指定しました。
まとめ
Step Functions と、EventBridgeのスケジュールを利用した、SES ウォーミングアップについて紹介させて頂きました。
Amazon SESの送信クォータ、1日に送信可能なメール数は 過去のメール送信実績を元に自動拡張されます。
サービスクォーターやサポートケースを起票する事で、SESの送信クォーターは引き上げ可能ですが、 過去のメール実績が乏しいドメインでは、メール着信側で受け取り拒否される場合もあります。
新規ドメインでAmazon SESを利用する場合、初期段階の1日あたりのメール送信数は100通程度に留め、 SESダッシュボードのバウンス情報や、Gmailのポストマスターツールを利用して 配信エラー、レピュテーションの低下が生じていないことを確認しつつ、1日あたりの送信数を 150、250、400程度にとどまるように、 送付先アドレスと実行間隔を調整。
最終的に必要となる送信数に達するまで、十分余裕の持ったスケジュールを確保して準備されることをおすすめします。
大量のメールを送信する場合は、次のことをおすすめします。
一定のレートでメールを送信します。一度に大量のメールを送信することは避けてください。
承諾しているユーザーへのメールは少ない送信量から始めて、時間をかけて量を増やしていきます。 送信量の増加にあわせて、サーバーのレスポンス、迷惑メール率、送信元ドメインの評価を定期的に監視します。 定期的に監視を行うと、送信レートが制限された場合、迷惑メール率が上昇した場合、送信元ドメインの評価が低下した場合に迅速に対応できます。
過去に大量に送信したことがない場合は、送信量を急に増やすことは避けてください。たとえば、以前の送信量から急に 2 倍に増えると、レート制限や評価の低下につながる可能性があります。
Google Workspaceヘルプ メール送信者のガイドライン