ChatOpsなデプロイ環境にしたい
新しい案件の話しがあり、インフラ構成、デプロイ周りをどうしようかと考えていました。 前までクラウドはAWS一択でしたが最近はGCPなどにも興味があり、 「とりあえずDockerが動くクラウドならうちらが作るアプリも動くだろう」 というスタンスでDockerを積極的に使おうとしています。
Docker環境でのデプロイとなると、下記の手順になるでしょうか。
- リリースしたいアプリのDockerイメージを作る
- Dockerレジストリにプッシュする
- オーケストレーションツールが新しいコンテナを作る
- WEBリバースプロキシが古いコンテナから新しいコンテナにつなぐ
どこかにプッシュしたとか、なんらかのイベント発生をトリガとして他のサービスに通知したり、APIを叩いたりとサービス間の連携ができることが最近多いので、上記の手順も流れるように行えるでしょう。 Dockerイメージを作るより前の工程がいくつかありますが、これらも同様に自動化できるので一連の流れでデプロイできそうで、図にしてみたらこんな感じになりました。
- デプロイの流れ
local hipchat hubot github circleci docker kubernetes staging registry aws ecsとか? production deploy --------> pr, merge --------> test ---------> docker push ----------> push notify ------------> docker run --------------> container 切り替え
Dockerイメージを作る前に hipchatやgithubなど使っていますが以下のところにメリットがあると思っています。
- hipchatでdeployの内容が流るとデプロイのタイミングや内容をメンバーで共有しやすい
- githubのプルリクエスト、マージは今回リリースされる内容がレビューしやすい
- circleciは、まぁテスト通ってないのにリリースはできないので^^;