capistrano-net_storage を使ってみた
イントロ
小さいプロジェクトで capistrano
を使っていると、最初は問題ないものの、気づいたらサービスが成長してサーバーが増えてきて、デプロイに時間がかかってくる、という話はよくある(?)と思う。
デプロイに時間がかかると色々とストレスで、所謂 pull 型 deploy を検討したくなってくる。
今の pull 型 deploy ってどんなものがあるのだろう、という疑問から色々調べてみて、最終的には capistrano-net_storage
を採用することにした。
capistrano-net_storage
を使ってみて、
- pull 型 deploy の恩恵を受けられている
- 移行も問題なく行われた
- 数ヶ月運用した限りでは、大きな問題は出てない
ということで、ここまでの知見をまとめてみた。
前提
- 小規模 ~ 中規模なサービスです
- 色々と古臭い事情により、
Docker
化までたどり着いていない capistrano
を使っている- 現在のプロジェクトは、master にマージされたら即 deploy
- 頻度は一日 2 ~ 5 回
対抗馬
- sorah/mamiya: Faster deploy tool using tarballs and serf
- AWS CodeDeploy
- fujiwara/stretcher: Deployment tool with consul/serf event notification.
有名所はこのあたり、なのかな。
capistrano-net_storage
の良いところ
他の候補と比べて優位に感じた部分。
- capistrano の plugin として実装されていて、現在 capistrano を使っているプロジェクトでも、移行が比較的楽
- デプロイ対象のサーバー側に、特別なミドルウェアをインストールする必要が無い
- 必要なものは
awscli
だけ
- 必要なものは
capistrano
の資産を活かせる
現状の環境と比較し、ちょっと pull 型にしてみたいんや! という自分のワガママに答えてくれたのが超嬉しい。
導入
公式
DeNADev/capistrano-net_storage: Capistrano Plugin for Fast Deployment via Remote Storage DeNADev/capistrano-net_storage-s3: Capistrano::NetStorage Plugin for Deployment via Amazon S3
capistrano-net_storage とは
絵を見れば、なんとなくどんな事をやっているかわかる。
- capistrano で pull 型 deploy の実装
DeNA
先輩がメンテしていらっしゃる
使い方
REDAME.md
の通り。以下を config/deploy.rb
に書くだけ。
set :scm, :net_storage set :net_storage_transport, Capistrano::NetStorage::S3::Transport # デプロイ対象サーバー(図で言うところの `app server`)で unzip が無い場合はこちら set :net_storage_archiver, Capistrano::NetStorage::Archiver::TarGzip # s3 の bucket, prefix 名 set :net_storage_s3_bucket, 'capistrano-deployments' set :net_storage_s3_archives_directory, 'awesome-project'
感想
- 導入が楽で効果も高いし、コスパ良し。
- capistrano の良いところを使いつつ、pull 型 deploy できるのは嬉しい
- 中身をみたけど、しっかりと作られている印象
capistrano
に乗っかっているので、元のやり方に戻したい!という場合でもすぐに戻せた- 「普通の deploy ->
capistrano-net_storage
の deploy -> 普通の deploy」みたいのも動くのが嬉しい- 突然失敗しても安心して対応できる
- 別のやり方だと、こう簡単にはうまくいかないと思う
- デプロイ回数が多いプロジェクトなので「突然デプロイできなくなるのは困る」という大人の事情もあった
- 「普通の deploy ->
- 図の
(3)
の download する部分がawscli
で実装されている点に注意- deploy 対象のサーバーに
awscli
を install する必要があることを意味する- 入っていないと、プラグインを自作することになる、と思う。
- デフォルトの
awscli
が一番楽な気はするplugable
になっていて、自分でカスタマイズできるようになっている
- deploy 対象のサーバーに
- deploy サーバーに zip が残るので、思わぬ容量増加に注意
まとめ
capistrano
使っているなら capistrano-net_storage
素晴らしいと思う。
現代にはもっと良い技術が沢山あり、そちらにサラッと乗り換えたいものの、色々過去の経緯なりで中々そうはいかないこともある。
そんな状況下で、「サーバー台数が増えてもデプロイに時間がかからない」はかなり心強い。
コスパの良いその場しのぎになった、というお話でした。