はじめに
昔はお金が潤沢になければ1台のサーバーにサイトをいくつもいれてデータベースは勿論共用、どちらもカリカリにチューニングをして使っていました。
バックアップはテープにとっていたとしても、リカバリの予行練習なんてしてないことも・・・。
サーバーセンターで回線借りると1Mbpsあたり五万円くらいしてた様な気がします。
時代が進みAWSなどのクラウドサービスがでてきてお金が無くてもサーバーを複数台使って冗長化できるようになるとアプリケーションの更新は複数台のサーバーにSSHでログインして同じ事しないといけなくなりました。
tmuxつかって同時作業してみたり、chef使って頑張ってみたりです。そういえばAWSでchefを使うサービスもありました。
そして、最近インフラを触っていて感じるのはSSHを使う事が減ってきたなってことです。
その理由はいくつかあります。一番大きな理由はやはりコンテナを使うようになった事です。また、LambdaやAppSyncなどのサーバーレスのサービスを商用でそれなりに使うようになって来ました。
今回kubernetesよりはわかりやすいけれどそれなりに理解するのが大変な AWS ECS の概念について解説したいと思います。
目次
- ECSってなんだろう?
- ECSの構成
- まとめ
ECSってなんだろう?
まず、前提としてEC2を使ったECSについては考えないです。
ECSはコンテナを管理する仕組みです。たとえば自分でサーバーを立ててコンテナを起動してサービスを始めたとします。
コードを修正したときにやらないと行けない事はこの様な感じだと思います。
- 更新したプログラムをDockerイメージにコピーする。
- そのイメージをDocker HubやAWS ECRにpushする。
と、ここまではCIを入れていればやってくれますし、手作業でも1回行うだけです。その後
- コンテナを起動しているサーバーにSSHログインして新しいDockerイメージをpullする。
- 古いコンテナを停めて新しいコンテナを作成する。
サーバーが3台あれば3回これを行います。負荷がかかってサーバーを増やす場合、AutoScalingして起動時にコンテナが立ちあがるようにしておけば良いのですがその設定も一苦労です。また、EC2インスタンスは起動するのに数分かかります。
それをECSを使えば100個コンテナがあっても一気に更新できるし、負荷がかかれば数字を変えてボタンを押すだけで必要なだけコンテナを増やすことが出来ます。
ECSの構成
基本は以下の3つで構成されています。
- タスク
- これで一つのアプリケーションみたいな感じ
- コンテナの集合
- 例えばPHPを動かすならnginxとphp-fpmのコンテナを連携させて動かすように設定する。
- タスク定義として設定する
- タスク定義 ≒ docker-compose.yml
- サービス
- タスクを決めた数動かし続けてくれます。
- 他にも例えばどのロードバランサ使うのかとか、タスクをデプロイするときは1台ずつとか全部まとめてとか色々。
- サービスで動かせるタスクの種類は一つ。
- クラスタ
- サービスとタスクのカタマリ
- 一番大きな集合
箱入りの饅頭とか大福を想像するとちょっと分かりやすいかもです?
そして、饅頭の種類が色々あっても構わないわけです。茶色い饅頭はPHPのサービス、白い饅頭はnodeのサービスみたいに。
- タスク ➡️ あんこ
- サービス ➡️ 皮
- クラスタ ➡️ 箱
ECSはこれらをAWSのコンソールから簡単に管理出来るサービスです。
ただし、ELBやVPCなど他のサービスのことを理解してつかう必要があります。
まとめ
上記はECSのFargateでの運用について書きました。Fargateは出た当初高かったのですが今は価格もこなれてきてEC2インスタンスより細かく制御しやすいのとFargateスポットが激安なので上手く使えばコストも抑えられます。
AWSを使う理由の1つは管理を楽にするためなので使えるサービスはどんどん使っていきたいです。
サーバ運用とWebサイト運用・システム運用などが業者が別々で問題解決が困難、もしくは業務をワンストップでお願いしたいなどございましたら遠慮なくご相談ください。
サーバの設計や構築のみなどミニマムな業務からも承ってますので是非コムデへご相談ください。