Amazon ECSでLAMP環境を作ってみよう(その1:前提と要件)

久しぶりの長編技術ネタです。

最近のWebアプリ開発環境は、わざわざサーバマシンを買ってきてLAMPスタックとかTomcatスタックとか作って、とかいう手間をかけることなく、仮想サーバやコンテナオーケストレーションとかで簡単に作れるので大変便利です。昔はそのためにわざわざマシンを一つキープしていて、開発する環境に合わせてスタックのフルバックアップを個別のHDDに展開してアプリの動作確認をするとかやってました。今は開発マシンとして1台Linuxを置いているだけで*1、あとは手元でコマンドを打つだけでなんとかなるというのは大変楽で仕方がないですね。

なのですが、本番環境としてはなかなか仮想アプライアンス系を提案できにくいです。大きな理由は「よくわからない」から。見えないんですよね。やっぱり一般的なレンタルサーバがわかりやすいです。例えばこの後話が出てくるのでAWSを例にとりますが、EC2とホスティングサービス業者が提供する「専用サーバ」と何が違うのか、というのは技術者的にはなんとなくわかるはずなのですが*2ホスティングサービスのほうが料金体系もサービス内容も明確ですから訴求しやすいんですよね。

とは言え、自分でやる分にはレンタルサーバ借りるよりはIaaSでちょちょいと、の方が楽ですから、外部公開用のテストには積極的にIaaS、特にWebアプリについてはEC2を積極的に使っていましたが、自宅環境では基本的にVagrant→Dockerという感じで、あまり経験がない環境になる場合はVagrantで作り、知見を得ながらDockerでの構築テストをする、という流れでこの1~2年くらいやっていました。この流れはたぶんこの数年くらいは「俺的主流」なんだろうな、と思っています。

コンテナを作るようになると、「だったらそのコンテナ活かせないかなぁ」、と思うようになるわけですが、なかなか外部公開用にはいいサービスが見つかりません。最初に思い浮かぶのがHerokuなんですが、Heroku自身はDocker-ComposeであったりKubernetesであったりのコンテナオーケストレーションツールには対応をしておらず、アプリケーションそのものをコンテナに突っ込む必要がありますので、コンテナの軽量化とは逆の方向に進んでしまう可能性もあるわけです*3。そこで、AWSのECS(Elastic Container Service)というコンテナオーケストレーション機能があるので、それを使ってみよう、と考えたわけです。もしかすると自分の考えていたコンテナ運用ができるかも、と思っています。

ECSに手を出してしまった理由

上記の繰り返しではあるのですが、自宅での(Webアプリ)開発は基本的にDockerを使っています。いくつかの例外がありますが、この場合は漏れなくVagrantを使って開発をすることにしています。考え方は、まずDockerでの環境構築ができるかどうかを検討し、できなければ、またはDockerでの構築が不安な場合(Webアプリサーバに関しての学習が必要だとか)にVagrantを採用する、という方法をとっています。

racchie.hatenablog.com

まぁそんな状態なので、開発はDockerでやっているわけですが本番環境はといえばレンタルサーバがほぼメインなわけです。ごくまれに(と言ってもうちのお客様で1社だけですが)Herokuを使われているところがあるくらいで、なかなかクラウドの良さを理解していただけないのは私の営業能力がないからなんですよね...。

そうは言ってもやっぱり今後はクラウドサーバを推していきたいわけで*4、EC2でのテストサーバは作ったことがあるので次はDockerだよなぁ、と。しかもHerokuはDockerではないですが触ったことがあるのでいつでも試せるし。

ということで、やったことがないことをやるのが大好きなので、ECSで環境構築のチャレンジをしてみた次第です。

やりたいこと

そろそろ「自分の仕事」用のサイトを作らなければなぁ、と数年くらい思っているわけです。2019年のGWあたりでWixを使ったホームページを作っては見たのですが、それ以来手を付けていません。仕事で「Wixのホームページ作成」を受注していないというのも大きな理由ですし、デザインの「難しさ」を感じるのも理由の一つです*5。それと、エディタが重いのは仕方ないことなのですが、あれも耐えられないですね。

閑話休題

で、自分用サイトを作るのですが、コンテナで作るなら、CMS用のコンテナをいくつか用意して、サンプル的なサイトを下層で展開する、というのはどうだろう、と考えたわけです。もっとも、今できることなんて大してないですが、いろんなパターンのサイトも作れますし、テストでドメイン配下にいろんなサービスを付け加えてみて、もちろんサーバ負荷がかかることになるのですが、更にサーバのスケーリングとか、後ろでいろんな実験ができるわけです。当然実験結果はサイトで公開できるわけで、技術系のネタが切れてきた現状、こういう「実験サイト」は大変有効ではないかな、と考えたわけです。

コンテナオーケストレーションLAMPスタックを作るのは、自宅開発サーバではDocker-Composeを使って実装をします*6。まずはコレをAmazon ECSで実現してみよう、と思うのですが、さて、ネットで検索してもわからない。では、まずは自分で試行錯誤することにしましょう。

つづく

また休みの日を使って部屋に籠って作業をすることになりそうです。酒でも飲みながらのんびりやりましょうかね。

*1:他にももろもろに使うメインのWindowsスマホアプリ等のデバッグMacがデスクトップとして置いてあり、更にヨメ分も含めノートPCが何台か転がっている環境です。

*2:マネージド、つまり専用サーバはホスティング業者が「サーバ」のSLAに基づいて面倒を見てくれて、EC2は自分で建てたサーバの面倒はある程度自分が見るという感じでしょうかね。同じ仮想サーバ運用ですからね、アレ。

*3:Herokuが良くない、という話ではないですよ念のため。ただ、LAMPスタックコンテナ群をオーケストレーションツールを使って作る必要は少なくともHerokuではないわけですよ。アプリとプラグインがあればできますから。Wordpressなんかを使う場合はPHPスタックを建ててDBプラグインをHeroku側に導入して、あとはコンテンツ保存用の外部ストレージをつなげてあげるって感じですよね。

*4:もちろんレンサバも必要だと思いますし、完全マネージドなので楽ですよね。考えることをしなくていいんです。ちょっとテストで導入するくらいならレンサバを選んでもいいかもです。契約が面倒なので私はちょっとしたテストでもクラウドを積極的に使いますが。

*5:具体的に言うと、「限られたデザインテンプレートの中で、ある程度自由度の高いデザインを作ることができる」という売りが、デザインセンスのあまりない私にとっては苦痛になってしまうのです。だったらWordpressみたいにテンプレがそのまま使える状態の方が簡単でいいよなぁ、とCMS系の仕事を立て続けにやってみて感じています。

*6:厳密には「LAMP」ではないですが、基本構成はApacheが入ったPHPコンテナとDB/MySQLコンテナをオーケストレーションするという簡単なパターンです。