Immutable Infrastructure - JAWS DAYS 2014
JAWS DAYS 2014参加レポート第1弾です。
Immutable Infrastructure @naoya_ito
JAWS DAYS 2014、Immutable Infrastructure について - naoyaのはてなダイアリー
そもそもImmutable Infrastructureって?
Disposable Componetnsって呼ばれたりしていて、不変な、状態を持たない、廃棄可能なっていう意味を持つ。
サーバの状態って、日々のチューニングなどで常に変化している。ケースとしてはまれかもしれないが、半年後にそんな状態のサーバにRailsアプリをもう一度デプロイするときはひどく怖いはす。
どんな変化を行なったかを管理する必要がある。
でもどうやってサーバの管理をする?
今まで手順書で管理をしていた。しかし、手作業になるためどうしてもオペレーションミスが出てしまう。
「状態管理が面倒なら、状態を管理しなければいいじゃない」
Blue, Green Deployment
ELB, EIPを切り替えることで切り替えるのも行われている。それをもっと大規模にやる例だと思えばよい。
Herokuでは同じことをやっている
git push する度に新しい環境(コンテナ)を作り、古い環境を捨てる。
上書きすると、環境が上書きされ変な状態になる場合がある。 無停止で切り替えることができる
Travis CI
Jenkins as a Serviceみたいなもの。
テストをするときに、既存の環境があることでテストが通るというケースはよくある。まっさらな状態にテストを乗せて動かすことで、防ぐことができる。
Amazonでは1時間で1,000回デプロイ
ビジネスのサイクルを早く回す。プロトタイプを早く回すという実利的なメリットがある。
Infrastructure as Code
最近になってChefなどの Configuration Management Toolが出来てきたのは、Aamazon Web Serviceが盛り上がってきているから。
冪等性
ある操作を何回やっても結果が同じになること。Chefを何度も実行した際に、毎回状況が変わるのであれば使い元にならない。とはいえ、やっぱり環境の状態管理は難しい。
そこで、環境の状態管理はしない!
必要になったときに新しく作る
1回作ったものには変更を加えない
Stateless な状況を作る。
新しい環境をオンデマンドで即座に生成できる技術 ⇛ VMよりもコンテナが重要になってきた!
VMは、ハイパーバイザ、OS、などと起動していくためどうしても時間がかかる。 一方、Linuxのコンテナは、Apacheと同じようなプロセスであるため、即座に起動できる。
プログラマブルにしたもの ⇛ Docker
Docker
Linuxコンテナを手軽かつプログラマブルに扱えるようにする
Jenkins + Docker
コンテナの環境に依存してしまう ⇛ 抽象レイヤー Docker アプリケーションがポータブルになる
Ruby
- Foreman
- Rack
- Bunder
npm, package.json
Buildpacks
アプリケーションがポータブルになると・・・
アプリケーション git pushすればOK ⇛
- ステートレスなWebとURIのもtらす制約ににている
状態を伝えるのは難しい。状態がなければ、指し示すことが可能になる
上書きデプロイから、コンテナベースのデプロイへ
課題
- コンテナ/ Dockerだけでは足りない
- ステートフルなサーバをどうするか? ストレージ、キャッシュなど Webアプリなどでもステートレスなものがある ⇛ ログなど ステートフルなものを外に逃す実装・・・fluentd
既存インフラの一部を動的にしたいというニーズはある。ユーザは、コンテナベースのデプロイのメリットを体感してきている。
Related contents
TECH
2014.02.11
TECH
2020.07.04
TECH
2017.08.27