fbpx

メニュー

WordPress+AWSならSESでメールサーバーを持たない運用

高橋文樹 高橋文樹

この投稿は 8年 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。

WordPressでサイトを複数持っているとき、AWSでやっていると結構お金がかかります。全部のサイトが流行るわけではないので、さして人が来ないであろう過疎サイト(月10万PV以下)を全部まとめたいですね。

お財布が一つ(=お金を払う人が同じ)の場合、構成としてはこんな感じでやってます。

  • EC2(Webサーバ)はt2.microで。必要があればスケールアップ(スケールアウトはもっと流行ってから)。t2.nanoでもいけるかもしんない。基本的にPHP-FPMとNginx以外は入れない。
  • MySQLはRDSのt2シリーズ。Aurora(m4.large相当?)にする金がない。複数のWordPressはこの一台にぶっこむ。CPUクレジット使い切ったら終了。
  • あとはまあ、お財布に余裕があればElastic Cache使うとか。1つのサイトで1つ以上のサーバを使わない場合、いらないでしょう。

DBが全体で1,500円ぐらい、EC2が1台あたりリザーブドで1,000円切るかなという感じです。本当はこの上にCloudFlareがかぶさってるんですけど、説明が面倒くさいので割愛。

構成としてはこんな感じ
構成としてはこんな感じ

メールサーバをどうするか?

普通のレンサバを借りるとメールサーバーもついてくるので、それでいいのですが、AWSを使っている場合、メールサーバーを自分で立てる必要があります。

Postfixとかいじったことある人はわかると思うんですが、メールをまともに使えるようにするのって、結構面倒くさいんですよね。送信もさることながら、受信がメンドイ。以前、PostfixAdmin + Dovecot + MySQL + RoundMailでそれなりにちゃんとしたメール環境を作りました(こんなの→Postfix + Dovecot 2 + PostfixAdmin + MySQL)が、手順が面倒すぎて忘れました。

これがめんどくさすぎるので、「だったらレンサバでいいかな……」という結論を下すのもアリだとは思います。

簡単な方法:Gメールなどを使う

どんな類のサイトなのかわかりませんが、なんでもいいのであれば、WP Mail SMTPというプラグインを使うことで完了です。

ブログとかであればGmailで問題ないと思います。こうなります。

外部のGmailサーバ
外部のGmailサーバ

難しい方法:SESを使う

とはいえ、新しく取った独自ドメインでメールを送りたかったり、なんらかの理由で外部のSMTPサーバが使えない場合、メールサーバーを用意する必要があります。

今回はSESを使うことにします。SESは一応料金がかかるのですが、ぱっとみ大してかからないように思えるので、「無料」と考えます。

SESは現在3箇所(バージニア北部、オレゴン、アイルランド)でしか提供されていません。距離的にオレゴンが近いんですかね?

とりあえず、SESのホーム画面に行くと、リージョンを選べと言われるので、適当に選びます。で、その後ドメインの設定を行います。

ドメインを設定する

まず、メールを使うので、ドメインを設定します。一番楽なのは、Route53というAWSのDNSを利用すること。勝手に設定値を入れてくれます。

それが駄目な場合、別のDNSに言われたとおりの値を設定すればよろしいです。基本的にやることはこれ。

MXレコード
そのドメインあてのメールをどこに送ればいいのかを教えてくれるレコード。AWSのわけわかんないサブドメインをCNAMEで入れろと言われるはずです。
DKIMレコード
Domainkey Identified Mailの略。そのメールを送信したドメインが正しいかどうかを確認するためのレコード。AWSのわけわかんなサブドメインを以下略。
SPFレコード
Sender Policy Frameworkの略。DKIMと同じく、「このメールを送信したドメインは嘘ついてませんよ」という証明を行うレコード。AWSのわけわかんない以下略。

ほとんど迷惑メール対策ですね。メールというプラットフォームがいかに終わっているかの証明のように思えます。きちんと設定できていればオッケーと出るはず。

