この記事でわかること
メール受信はしたいけどメールサーバーは立てたくないときに

独自ドメインでのメール受信の仕組みが必要なケースで、メールサーバーを構築して運用していく工数は割かないという条件となりました。そこで、メールサーバー無しでも独自ドメインでメール受信を行うことのできるサーバーレスのシステムをAWSで構築しました。今回は、その手順をご紹介します。

こんな方にぜひご覧いただきたいです
  • 独自ドメインを取得してみたい。
  • AWSをとにかく使ってみたい。サーバーレスに触れてみたい。
  • 手間をかけずにメール送受信をしたい。
このシステムで何ができるの?
  • メールサーバーを構築せずにメールが受信できます。
  • 独自ドメインを使用するため、企業ホームページの問合せ先など、フリーメールが相応しくない場面の受け口として使えます。
  • メールの一斉送信テスト等でメールは受信させたいが、開発者の個人メール宛にはしたくない場面等で使えます。

目次

  1. システム構成 – SES, Route53, S3を使います
  2. 構築手順 – キャプチャ多めで説明します
  3. 気になるお値段

1.システム構成

AWSで使うサービスは上記3つです。
Simple Email Serviceにて受信したメールはLambda等様々な連携先を選択できますが、今回はS3にメールファイルを格納していきます。

AWS(Amazon Web Services – https://aws.amazon.com/jp/)はAmazonが提供しているクラウドプラットフォームで、Amazonの提供するストレージやVMといったシステム構成要素(サービス)を従量課金で使うことができます。サービスの数は150を超えますが、今回はその中から3つのサービスを使用するということになります。

2.構築手順

今回の構築では、まず①独自ドメインを取得することから始め、その次に②独自ドメインとRoute53との連携設定を行った後、③SESでのメール受信設定を行っていきます。

①独自ドメインの取得

まず、メール受信に使用する独自ドメインをドメインレジストラから取得します。「hogehoge@hugahugahuga.jp」の「hugahugahuga.jp」部分ですね。

今回は検証用かつ長期利用しないことを前提に、一定期間無料で使える「freenom」を使用します。

freenom(https://www.freenom.com/ja/index.html)は海外のドメインレジストラのサービスで、「.tk」「.ml」などのドメインを無料で取得することができます。

お金を使えるのであれば、ここは「お名前.com」のような国内サービスに置き換えて「.com」のような有料ドメインを取得することも可能です。

用途によってはお名前.com等で有料で調達することもできますし、Route53自身でドメインを取得することもできます。

freenomに登録・ログインし、言語を日本語に設定しました(何故か右上は「英語」のまま)。
「新しい無料ドメインを探します」欄に利用したいドメインを入力して「利用可能状況をチェックします」を押下します。「.tk」のトップレベルドメインが無料なので今回は「.tk」にしました。

ドメインの利用可能状況が表示されます。
トップレベルドメインが選択できるため、変更する場合は変更したいトップレベルドメインを選択します。
選択後、チェックアウトを押下します。

必要ならPeriodを変更し、Continueを押下します。12Months @FREEに変更しました。

規約を読んだら同意欄にチェックを入れ、CompleteOrderを押下します。
以上でドメインの取得は完了です。

②独自ドメインとRoute53との連携設定

取得したドメインをRoute53で名前解決するように設定していきます。AWSコンソールからRoute53 に移動します。

3か月前くらいに触った時とはRoute53のボタン等のデザインが少し変わっていました(2020年9月現在)。AWSあるあるです。

「ホストゾーンの作成」を押下します。

「ドメイン取得」手順で取得したドメイン名と説明を入力し、「ホストゾーンの作成」ボタンを押下します。

赤枠部分をコピー

タイプ:NSのレコードに表示された4つの値が表示されます。この値をfreenom側に設定することで、freenomとRoute53の紐づけを行います。そのためコピーしておきます。

再度freenomにログインし、ServicesからMy Domainsに遷移します。

Manage Domain を押下します。

Management ToolsからNameserversを押下します。

「Use custom nameservers」を選択します。
先ほどRoute53で表示された4つの値を転記し、「Change Nameservers」を押下します。
以上で紐づけが完了します。

SESでのメール受信設定

メール受信を行うためのルールセットを作成します。
AWSに戻り、SimpleEmailServiceのコンソールに移動します。
※以前はSESは東京リージョンは未対応だったのですが、2020年7月に対応したようです!(https://aws.amazon.com/jp/blogs/news/amazon-ses-tokyo/)

…と思ったら、受信にはまだ未対応でした。

東京リージョンは受信メニューがグレーアウトしてました

おとなしく北米リージョンに切り替え、Rule SetsからCreate a Receipt Ruleと押下します。

Recipient欄にメールアドレスもしくはドメイン名ごと入力し、「Add Recipient」を押下すると行が追加されます。Verification status欄が「Verify domain」になっているので押下します。

Route53にメール受信用のレコードを登録する旨が表示されるので、「Use Route53」を押下します。

ダイアログにRoute53のドメイン設定を書き換える旨が表示されるため、デフォルトのチェックに加えてEmail Receiving Recordにチェックを入れて「Create Record Sets」を押下します。

ダイアログを閉じた後、「Next Step」を押下します。

メール受信時のアクションを選択します。今回は「S3」を押下します。

メール受信用のバケットを選択できますが、事前に作っていないので「Create S3 bucket」から作成することにします。

バケット指定の他にバケット内の階層指定や暗号化、SNS連携設定などができますが、今回はデフォルト値のまま「Next Step」を押下します。

ルール名だけ入力し、「Next Step」を押下します。

デフォルトで用意された「default-rule-set」ルールセットの中の1ルールとして、今回のルールが作成されています。

以上の手順で、メール受信環境が構築できました。

今回はドメインとしてルール設定をしているので「@」以前がどの値でもS3に連携されます。試しに宛先を「test@dlcmailtest.tk」としてメールを送信してみます。

メール送信後、作成されているバケットの中を見てみると、デフォルトで配置されていた「AMAZON_SES_SETUP_NOTIFICATION」ファイルとは別に拡張子のないファイルが配置されています。

このファイルをダウンロードし、拡張子を「.eml」に修正してoutlook等のメールソフトで開くと、先ほど送信したメールであることが分かります。

今回の手順では手動で拡張子を修正していますが、メールファイル作成時に発生するS3イベントを作成し、Lambdaに連携してリネームさせる等の方法で自動化可能です。


今回の構築手順は以上となります。

3.気になるお値段

メールの連携先はLambdaやSQSなど多岐にわたりますので、S3に格納するのはバックアップ程度になるケースが多いかもしれません。実際にS3に構築する際は、プレフィックス設定や受信ルール設定をもっとちゃんと決めましょう!

気になるお値段ですが、SESのメール受信課金は受信回数が1000通以内であれば無料です。
https://aws.amazon.com/jp/ses/pricing/#AWS_Free_Usage_Tier

その他に、Route53はホストゾーン1件につき50円、S3は容量に従って従量課金です。
https://aws.amazon.com/jp/route53/pricing/#Hosted_Zones_and_Records

Route53の50円も、12時間以内に削除した場合は無料です。
トラフィック課金もありますので、実運用の際はもちろんその点も考慮が必要ですが、256KBのメールを月1万件受信する規模でも月間1000円以下には収まりそうです。

VM立ててメールサーバー作るよりははるかに安上がりではないでしょうか。

今後もサーバーレスをはじめとしたクラウド技術の進歩に食らいついていこうと思います!