らぼるてっく。

てっくてっく歩いてっく。

新人エンジニアがAWS上でOSSのメール配信システム Mailtrainを構築

こんにちは、新卒2年目のバックエンドエンジニアの伊藤です。

1年間の開発経験を経て、先日AWS上での設定から実装までを初めて経験しました!

今回は、ラボルで利用しているメール配信ツールをMailtrainに切り替えるために、AWS上での構築を行った経験について共有します。

背景

ラボルでは以前から利用していたメール配信ツールが処理速度の面で問題があり、運用者からの苦情がきていました。具体的には、メール作成ページに遷移する際にタイムアウトになるほどです。

そのため、私はMailtrainを採用することにしました。Mailtrainは手軽に実装できるだけでなく、必要な要件をすべて満たしていました。他のメール配信ツールも調査しましたが、実装に時間がかかるか、要件を満たしていなかったため不採用としました。

Mailtrainは必要なミドルウェアがDockerコンテナに含まれているため、Gitからクローンしてすぐに利用できるのも魅力です。さらに、メール配信機能だけでなく、細かな権限管理やSESとの連携もサポートしています。

全体像

Mailtrainの実装に際して行ったAWSの設定全体像は、以下の画像の通りです。

既存のNATやVPCを利用しているため、私が設定したのはRoute53、EC2、ALB、ターゲットグループ、セキュリティグループの5つの要素です。

また、今後はインターネットを通してSESを使うのではなく、VPCエンドポイント使用する予定です。

躓いた点とその解決策

Mailtrainの実装と動作確認の過程で、いくつかの不具合に直面しました。以下にそれぞれの問題とその解決策を記載します。

ローカルで使用していた方法でメールの本文が書けない

原因

最初の問題は、ローカルで使用していた方法ではAWS上でメールの本文を書くことができなかったことです。原因は3004番ポートが開放されていなかったためでした。

Mailtrainではデフォルトで3つのポートが使用されています。

3000番: メールリストの管理やメールの配信を行う管理画面用のポート
3003番: メールの本文を作成するためのエディターをホスティングするポート
3004番: メールの開封率やリンクのクリック率を測るためのポート

ローカルで使用していたエディターが3004番ポートを使用していたため、AWS上での実装ではこの不具合が発生しました。

解決策

解決策としては、AWS上で3004番ポートを開放し、それに対してドメインを設定する必要があります。以下に手順を示します。

  1. Route53ようにポート3004番用のドメインを作成する
  2. 1で作成したドメインにアクセスされたときに向けるターゲットグループを作成する
  3. 1で作成したドメインにアクセスされたら、2で作成したターゲットグループに転送するようにロードバランサーのルールを設定する

メールの開封率が測れない

原因

次の問題は、メールの開封率を測ることができず、メールにimgのアイコンが表示されてしまうことでした。これは3004番ポートの設定が不十分だったためです。

デフォルトでは、開封率やクリック率などを計測するためにアクセスされるURLが「http://localhost:3004」と設定されています。

しかし、「localhost」は知っての通りアクセスできないなため、この問題が発生しました。

解決策

対応策として、Mailtrainのdocker-compose.ymlファイルで3004番ポートのドメインのURLを正しく設定し直す必要がありました。

修正内容は以下の通りです。

~~省略~~
mailtrain:
    image: mailtrain/mailtrain:latest
    environment:
    # 例) https://mailtrain.example.com
    - URL_BASE_TRUSTED="ここにURLを設定する"
    # 例) https://sandbox.example.com
    - URL_BASE_SANDBOX="ここにURLを設定する"
    # 例) https://lists.example.com
    - URL_BASE_PUBLIC="ここにURLを設定する"
    ports:
~~省略~~

まとめ

今回の経験を通じて、MailtrainのAWS上での構築において躓いた点とその対応策を共有しました。

Mailtrainは非常に便利なツールですが、日本語対応がまだ行われておらず、英語の情報が主流です。そのため、私が直面した問題の解決には、MailtrainのREADMEが大いに役立ちました。

Mailtrainを利用する際に同様の問題に遭遇した方々にとって、この記事が役立つことを願っています。

参考

Mailtrainのgithub : https://github.com/Mailtrain-org/mailtrain

最後に

ラボルでは、エンジニアを積極採用中です。1、2年目のエンジニアから経験豊富なテックリードやエンジニリングマネージャーまで、興味がある方はぜひご応募ください!!

labol.co.jp