djangoのAWSのSESの設定でハマった。

動かして学ぶ!Python Django開発入門

動かして学ぶ!Python Django開発入門

この技術書でdjangoをお勉強してます。
読んでもよく分からないところはとりあえず、そのまま本の通りに設定したり、コード書いたりして、どんどん次に進むようにしてます。
最後の方で本番環境(EC2でWEBサーバ&DB)からユーザ認証の為のメール送信設定をしているのだけど、ドハマりしたのでメモを残します。
技術書の中ではテスト環境(ローカルPC)でのユーザ認証はやっているけど、本番環境のユーザ認証はやってません。機能としては設定しています。
なので、自身の興味本位で本番環境のメール送信でのユーザ認証をやってみましたが、ドハマりしてしまった。
本番環境でのログ出力設定をしているのでエラー発生時はログを参照しました。

色々やってみたんですがこんなログが出力されてました。(このログが出力する前にはus-east-1と出てました。)

mail address is not verified. The following identities failed the check in region AP-NORTHEAST-1: webmaster@localhost

現在はAWSのSES(Simple Email Service)の提供リージョンに東京(ap-northeast-1)が最近追加されたらしいのですが
技術書が書かれたときにはまだ東京がなかったのでバージニアを選択してね!と書いてありました。
しかし、そんな事情は知らなかったのでSESの設定時、使えるなら東京リージョンがいいと思い、本の内容と違ってますが東京を使用してました。
サインアップする際に500番台エラーが出力されて、先に進みませんでした。ただログにはバージニアリージョン(us-east-1)がどうたらこうたらと出力されて、そんな設定どこでしんてんの?となり、2日間くらいハマりました。

結果としてはsettings.pyにて、SESの設定を東京にして、送信元のメールアドレスを設定したら、出来ました。

AWS_SES_REGION_NAME = os.environ.get('AWS_SES_REGION_NAME')
AWS_SES_REGION_ENDPOINT = os.environ.get('AWS_SES_REGION_ENDPOINT')
DEFAULT_FROM_EMAIL = <SESで認証した送信元メールアドレス>

設定方法としては.bash_profileに設定値を書いて、settings.pyは

os.environ.get('AWS_SES_REGION_NAME')

のように.bash_profileから値を読み込んで使用します。

WEBサーバの再起動方法がよくわからなかったのでEC2インスタンスの再起動をしました。再起動後のnginxは再起動対応してるけど、gunicornは再起動対応してないので、手動起動しました。で、とりあえずはユーザ認証メール送信も出来て、認証後のログインも出来ました。

開発環境(ローカルPC)ではコンソールに認証リンクが出力されていたので、それで認証出来たんですが、本番環境はSESでメール送信して、認証リンクを送信する際にハマってしまいました。リージョン毎にSESの設定が可能らしいので、気を付けないと気づかずに時間だけが経ちそうで怖い。