こんにちは、新卒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番ポートを開放し、それに対してドメインを設定する必要があります。以下に手順を示します。
- Route53ようにポート3004番用のドメインを作成する
- 1で作成したドメインにアクセスされたときに向けるターゲットグループを作成する
- 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年目のエンジニアから経験豊富なテックリードやエンジニリングマネージャーまで、興味がある方はぜひご応募ください!!