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.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.13
飲食店アルバイトから超一流ホテルに入社し学んだ「経営者の視点」 『記憶に残る人になる』著者の人生遍歴
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