Movable Type で 学ぶ AWS アーキテクチャ設計 - その1(単一構成)

Movable Type を題材にして AWS のアーキテクチャ設計を解説するシリーズを突如開幕。

AWS アカウントの作り方などはこちらからどうぞ。

あくまでも、AWS アーキテクチャ設計をテーマとしているので、Movable Type の使い方とかプラグインでもっとこう。とかそういう話はありません。そういった話は公式サイトを見てね。

Movable Type の部分を別のアプリケーションなんかに置き換えて考えてみると良き。

Movable Type を AWS で利用する方法

AWS 環境に Movable Type をデプロイする方法は、大きく分けて3つ考えられます。

  1. Movable Type AMI 版
  2. Amazon EC2 上に自前で展開
  3. Amazon EC2 または、Amazon ECS 経由で Docker コンテナとして展開

Movable Type AMI 版は、AWS Marketplace で販売されている Movable Type のパッケージやデータベース、必要なライブラリなど実行環境が整った状態でパッケージなので、10分も掛からずに使い始めることができます。また、yum や dnf などのパッケージ管理ツールに対応しているのでアップデートも比較的容易なのが特徴です。

mt-with-aws-marketplace.png

2つ目の Movable Type を自前で EC2 インスタンスに展開する方法は、Movable Type ソフトウェア版のパッケージを入手して自分で環境を構築する方法です。Perl の実行環境から必要なモジュールのインストール、データベースなどについても自前で設定する必要があるため手間はかかりますが、最も自由度が高いです(その分、管理責任範囲も大きいです)。

mt-self-deploy.png

Docker コンテナとして Movable Type をイメージ化する方法もあります。自前でイメージの作成が必要なので、手順としては2つ目の自前で展開する方法とさほど変わりません。ECS を使えば、Docker 環境の自動構築が可能な点と、Fargate タイプを利用すれば起動した EC2 インスタンスをサーバーレス化できる点で2つ目の方法よりは管理運用が楽になります。

mt-with-container.png

このシリーズでは、まずはコンテナ以外の方法で EC2 にデプロイした環境を利用したアーキテクチャ設計を考えていきます。

コンテナでのアーキテクチャ設計は気が向いたらするかもしれない。

1台の Movable Type によるシンプルな構成

まず最初に紹介するアーキテクチャは、1台の EC2 インスタンスだけで構成された最もシンプルな構成です。

個人ブログや、開発環境など限定的な利用に適しています。

most-simplified.png

特徴

1台の EC2 インスタンスに、アプリケーション、データベース、公開コンテンツをすべて含んでいる構成です。最もシンプルな構成さなので、管理運用する必要があるリソースが EC2 インスタンス1台だけで済むのが最大の特徴です。

サイトの開発環境や、個人で利用する程度のブログサイトなどであれば大きな問題は起きにくいですが、可用性や耐障害性に大きな課題を残しているアーキテクチャと言えます。

利点

  • 公開コンテンツ、データベース、アプリケーションを含めて1つの AMI でバックアップが完了する

考慮点

  • EC2 インスタンスが単一障害点となるため、EC2 インスタンスの障害や内部のアプリケーションの動作不良により簡単にアクセス不可になってしまう
  • サーバーのログやデータベースなどを考慮すると AMI のバックアップのタイミング次第ではデータのロストが大きい
  • Web サーバー、データベースサーバーの負荷次第ではインスタンスタイプを大きなものにしないとパフォーマンスが維持できない可能性がある

まとめ

Design for Failure の考え方からみても、Well-Architected の観点から見ても、プロダクション環境でやるべきではない構成の最有力です。なにしろ、EC2 のメリットである使い捨てできることが殺されてます。

(とはいえ、世の中にこの構成多いんですよね)

次回は、少しだけマシにします。