これまでは、Movable Type AMI 版 を使っていましたが、個人無償版 + AWS な構成に変更することに。
Movable Type 環境構築の手間もあって AMI 版だったわけですが、EC2 Image Builder で AMI を作るパイプラインを作ったので、MT のアップデートに合わせて新しい AMI を作っていけばOK。
EC2 Image Builder のコンポーネントを準備
Movable Type 環境の構築には大体次のコンポーネントが必要になるわけですが
- Web サーバー
- DB、DB クライアント、DB ドライバー
- イメージプロセッサーライブラリ
- MT 本体
これらをそれぞれ EC2 Image Builder のコンポーネントにしていきます。
Nginx
Web サーバーとしては、Nginx を採用。これは、amazon-linux-extra にあるのでそれを入れます。
ファイルアップロードで Permission Denied が出ることある。のでうまい具合に直す
DB
DB には MySQL を利用するので、RDS for MySQL を利用することに。DB を外部にすることで EC2 を使い捨てにするためですね。
DB クライアント
MariaDB のクライアントが入れられるのでそのまま使います。
ImageMagick
ImageMagick は、yum で入れられるのでそのまま使います。そのために、開発ツール一式を入れてます。
Perl モジュール群
yum で入れられるものはそのまま。ないものは、cpanm を入れてから。
CloudWatch Agent
ログの転送と内部メトリクスの転送に CloudWatch Agent をセットアップ。設定は、SSM パラメータストアに保存ずみ。これで、ログ関係も外出し完了。
ロケール周り
Amazon Linux 2 を標準で起動すると、UTC-0 / en-us な環境になるので、各種設定。
Movable Type
Movable Type は、S3 バケットに置いておき、ファイルを展開して設置する。
EFS
構築済みファイルや、mt-static などは EFS に配置してる。これで、データファイルも外出し完了。
あとは、nginx や MT の各種設定ファイルを好きなところから持ってきて設置。
EC2 Image Builder でイメージレシピ作成
用意したコンポーネントを利用するようにイメージレシピを作成します。 ビルド用インスタンスには、S3 へのアクセス、CloudWatch へのアクセス許可が必要です。また、割り当てるセキュリティグループからの通信を EFS 側のセキュリティグループで許可することを忘れてはいけない。
出来上がった AMI をもとに EC2 インスタンスを起動して、動作を確認すれば完成。
出来上がった AMI から起動テンプレートを作成して、Auto Scaling グループに割り当ててあげれば Auot Healing 対応な Movable Type 環境の出来上がりです。
EC2 の中には、プログラム関連しか入っていなから使い捨てられます。ということで、t3.small なスポットインスタンス 100% で用意してコストも t2.micro より下がりました。