2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
macopy氏(以下、macopy):次にアーキテクチャの紹介に戻ります。アーキテクチャの紹介に戻るというか、Dockerはアーキテクチャのほうかなと思ったのでそうしています。
DockerはどちらかというとPull型デプロイなんですよね。オペレーション端末。先ほど言った手元のローカルからdocker push……。tarballの代わりにdocker pushにDocker Registry」「Docker Hubだったり、今回のケースではghcr.ioというGitHubのものを使っていますが、そこにアップロードします。
その後のオーケストレータで、例えばKubernetesだったりECSだったり、今回の例ではなんとSwarmを使っています。シングルノードでSwarmを動かすことをやっています。Docker Swarmというやつですね。
デプロイの指令をすると、オーケストレータが認識しているサーバーに対してdocker pullをして、コンテナイメージを入れ替える作業をやってくれる。Pull型デプロイの正常進化みたいなところがけっこうあります。
macopy:というわけで、Docker Swarmを用いたDockerのデプロイをやっていきます。ctopで見たほうがいいですか? Dockerが今は2個動いていますね。Dockerというか、Plackのhellodockerというものがあって、これが2コンテナ動いています。
それをデプロイします。(画面を示して)これは何をやっているかというと、docker buildをした上でbuildxを使っているのはARMマシンで、デプロイ先がx86なので、デプロイされるサーバーの側を登録して、そちらでビルドをするという、チートみたいなことをやっています。かつ、その後にSSHしてprovision.shをしています。
(画面を示して)provision.shのほうは何かというと、こんな感じです。これはDocker Swarmのコマンドですが、service update hellodocker --imageと指定してあげるとコンテナが入れ替わるようになっています。ローリングリスタートみたいなことをやっています。
というわけでデプロイします。今、右端のUPTIMEが6時間9分になっているじゃないですか。デプロイするとこれが変わります。
shebang、カートンインストールが長いんだった。あっ、すぐいったな。キャッシュしているからか。こんな感じで入れ替わります。はい、入れ替わりました。というわけで、Docker Swarmですね。
じゃあ見てみましょう。ただ変わらない気がする。こんな感じでデプロイされています(笑)。
(会場拍手)
というわけでDockerの発表は2013年。Pull型デプロイではあるんだけれど、Pull型の何が違うかというと、アプリケーションプログラムに加えてランタイムまで一気にデプロイすることになったという感じですね。
それまではランタイムのほうは普通にサーバーをセットアップする(感じでした)。例えば当時はChefとかでやっていたのが、Dockerの中でPerlをインストールしたりしていた感じですね。
macopy:最後にいきます。サーバーレスです。サーバーレスが何かはけっこ毛色が違うんだけれど、ローカル端末からAWSに対して関数をアップロードします。
その時点では、それ以外なにも起こりません。ただ、HTTPのリクエストが来た時にmicroVMが起動して、この場合はその中でPerlのプログラムのhandler.plが実行されるという感じですね。
これも見ていきたいんですが、時間がないのでデプロイだけやります。Lambdaです。ここからデプロイをやります。lambrollというAWS APIを使ってデプロイされます。
この後にブラウザが開いて、Lambda側のやつが動きます。Lambdaで動きます。これでPerlのプログラムが動いています。
pidは入れているんですが、microVMの中のpidだからほとんど意味はない(笑)。一応入れているけど、まぁ……という感じですね。
というわけで、アプリケーション制作者が直接管理するレイヤーが、時代を追うごとにどんどん上に上がっていくんですよね。物理サーバーだったり仮想サーバーだったり、IaaSだったりコンテナだったり。
そんな感じなんですが、最後にサーバーレスに来ると、レンタルサーバーとかCGIにけっこう近い、リクエストが来たら起動するみたいな(動きになります)。永続化がされて効率良くできるようになって、それを効率良く管理するのがクラウド事業者側の責務になったというのが、サーバーレスとCGIの違うところかなと思います。あと、PaaSとかありましたね。
いかがだったでしょうかというわけで、登壇者の感想としては、昔の技術の課題を解消するために、新しい技術が出てきた。つまり試行錯誤の結果、今があって。try/catchかなと思います。
というわけで、昔の技術を知ると「昔のこの部分は良かったな」みたいなことを知ることができて、それは今に活かせるんじゃないのかなと思います。今はアプリケーションが解く課題が複雑になっているから、マイクロサービスだったり、デプロイも複雑になる傾向にあるのかなと思います。
というわけで、あなたの好きな「デプロイ」はありましたか? 発表は以上です。ありがとうございます。
司会者:ありがとうございました。会場にいる方で、質問などある方がいたら、挙手をお願いします。どうぞ。
質問者1:サーバーレスでもパーミッションはチェンジモードにしないと動きませんか。
macopy:ちょっと(画面を)出しましょうか。サーバーレスに関してはパーミッションという概念はそこまでなくて。これはLambdaの場合が、function.jsonの中にhandler.handleという(ものがあって)、(それが)「この関数を読んでください」というかたちになっていて。内部的にはdo(他のファイルに書かれたスクリプトを即時実行する)とかそういうものをしているはずなので。
かつ、その中でhandleという名前空間を入れた上で実行しているかたちになるので、パーミッションに関してはよしなにやってくれているというのが回答かなと思います。
質問者1:あと、デプロイの方法で、本当にサーバーレスというのであれば、ブラウザのテキストエリアにソースをバンと貼ったら実行できるというようにしてもいいと思うんですけど、なぜそういう方法は採られていないんでしょう(笑)?
macopy:Lambdaに関しては、AWSコンソール上で関数をそのままエディタの中で編集した上でデプロイというのはできるんですが、今回に関してはデモなので失敗したくないということで、CUI内でやりました。
質問者1:ありがとうございます。
macopy:ありがとうございます。
司会者:ほかに質問がある方。どうぞ。
質問者2:楽しい発表をありがとうございました。デプロイのプラクティスとかをどう探せばいいか、コツを教えてもらえないでしょうか?というのは、例えばスクリプトとかの権限やユーザーをどうするかとか、本当にいろいろな環境が違って。検索してもぜんぜんいいのが見つからなくて、独自(の方法)でやっちゃって、「本当にこれでいいのかな?」となることが多くて困っています。
macopy:確かにデプロイって、明文化というか標準化されにくい分野ではないかなと思うんですよね。というのも、1回作ってしまえば固定化されてしまうものでもあるから。なので、「じゃあどう探せばいいの?」と言われると言葉に詰まるんですけれど。
どちらかというと、自分が「こうやっているよ」と発信した上で「こうやったほうがいいよ」とほかから情報を仕入れていく。自分がやっていることを外に出していくと情報が集まってくるんじゃないかなと思います。
質問者2:なるほど。ありがとうございます。
会場:サーバーを担ぐので、ちょっと筋力が(必要かもしれない)……。
macopy:まぁ、そうですね(笑)。かもしれないです。
司会者:ほかに質問がある方はいますか?
質問者3:おもしろい発表をありがとうございました。今回、いったんサーバーレスまで説明してもらったと思いますが、最近、新しいものがいろいろ出てきていて。サーバーレスは似ていると思いますが、ワーカーだったらCloudflare Workersとか、CGIの上でなにか動くようなものが出てきていて。そういうところでデプロイのあり方が変わったりしたようなことはなにかあったりしますかね?
macopy:そうですね、デプロイのありがたみという面ではサーバーレスだったりFaaSに近いかなと思うんですよね。ただ、どちらかというとランタイムの管理が必要ないとか、サーバーの管理、台数のスケールとかそういう設定が必要ないとか、チューニングを勝手にやってくれるとか。
そういった面でエッジで動くワーカーとかは、すごく優れていると思っていて。「そこまで管理したくないよ」という人にとっては、すごく良い選択肢なんじゃないかなと思いますね。
質問者3:ありがとうございます。
司会者:ほかに質問は……。
質問者4:Push型のデプロイの時に途中でマシンが増えた場合に、増えたマシンがたぶんデプロイできない問題があると話されていたと思います。Pull型の場合にそこをどういうふうに解決しているかの説明がなかったような気がするんですけど。
macopy:なるほど。ありがとうございます。確かにいい指摘だと思います。
Pull型の場合は、新しくサーバーが立ち上がった時に、起動スクリプトとしてオブジェクトストレージからmanifestファイルだったりアプリケーションファイルを自律的にダウンロードしてきて、そこでいったんデプロイしてしまうかたちにするのが、私がやっていた手法かなと思います。
起動した時にデプロイと同じことをやるということですね。回答になっていますでしょうか?
質問者4:わかりました。ちょっと思ったのは、起動中にデプロイされたら次のバージョンが……。
macopy:けっこう難しい問題なんです。その時は、これは難しいかもしれないですが、オートスケール中は新しいデプロイをやらないとか、キューに溜めておくとか、ロックを取るとか、そういう手法はあるかなと思いますね。
質問者4:わかりました。ありがとうございます。
司会者:ほかに質問は大丈夫でしょうか? では、ちょうど時間になりましたので、このセッションを以上とします。macopyさん、ありがとうございました。拍手をお願いします。
(会場拍手)
macopy:ありがとうございます。
関連タグ:
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