blogPHPでWEB+DBシステムの開発をやっています。4分37秒とあるイベントで使うWebシステムでEC2を使ってたところ、Amazonからメール送信制限に関する通知が来たという話です。このイベントでは、短時間で多くのリクエストを捌かないといけないので、あらかじめWebサーバを何台か立てて準備していました。想定を超える負荷に備えて、増設用AMIも作成して、すぐに増設できる体制にしていました。増設のリハーサルもやりました。イベントが始まります。アクセスがボチボチ来始めました。リソースにはまだまだ余裕があるので順調に捌いてくれています。無難な立ち上がりだなと、ひと安心したところにメールが一通。+0000......うん?メールの送信制限?何これ?たしかにメール送信は行っていますが、1hで数十通程度です。一気に送るというよりバラバラと送信しています。この程度で制限がくるとは思わなかったのですが、イベント中に送信を止められるとシャレにならないので、すぐにメールに記載されたフォームからメール送信制限解除申請を送りました。Services本文の内容でググってみると同じようなメールが来た人は何人か見つかったのですが、解決したという内容は見あたりませんでした。blockされて、仕方なく外部のメールサーバに別ポートで接続してメールを送信している人もいました。その時点では送信はできていたので、イベントが終わるまではとにかく持ってくれという心境でした。何とか回避策を制限解除申請をしたものの、ぼーと待っていても仕方が無いので取れる策をということであれこれやってみました。送られてきたメールにはインスタンスIDとIPが記載されていたので、別インスタンスとIPなら回避できるかもと思い、作成しておいたAMIから新しいインスタンスを起動しました。IPで別IPを発行しました。これはもともと高負荷時にスケールアウトすることを想定していたのですんなりと準備できました。ここでふと、もしかするとアカウントを停止させられるかも、という考えが頭をよぎりました。なると何台増設していても意味がありません。実際にそうなるかは分かりませんが、とにかく止められないので、新たなアカウントを発行することにしました。登録をこなして、スケールアウト用AMIの共有設定を行い、なんとかLB+Web+DBの構成を構築しました。DNSのTTLは短めにしておいたので、もしアカウントを停止された時はDNSを書き換えて別アカウントの構成にアクセスを向けます。この間もサービスとしては問題無く稼働していました。AmazonからメールがあれこれやっているとAmazonからメールが来ました。内容は「申請を受け付けた」「2営業日以内に回答するよ」といったもの。2営業日以内って!とか思いつつ、とにかく回避策をひたすら準備。サーバログ(主にmaillog)と睨めっこしながらイベントが無事終わるのを待ちます。inboundもoutboundも変なエラーは無く順調に稼働しています。自分でもサイトにアクセスして試してみますが問題ありません。乗り切った!結局、blockされることなく無事にイベントは乗り切ることができました。Amazonからメールが無難にイベントが終わって、ひと息ついていた頃に再びAmazonからメールが来ました。内容は「制限を解除した」とのこと。本文には申請したインスタンス、IPに対する制限を解除しただけなく、アカウントに紐付く全てのインスタンス、IPに対する制限を解除した、と書かれていました。対応は2営業日以内と書かれていたのですが、申請から数時間で対応してもらえたのは驚きでした。IPで割り振ったIPだけは残しておくことにします。EC2からメールを送る際は念のため申請をイベント中に来たAmazonからのNotificationには本当に焦りました。それほど多くのメールを送ったわけではなく、どういった基準でこの通知が来るかは分かりません。イベント前のテストでは問題無かったので、閾値は低いものの一定時間中に一定数を外部に送信すると通知される仕組みなのかもしれません。ここぞの時にblockされるとシャレにならないので、EC2から数多くのメール配信を行うなら、あらかじめ制限解除申請をするなり、別環境を用意するなり準備をしておいた方が良いでしょうね。