2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
macopy氏:というわけで、(ここまで)アーキテクチャやプログラミングインターフェイスに関してデプロイの技術を紹介してきましたが、ここからはサーバーへの反映方法について紹介しようと思います。
今までずっとFTPをやっていましたが、FTPの説明をしていないですよね。ですが、まぁ(先ほどデモを)やったからいいかなと思っていて。(FTPを)使ってデプロイしていたのでとりあえず省略。ああいう感じでファイルをそのままピュッと上げるインターフェイスです。
2023年の時点では、生FTPでなにかファイルを上げるのはやめましょう。ちなみにこれ(今回のセッションのデモ)はTailscaleでVPNを張っているから大丈夫です。
FTPもPushの1つなんですが、Push型のデプロイをやっていきます。
(スライドを示して)これはすごく単純な……。「図は要るのか」みたいな感じなんですが(笑)。オペレーション用の端末、手元の端末とかをデプロイする君(デプロイを行う専用のインスタンスなどを指す)ようなところから、サーバーに対してプログラムをアップロードします。
アップロードの手段は、rsyncだったりFTPだったりSCPだったりといっぱいあります。その後にプロビジョニングしてデプロイというかたちになるんですが、複数のファイルを一気にアップロードするとなると、tarballに固めて、その先のほうで展開するとか、例えばアトミックに更新したいからrenameを使うとか、そういう細かいテクニックがいろいろあります。
というわけで、PSGIをPush型デプロイをします。まずデプロイスクリプトがあります。普通にrsyncした後にprovision.sh、リモートのprovision.shを実行します。
shは何をやっているかというと、この頃になるとレンタルサーバーというかたちじゃなくて、依存モジュール、Shebangモジュールをバリバリ使った開発になっているので、最新型ですがCarmelを使っています。ここでcarmel installをした後に、systemctl reload plackup.serviceをしている。
中ではstart serverで動いているプロセスがあるので、plackup.serviceに対してSIGHUPを送ってgraceful restartを行っています。ちょっと早口ですが、すみません。
じゃあやってみましょう。(画面を示して)ちなみにもうデプロイはされているので、こんな感じになっていますね。これでサーブされています。
これをデプロイしたことがわかるように書き換えてみましょう。app/app.psgiにHello Plack with rsync from KRPと入れます。
という感じで入れて、デプロイします。(画面を示して)こんな感じでデプロイされました。
carmel installをしているのでこんな画面が出ます。「デプロイされましたよ」という感じで、見てみましょうか。デプロイされました。
(会場拍手)
ただ、Push型デプロイには難点があります。この頃になるとサーバーの数が多くなりました。CGIの時はレンタルサーバーは当然1台だし、冗長性を確保しても2台とかの世界だったのが、どんどん冗長化したり、大量のリクエストをさばくという要件に合わせて増え始めた。
すると、アップロードするとか、そういうPush型のネットワークのリソースが律速化して、デプロイ速度が遅くなってしまう問題が出てくる。
さらにこの頃になると、今度はパブリッククラウドの普及で台数が可変になっているんですよね。だから「今どのサーバーが生きているか」を知る必要があった。知るのはいいんだけれど、「デプロイしている途中に変わったらどうするの?」とか、そういう問題も出てくる。なのでPush型デプロイは、オートスケールの環境とかで動かすことがけっこう大変になってきた。
というわけで、Pull型デプロイという提案が出てくるわけです。Pull型デプロイ、複雑になりましたね(笑)。
まず、オブジェクトストレージがこのあたり(の時期)で出てきます。S3とかそういうやつです。端末からtarballをWebアプリで固めた後に、オブジェクトストレージにアップロードします。
その後になんらかの方法……。ここでよくConsulだったりSerfというオーケストレータが使われたりするんですが、(それらが)デプロイの号令をしてあげる。サーバー1、サーバー2、サーバー3。そのほかにもいろいろあったりしますが、自律的にオブジェクトストレージからtarballや設定ファイルをPullしてきて、再起動を行う仕組みがPull型デプロイだったんですね。なので、何台に増えてもオペレーション端末のリソースで律速されるということは別にないということです。
というわけで、「stretcher」というツールがあるので、それを使ったPush型のデプロイをしていきます。stretcherは、藤原さんが作ったので……。弊社カヤックではConsulとかがよく使われていたんですけど。
1台だとConsulクラスタがうまく作れなかったので、ここではncでstgに突っ込んで返すという、ふだんではやらないようなことをやってみます。
stretcherに入った標準入力でmanifestファイルが入るようになったので、ここからデプロイを行います。rsync pushのほうは……。なんて名前だったっけ。ど忘れしちゃいましたね。stretcher-pullですね。
複雑になりました。tarballに固めます。app以下をtarballに固めて、ストレージとみなして検証サーバー……。これもサボっていますが、サーバーにtarballをアップロードします。
checksumの計算をしてあげて、checksumをmanifestのファイルの中に埋め込みます。envsubstという環境変数を使ってテンプレートをレンダリングするみたいなコマンドがあるので、manifestファイルを作ってあげて。
manifestファイルもオブジェクトストレージみたいなところにアップロードする。その後にstretcherにデプロイして、ncを介して突っ込む。「manifestはこれだよ」というふうに突っ込んだ上でデプロイを行っています。
デプロイの指令自体はサーバーのリスタート、直接はキックしていません。ただ、stretcherでシェルスクリプトが実行されて、ダウンロードが成功した後、展開が成功した後に、自律的に再起動を行うかたちになっています。
じゃあデプロイしてみましょう。下がローカルで上がリモートです。来ました、プロビジョニング。あっ、もうデプロイに入りましたね。速い(笑)。デプロイはされました。
これで変わるかな。はい、stretcherに変わりました。こんな感じですね。
(次回につづく)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05