オッケーだとこんな感じに
オッケーだとこんな感じに

メールアドレスの設定

続いて、メールアドレスを作成します。wordprses@example.com とか、 admin@example.com を登録します。Email Addressesから Verify a New Email Addressをクリック。

新しいメールアドレスを登録
新しいメールアドレスを登録

が、当然ながら、まだ受け取る設定をしていないので、ステータスがpending verificationのままです。

ステータスがオレンジのまま
ステータスがオレンジのまま

受信メールをS3に保存

SESのメールはいわゆる「メールボックス」がありません。したがって、それを設定しなければならないのですが、選べるのはなんとS3! 生のメールファイルが保存されます。

とりあえず、このためにRules Setsというものが存在しています。これは「メールが届いたらなんかする」というアクションフックのようなものですね。

ルールセットを作成する
ルールセットを作成する

AWSにやり方が書いてありますので、そのとおりに行ってください。新しいバケット(ドメインと同じでいいでしょう)を作成して、そこに保存するようにします。上手く行けば、再度認証メールを送信(resendというリンクをクリック)することで、該当するS3のバケットにファイルが作られます。そこに書いてあるURLにブラウザで移動すれば、認証完了。

サンドボックスモードの解除

SESの設定がちゃんとできたら、今度は外部にメールを送れるようにしないといけません。SESはデフォルトだとサンドボックスに入っており、外部(登録していないドメイン)にメールを送れません。

これはアナログにフォームから申請する必要があります。1日ぐらいで返事が来ます。

S3のメールを外部に転送する

一応、この時点で送信はできるようになっています。SESのダッシュボードからSMTP Settingsに行くと、認証情報の作成(IAMユーザーの作成)が促されるので、そのとおりやると、上で紹介したWP SMTP Mailで送信できます。

さて、メールが届くといっても、受信メールがS3に保存されるだけじゃ、届いたことを知ることもできませんよね? そこでS3にメールが届くと、それを転送しましょう。たとえば、gmailのアドレスであなたが使っているものに you@gmail.example.com というアドレスがあったとして、そこに送るわけですね。

どうやって転送するかというと、Lambdaを使います。転送用のファイルをGithubで公開している人がいるので、その通りにやります。

AWS Lambda SES Email Forwarder

他にもぐぐると色々出てきますが、これはコピペで済むので楽です。これでメールが転送されてきます。最終的な構成はこうなります。

もう線が入らない……
もう線が入らない……

こうまでしてSESを使う意味はあるのか?

ちなみに重要なことを書いていませんが、ぼくの経験だと、SESのメール到達率はあまり高くありません。Yahoo! メールやキャリアメールなどで迷惑メールとしてはじかれる率が高いです。

そうなると、こんだけ長ったらしく説明しておいてなんだったんだという気にもなってきますね、ハイ。

「AWSなんて高いし、めんどくさいし、レンサバの方がいい!」という人には沢山あってきましたし、短期的な視野で見るとその通りだと思います。基本的には安いというより、スケーラビリティと柔軟性が売りなので、そういう使い方をしない限りありがたみはわからないでしょう。

ただ、今後もクラウドの市場は拡大していきますし、サーバーレスなんかのとっつきづらい概念も多く出てきました。未来への投資だと思って、月々数千円をかけてみるのは悪くない選択ではないでしょうか。おしまい。

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

価格¥23

順位248,473位

大澤 文孝

監修アマゾン データ サービス ジャパン 玉川 憲, アマゾン データ サービス ジャパン 片山 暁雄, アイレット 鈴木 宏康

編集日経SYSTEMS

発行日経BP

発売日2015 年 3 月 5 日

Amazonを開く

Supported by amazon Product Advertising API

すべての投稿を見る

高橋文樹ニュースレター

高橋文樹が最近の活動報告、サイトでパブリックにできない情報などをお伝えするメーリングリストです。 滅多に送りませんので、ぜひご登録お願いいたします。 お得なダウンロードコンテンツなども計画中です。