Step Functionsのサービス統合を利用してAmazon SESをゆっくり暖気してみた
今回、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ヘルプ メール送信者のガイドライン