ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

入社してから2年

6/20 で2年経った。

前回

blog.chaspy.me

この半年もとても大きく成長した期間になったと思う。

振り返り

SRE Global Team として

1月に、フィリピンとインドネシアに出張に行ったことは自分にとって大きな出来事だった。global team メンバーとちゃんと顔を合わせて話すこと。一緒にやっていくこと、たとえば SLI/SLO について説明したり、あるいは SRE Team に対する期待値を話したり。食事に行ったり、遊びにいったり。id とアイコンだけの海の向こうのあいつらが、やっぱほんとにいいやつらだな、って思えたことは大きいし、思ってもらえたならいいと願う。

quipper.hatenablog.com

Boracay も最高だったな。海外旅行、大好きなのでまた行けるような世界に戻りますように。

この出張後から、彼ら彼女らとオンラインのミーティングをする機会がぐっと増えた。彼らから質問してもらうことも、チャット・オンラインともに増えた。やっぱり今までどこか遠い存在で、聞くまでにハードルがあって、それが下がったということなのかな、と捉えている。

もちろん相棒の Robbie との距離もグッと縮まったのもこの期間だった。同チームメンバーとしてリスペクトしながら仕事をしていたとはいえ、海外出張で一緒の時間を多く過ごして、仕事のことも、それ以外のこともたくさん話した。その後も直接話す機会を継続的に持つようにできている。ちゃんと言葉で「一緒に sre global team」をやれてよかったよ、ありがとう」と伝えられてよかった。彼もまた「入ってくれてありがとう」と言ってくれた。

SLI/SLO の組織への導入

そして1月末はそのまま SRE NEXT での登壇もした。カンファレンスの運営もしていたし、海外出張もありつつ、Coursera の資格も取って勉強しつつ、進捗を出すということで今思い返すとゾッとするほど Hard Days だった。もうできない。

quipper.hatenablog.com

SLI/SLO という、「アイデア」「考え方」は一般的に知られているが、それを実際に組織に落とし込むこととは大きな差がある。それを当時思ってたぐらいの世界には変わっていった。1年かかった。自分自身に経験がない中で、模索しながらだったので、もっと早くできたかというと難しい。しかし、学びは非常に多かった。

ある種、ツールを導入することを目的にしたわけで、それが正しいのか?という疑問は最後まで持ちながら続けることになった。途中、苦しいときもあったが、最初1人で模索していた時期から、後半になると Engineering Manager の takeyama さんがやりましょうと後押ししてくれたことは大きな支えになった。

まだまだその運用方法は各チームで試行錯誤している最中で、改善の余地は多いにある。また、SLO の Error Budget 消費に伴うアラートもまだこれからだ。それでも、SLI/SLO という"言葉"が Product Manager, Developer, SRE の中で共通言語となった今の状態は、十分よくやったと言えると思う。

開発組織の自己完結化、本番環境の信頼性、組織とシステムのスケーラビリティ、そういったことに対して、技術・文化面両方で支えるのが SRE の本質的な役割だと思っている。それに対して、Site Reliability Engineering の本丸である SLI/SLO を、開発チーム主体で運用がまわるところまで持っていけたことは自分にとって大きな財産になると思う。こういう経験ができる会社であることを本当にありがたく思う。

Team Lead として

5月から Team の Lead をしていくことがミッションに加わった。これまでもチームのことはそれなりに考えてきたつもりだったけど、それと同時に自分がやるべきミッション、仕事もちゃんとこなした上で、だったので、余力でやる、ぐらいでしかできていなかったことを、もう少し力をかけてやっていい状態にはなった。

とはいえ、現在 EKS への Migration や Progressive Delivery の段階的な導入など、1年前の自分じゃ任せきれなかったような、それなりに難しいテクニカルタスクをやりながらなので、状況がハードなのは変わりがない。

僕は takeyama さんが前 Blog に書いていた Management と Lead の不可分性について、ははあと納得したのであった。今でもこれはその通りだと思う。

blog.yuyat.jp

その中でこれらを分離しようとするわけで、期待値調整というか、Lead が Team / Project を技術あるいはコミュニケーションを通じて前に進める役割だとして、Engineering Manager は何に注力するのか、ということをお互い言語化したのはよかった。蓋をあけてみれば結構認識はあっていて、なーんだ、とはなるんだけど、やっぱり不安な状態でやるよりは安心して仕事ができたほうがいい。

これに関してはまだやりはじめたばっかりなので、次の半年がいろんな意味で楽しみだ。5月いっぱいはこの Role がすべきことを腹落ちさせるのに丸々悩んだりしてようやく納得できて、6月いろいろできる範囲でやってみている。

結構ハードなんだけど、すごい成長機会でもあるので、そういう機会をもらえて感謝している。

次の半年

ずっと同じことを言っているが、英語と技術が基本なので、それをシュッシュ変わらずやりつつ、前述した Team をどう前に進めるか、といったことに向き合い続けるんだと思う。

英語

正直前の半年ては伸び悩んでいた。コロナで若干体調というかリズムが崩れた段階で英会話ができなくなってしまって、思い切ってやめてしまった。質に課題感があったので、身に付けたい能力をちゃんと言語化して、プライベートレッスンをはじめた。

現状課題感があるのはライティングと発音、そして語彙(表現)なので、その3つに注力しながら、フィードバックをもらっている。

このへんは基礎体力みたいなもんなので、やり方を都度変えつつ内省しつつ続けるしかない。

技術

「はやく失敗する」「はやくフィードバックを得る」みたいなところは前よりは上手にできるようになってきたと思う。

また、コミュニティや発表されてる事例から、現実の課題解決に結びつけるみたいなことも少しずつできるようになってきた。

あとはすぐにリターンが来るわけではないが、知っておくと良いような深い技術力をどう無理なく身に付けていくか、は考えたほうがいいかもしれない。

無理なく、というのがポイントで、もう31をすぎまして、健康であることの優先順位を最近あげたので、今までのようにがむしゃらに時間を投資することはますますできない。

このあたりはこの2年課題感だけずっと曖昧なままなので、どこかでセルフコーチングをして、誰かに相談しようと思う。

組織

実は組織をどううまくするか、については昔から強い関心があった。が、この2年間は特に積極的にやろうと思ってなかったし、なんなら関心があったことすら忘れていた。

一周まわってようやくまた考えられるフェーズになったので、またあらためて本を読み直したり、言語化したり、試してみたりしたい。

これは SRE チーム内もそうだし、プロダクトチームという広いスコープでもそうだし、その両者の関係もそうだし、いろんなスコープで、ちょっとずつ自分が貢献できることを増やしていきたいと思う。

おわりに

半年ごとにちゃんとコンフォートにならずに済んでいるし、半年ごとに結構見える視界が変わってきているように思う。

特に最近は自分の得意な部分が明確にわかってきて、それの発揮の仕方もわかってきたので、いい状態ではある。

追いかけたい背中はちょっと減ってしまったけれど、まだまだ追いかけたいひとはいる。そんな幸せな環境に感謝しつつ、これまで以上にバリュー出していこうと思います。

おしまい。

2020-07-05 SREに関する雑談 bosyu#4 ECS + Fargate 構成におけるログの問題と IaC について

こういう bosyu をしています!

bosyu.me

背景

  • Frontend / Backend をやる Engineer の方が、副業でインフラを含めすべて1人で構築するシーンで苦労しているので壁打ち相手になってほしい
    • 特にインフラに苦手意識があるため、どうやってキャッチアップしていくかを悩んでいる

ということで、このあたりの勘所はなかなか経験ないと厳しいところだと思うので、壁になるだけでも十分貢献できたようです。

いくつかトピックを紹介します。

実践 Terraform をみて動かしてみるが、コピペ Terraform エンジニアになってしまっている

実践 Terraform すばらしいですよね。

このままでは力がつかないのでは、あるいはちょっとした構成変更をするのに苦労してしまったとのこと。

これはめちゃくちゃいいところに気づいていて、Terraform 自体は最低限の内容だけ抑えておけば対して難しくないんですよね。大事なのは中身のクラウドのことを知ること。

以前書いた記事を紹介しつつ、そもそもクラウドの中身を知ることのほうが大事という話をしたり

IaC はインフラの API のラッパーである API でできることを宣言的に書けるように Provider がしているものにすぎない 結局対象のリソースが何で、それを API でどう扱えるかを知る必要がある

blog.chaspy.me

実際に IaC 化するところで、いきなり HCL を書き始めているとのことなので、「僕たちだってよく知らないリソースに関してはドキュメント読んで、まずはマネジメントコンソールで作って動かして最低限の疎通を得たりしながら勘所を得て、それを Import しますよ」という話をしました。

SRE は自由自在に最終的な HCL を間違いなくエレガントにかけると思われてたようなので、そんなことないですと(笑)

クラウドリソースってものによっては作るのに時間かかったり、Terraform だとパラメータによっては作り直しになってしまったりするので、フィードバックをはやく得るには最初はコンソールでいじり倒した方がフィードバックが早く得られるので、取り組む順番を変えてみては、という話をしました。

あと上記に関連して、Terraform の基本的な事項についておさらいしました

  • state とは何か:実際のクラウドリソースの状態をあらわしているもの
    • Import: state にないものを state に取り込む
    • refresh: 実際のリソースに state を同期させる

ECS の Scheduled Task で動かしているもののログが出ない

awslogs Log Driver を使って、ログを出すようにしているが、Scheduled のもののログが出ない。そうでない Task のログは出ている、という具体的な問題について、画面共有しながら調査しました。

docs.aws.amazon.com

非常に申し訳ないことに、僕自身が ECS の経験が豊富でないこともあり、限られた時間で解決はできませんでしたが、方向性としては

  • このコンテナは本当に動いてるのか?
    • rails env prodcution で、ローカルで動かしてみては?
  • 同じイメージで scheduled じゃなく通常の Task として動かしてみては?

という話をしました。Task Definition を見る限りログの設定は問題なさそうでした。

ちょっと僕も昔 ECS 少しすぶったぐらいなのであらためて触りなおそうと思えたいい機会でした。

ペアデバッグ、ペアオペみたいなことも、解決できる保証はないんですが、積極的にやっていきたいですね。

はやくフィードバックを得ること、はやく失敗すること、安全に失敗すること

これは Quipper に入って学んだことでもっとも重要なことの1つでもあり、今でも向き合い続けていることです。

上記のデバッグをして、Task かな?を作り直そうとしていたときに、項目を見直して、ご自身で悩まれていたので、「これやってしまったら何か壊れますか?壊れたら困りますか?」という問いをして、失敗を恐れる傾向があるのかな?、という話をしました。

個人の性格によるんですが、大丈夫かな、と石橋を叩いて壊す(w)タイプのひともいれば、やっちゃえやっちゃえでぶっ壊すひともいて、どちらも極端なんですが、重要なのは「はやくフィードバックを得ること」そして「安全に失敗すること」なんですよね。

だからステージングとプロダクションでネットワークレベルで分離するし、Terraform state も分けるし。ステージングなら最悪大丈夫、って言えるのは「安全に失敗する」ため。

特にクラウドリソースなんて中身は見えないわけで、ドキュメントも完璧じゃないわけで、動くか動かないか、それをまず先に突き詰めてためにはたくさん失敗する必要があります。フィードバックループをできるだけ早くすることはソフトウェアエンジニアリングのいろんな場面で重要です。

僕も全然得意ではないですが、意識するようになって少しずつですが変わってきました。

今回のようにメンタリング的なアプローチができたのは思わぬ副産物だったと思います。

応募者からのフィードバック

聞けてよかったこと、話せてよかったこと、印象に残っていることががあれば教えてください

  • ECS+Fargate環境における具体的な困りごとを一緒に画面見るなどして、切り分ける考え方を教えてくれた
  • Terraformのツールの使い方を超えて、ツールを使うにあたっての心構えを聞けた
  • 「早く失敗することを意識したほうがいい」というアドバイスをもらえた(これはマジで心に響いた)

ということで、意味のある時間になったようで何よりです。

おわりに

引き続き bosyu しています!

bosyu.me

今回のように一緒にデバッグしたり、ぼんやりとした状態から悩みを具体化したり、もしかしたら考え方に関する話もできるかもしれません。曖昧な状態で大丈夫です。気軽に応募してください。それでは!

SREに関する雑談 bosyu#3 キャリアの幅の広げ方とインフラを"ちゃんとする"までの道筋

こういう bosyu をやっています!

bosyu.me

今回は Web Engineer の方に対して、キャリアの進め方に関する話と、インフラの信頼性をどうちゃんとしていくかという話をしました。

Web Engineer がインフラ領域に幅を広げるためには

逆に僕は Production で動く Application コードを書いた経験は乏しく、かつフロントエンドに関してはほぼ未経験みたいなもんなので、すごいなあと思いつつ。

相談された方はバックエンドとフロントエンドを両方やるエンジニアで、現在はスタートアップで少人数で働いているとのこと。

技術的な賞味期限を考えると低レイヤーを学んだ方が賞味期限が長いのでやりたいと思うが、その広げ方、深掘りのしかたを悩んでいる、とのことでした。

  • スタートアップにいるということなので、すぐバリューを出せるところ(得意なところ)をやりがち
    • 例えば現在の状況でインフラ領域をやる、となると生産性はどうしても落ちてしまう
    • 少人数であればそれをサポートする組織体制を期待するのもきっと難しい
  • chaspy はどうしているか
    • ごもっともだと思うが、自分はいい意味で(?)低レイヤーとか、アルゴリズム、高度なプログラミングなどは諦めている
    • というより、現実にぶつかる問題ベースで、それに関連することを都度学ぶしかないと思っている
    • もちろん先取りしてそれらの知識をつけておけば、その解決速度が早くなることは承知しているものの、いつ役に立つかわからないのも事実
    • 現在は投資対象を英語と直近で役立つクラウド、SRE、チームリーディングなどにしているため、現実時間でその先回りの投資的な勉強は正直できてない
    • ただ、その課題感はすごい分かるし、長期的には自分もどうにかしないといけないと思っている。。。
  • 最近 chaspy が業務で Golang を書いている事例
    • Go は SRE にとって必須教養だと考えている。
      • 使う OSS も Go で書かれているものが多い。upstream のコードを読んだり、パッチを送ったり、プラグインを書いたりできたほうが絶対良い
      • ある程度大きいプログラムは bash で書くといろんな面でつらい点が増えてくるので、そういう点でも bash 以外のプログラミング言語のほうが良い
    • チームメンバーに Golang が得意なメンバーがいるので、彼らに活躍してもらうために、チーム内の標準を Golang にしようと合意をとった
    • その結果、自分もその機会に恵まれた
    • 実際の問題解決と学習対象を結びつけた 事例だったと思う。こういうことが増やしていけるといいよね
  • とはいえ、現在の状況で、実業務を通じて学習していく機会を作っていくのはきっと難しい
    • 自分がとけそうな課題を発見するのが難しい。それが1日でできるのか、1週間かかるのかの判断がある程度経験ないとできない。
    • 適した課題が見つかったとしても、それを独力でやりきる胆力も必要
  • 課題意識の解像度をもう少し高めたほうがいいのでは
    • 「低レイヤー」と見ている、呼んでいるものの中で、何を獲得したいのかを言語化する
    • 今だと「フロントエンドやりたい」と同じ状態になっている
    • 学習内容の詳細化、言語化なら chaspy も壁打ち相手で役立てると思うのでまた

みたいな話をしました。すごい難しいですよね。

自分も今は「わけのわからない焦り」みたいなのはなくなって落ち着いている一方で、長期的なキャリアを考えた時に、深い・低いレベルでの技術の理解、だったり、フロントエンドを含めたアプリケーションコードを書いた経験の薄さみたいなところは課題に思っているので、すごいわかります。

まとめると、

  • 今の領域と違う分野を業務外で学習し続けるのは時間的にもモチベーション的にも厳しい(できるひともたまにいるが、すごすぎると思う)
  • 業務での実際の課題を、自分の学習と結びつけるような環境にいろんな方法でやっていけると良さそう
    • そのためにはもう少し学びたいことの解像度をあげたり
    • メンバーにこの問題意識を共有して知ってもらったりするのが良さそう

という感じでした。いい話ですね。

インフラを「ちゃんとする」ための道筋

  • 背景
    • スタートアップということで、最低限のインフラで動くものをスピード感を持って作るということが非常に重要
    • インフラはまだプロダクションに出していないということもありまだ後回しになっている
    • VPS に docker-compose で up しているだけ
    • 課題感だけ漠然とあるが、どの順番でどこから手をつければいいか?

ということで、これ実際に面接とかで使うと面白いんじゃない?ってぐらい面白い課題でしたw

コンポーネントトラフィックフローが描かれた図を見せてもらいながら、以下のような候補をあげました。

  • データをなくさないこと
    • データなくなったら困りますよね(それはそう)
    • データの定期バックアップをする
  • データベースの管理
    • 運用にコスト避けないならなおさら外部に持って Managed にしたほうがいい
    • スケールアップ、スケールアウトが容易なものにしておいたほうがいい
  • リリースエンジニアリング(CD)
    • 今は少人数だから ssh してコードを pull するでもいいけど、遠くない将来コミュニケーションコストがしんどくなってくる
    • あとそんなに難しくないので、投資対効果が高いので早くやるのがよさそう
  • メッセージング基盤
    • これもセルフホストは結構しんどいんじゃないか
    • Managed を検討したほうがいいと思う
    • データベースと同じぐらい自分で面倒みたくない
  • Logging
    • 障害対応時に調査できるかどうか
    • これも Papertrail / Stackdriver Logging とかの SaaS がある
    • fluentd から投げるだけならそこまで難しくないと思う
  • 可用性
    • 少なくともフロントの Reverse Proxy が落ちるとすべてサービス死ぬと思うので、そこの可用性確保が最優先
    • これを考えると同時に現在の状況からどのクラウドで、どういうアーキテクチャを採用するかを考えないといけないと思う
    • 現状の人数なら Kubernetes は too much かも 詳しいひと、モチベーションがあるひとがいればいいけど
    • PaaS でできるならそれが楽 heroku は最高
    • AWS, GCP などのクラウドを使うならまたそれだけで大きなトピックになる

というわけで、まずはデータ。次にデプロイの自動化。そして可用性のあるアーキテクチャを考えるためにどのクラウドを使うのか、というのをマネージドサービスと合わせて考えていく、という感じですね。今もコンテナで動いているのでコンテナが動く Platform のどれかを使うとは思いますが。

あとの優先順位はチームメンバー、組織の状態、お財布事情などによるので、ひとまずこのような項目を、現実の状態に即して提示できただけでも収穫はあったようです。

おわりに

引き続き bosyu やっています。

今回やったようなキャリアのお悩み相談から、アーキテクチャのレビューといったことも対応できそうです。内容はなんでも大丈夫なのでお気軽にご応募ください!

bosyu.me

#srefm Production Readiness 会まとめ

はい。こちらのイベントのまとめをしていきます!

t.co

今回はゲストに @koudaiii さんと _a0i さんをお招きして、Application や Infrastructure / Platform の Production Readiness について語りました!

お二人を選んだ理由としては、坂部さんの場合は Production Ready に関するアウトプットがすでにあったということで、すぐに打診しました。aoi さんのほうはサイボウズさんとかどうだろうねということで思いついて声かけました!お二人とも快諾していただき感謝です。

期待とか chaspy の所感とか

hackmd のほうにざーっと書いたやつ。


chaspy の所感

  • Production Readiness Checklist
    • とても良いもので、やってよかった。
    • SRE の負担を最小限にしつつ、Developer も学ぶことが多い様子
    • SRE とサービスチームとの目線の違いをすり合わせないといけない
    • やることが「大変」にならないようにしないといけない
  • Review を SRE がどうやるのか、今後まだまだ洗練させられると思う
    • 実際これまで chaspy メインでみてたので他のメンバーがレビューできる状態かというとそうでもなかったりする
  • 開発者からの Feedback を毎回もらうのが大事
    • 終わってイシュークローズするときにプチ反省会をしてテンプレを更新したりしている。大事
  • Progressive Delivery に適応できるように進化させていく必要があると感じている
    • 今のチェックリストはある一点の時間に、いっきにバーンと公開することを前提としている
    • そのため、試験的に・実験的に・段階的に本番サービスを公開していくような良い取り組みをやったときにいろいろぶつかった
      • Readiness Checklist の項目が終わってないのに出しちゃってアラート飛ぶとか
    • 今後は今の Production Readiness Checklist の項目は残しつつ、プロダクションへのサービスの段階的導入をいくつかモデル化して、それを Design Doc Review 時点で決定し、方向性を合意したのち、Readiness Checklist をいつどこまでどうやって進めていくか、みたいな話をする必要があると考えている

chaspy のこの会への期待

  • Production Ready って何をもって言えるのか、漏れてたりする観点があれば話をする中で見つかるといい
  • 特に一番難しいのはこの Checklist, Template の改善や運用方法。うまくいってる点いってない点あるので共有したい
  • サービス・プラットフォームそれぞれある中で、Production Ready の要素をうまく抽象化できれば便利な気がする

最初の15分ほどもらって、chaspy がやってきた Production Readiness Checklist や Design Doc の内容や運用についてざっと説明しました。

Session1 @koudaiii

事前に素晴らしいアウトプットを用意いただきました。

paper.dropbox.com

Wantedly さんでも導入当初から改善を繰り返しての今で、他のみんなと同様にまだまだ進化の途中ということでした。

驚いたのはこのリストの量ですね。過去のポストモーテムの原因から追記したりしていて、再発防止をしっかりしようとしていることがわかります。

そしてもう1つが、結構ほとんどの項目がやったかやってないかのチェックというよりは、「これは考慮されているか?」という"問い"のチェックリストだということでした。

アプリケーション開発者側では1.5h 想定ですが、インフラチームが見る分量としてはかなり多く、この問診票を持ってヒアリングするのはなかなか大変そうな印象を受けました。アプリケーション開発チームでもこれに自信満々に答えるのはきっと難しいでしょうし、だんだんと洗練されてくるんだろうなあとは思いました。

Session2 aoi さん

事前にいくつか話したいこと、質問したいことを書いてもらったのでそれベースで答えました。

そもそもProduction Readinessをどう始めるのが良いか?

  • chaspyさんのブログを読ませていただいたのですが、あそこに書いてあるよりももう一つ前段階の「はじめかた」を知りたい。
    • SREが必要と思って始めるのだとは思うけれど、そこから開発者の巻き込み方や、チェックリストの制定方法など。

はじめかたのはじめかたですね。

Wantedly の場合だともともと大きなアプリケーションの信頼性が高くないという問題から発信しはじめたということでした。

僕が話したことでいうと、Developer が集まるミーティングで一応広報はしたものの、Readiness Checklist 第1号となるサービス開発チームをつかまえて、これやってみてーといきなりはじめた感じでした。最初は結構つきっきりでやったので、大事なのはこうやって前例を1つ作ること、結構最初はきっちりついて一緒にやること、テンプレートを常に改善し続けること、という当たり前なことをちゃんとやるしかないのかなぁと思っています。

また、今回最初の項目を見直したんですが、めちゃくちゃ薄かったし、全然洗練されてなくて笑いました。以下、公開しますね。



name: Production Readiness Checklist about: Checklist of whether new service works correctly in the production environment.


Production Readiness CheckList for {NEW SERVICE}

Stakeholder

  • [ ] StakeHolder?
    • [ ] Service Owner:
    • [ ] Product Owner:
    • [ ] User:
    • [ ] Reliability: @quipper/sre

System / Architecture

  • [ ] Architecture review with SRE
  • [ ] Create architecture diagram
    • Please include following
      • Traffic pattern: Where does it call from?
      • Dependency
  • [ ] Update <service name>/microservices/service.yaml for dependency
    • [ ] app1
    • [ ] app2

Resources / Load

  • [ ] Access load is predicted: yes / no
    • [ ] comment:
  • [ ] Set Resource(Memory/CPU) limit/request of pods
  • [ ] Set applopriate database connection

Monitoring / Logging

  • [ ] Application: Notify an application error(NewRelic / Sentry?)
    • url:
  • [ ] Synthetic: Notify a synthetics error(Pingdom)
    • url:
  • [ ] Create datadog dashboard
    • url:

Incident / Failure

  • [ ] Circuit breaker is implemented on the caller side: yes / no
  • [ ] Escalation flow
    • flow:

途中でも話しましたが、まぁこんなリストなくてもまずやってるよね、みたいな最小限の項目からはじめて、それをアップデートしていくことが大事なんだとあらためて思いました。1年と少しで70コミットありました。

みんなダッシュボードってどうしてる?乱立しない?

  • 開発者によって何が使いやすいとか、データによってもダッシュボードどれがいいとかあると思うけれど、どうしてます?
  • チェックリストみると統一されているように見えるけれど、他を使いたい・使わざるを得ないみたいなケースはないのか

乱立してるし、秩序もないけど、トラフィックパターンによってインターネットフェイシングかインターナルか、ぐらいは分けられるので、Datadog Dashboard Template を作ってやってもらっています、という回答をしました。

「チェックリストのチェック一個足りないけれどリリースしちゃいたいから後回しにしよう」みたいなケースってないですか?

  • チェックリストが浸透したり、ブラッシュアップされていればそんなことはないと思いますが、最初のうちはそういうことがありそうだなと
  • あとはリリースするサービスの大きさや関わる人数によって変わってきそう

そうならないように、余裕をもってはじめるようにしているし、Readiness 警察を最初の方は結構していた、みたいな話をした気がします。

あとはチェックリスト自体にも問いのものが多いので、「わかっていればいい」「サービスチームがそのリスクを飲めるならいい」みたいな感じで、最終判断はサービスチームに任せる形にしています。

Session3 質問回答

slido によせられた質問に回答していきました!

app.sli.do

リリースしてから長い期間がたったサービスはドキュメントが腐ってしまったり、Production Readinessな状態でなくなることもあると思いますが、再度PRRを実施したりしますか?またそのきっかけはどのようなものですか?

sakabe さんは障害発生時に見直す、ということを言っていたと思います。私はその後見直すことはしませんし、ドキュメントもそのときのスナップショットと割り切っているので、腐ることを許容しています。

Productrion Readiness Checklist はどのように更新、改善されていますか?

Productrion Readiness Checklistの管理はどのようにやってますか?

sakabe さんは google docs, chaspy は GitHub の Issue Template Production に出て行ったあとにフィードバックを開発者からもらう時間を最近はとっています。

非機能要件の整理

今回話している Production Readiness Checklist 自体が非機能要件とか、障害発生時のトリアージができるかどうか、みたいなところにフォーカスしていて、機能要件に関してはサービスチームにお任せしています。

ビジネスサイドとのSLI, SLOの握り方 (どうしてもdevだけで決めて動くことになりがち)

sakabe さんは経営層含めて話して合意したということ。とれるならそのほうが良いですね。 chaspy の場合はあくまで Product Team が自分たちで信頼性をキープするためのツールという位置付け&ボトムアップではじめたので、プロダクトチームだけで完結しています。Developer と Product Manager と話して決めてもらうようにしています。

Production Readiness Checklistの記載に関して、Yes/Noだと幅が広すぎるため、どの程度達成できているのかぶれる気がしているのですが、その辺り(ぶれる部分)の把握はどのように行っていますか?

これはいずれも"問い"の質問は分かっていれば良い、という感じで、曖昧さを許容している感じだったと思います。

SLIの設計方法やロードテスト時の試験観点、Kubernetesに対する設定項目など専門知識が必要な項目は開発者だけで実施(もしくは実施判断)が難しい気がしますが、どのようなサポートを行っていますか?

Good Question. 結構難しいし、難しいことを強いている自覚はありますが、感謝と尊敬を持っておまかせしています。その代わり密にコミュニケーションをとったり、ギャップが大きそうなことは勉強会をやったり、ドキュメントにちゃんと書く、とかの努力はしています。

プロダクトライフサイクルはどの様な線引きでプロダクトごとにあてはめていますか?

sakabe さん向け、これは線を引くのは難しいよね、って回答だった気がします。

@koudaiiiさんに質問なのですが、これだけのチェックリストを全部に当てていくとインフラ業務のほとんどがこのチェックリストを埋めるので終わったりしませんか?このチェックリストを埋めているのと他の業務の比率はどのくらい取ってますか?

大変なときは大変だよね、楽にしていきたいよね、、、みたいな感じだった気がします。

プレモテームを知らなかったのですが、どんな流れで実施されているのでしょうか?リスク箇所の洗い出しなんかはどの様にやられるのでしょうか?

re:Work が参考になるとのこと。

PRRをスケジュールベースで実施することはありますか?半期/年ごとに1回など。サービス個別に大きな変更はないが、小さい変更が頻繁に行われている場合にはその様な実施方法もありえそう。

現状やってない。やれるならやるのがいいとは思う。が、チェックの自動化とかがもう少しないと厳しい気がする。

リリース前にすべてのチェックが必要でない場合、リリースした後に開発者は自律的に実施していますか?

リスク許容してあとでやりますっていう項目があった場合は、やっていると信じているけど、そこを見届けるまではしてないです。

PoCレベルのサービスに対するProduction Readiness活動は行っていますか? 行っている場合、どのレベルで行っていますか? (他のSLAが決まっているようなStable, GAなサービスと同じレベルですか?)

うちはそれは SLO によって差をつけるとか、Experimental なサービスだからそれをスキップするとちゃんと説明されていれば ok としています。

メルカリさんなんかは松竹梅ランクわけしていて、一時期これを真似しようとしたのですが、うまくワークしませんでした。アーキテクチャが均一じゃないと SLI が同じにならないので難しいと思う。

この Level のやつですね。

Checklistが通らなかった場合、QCDの判断はSRE側でやるのでしょうか?

サービスチーム側で判断してもらう、が回答かな。こちらはあくまで問いとか、やったほうがいいよ、なリストを提供しつつ協力して進めていくというスタンス。

Production Readinessチェックリストを作成するというのは、従来QAが行っていたような受入試験の設計を、SREチームが主導で行うという認識であってますか?

おそらく QA も非機能要件のテストはしていたはずで、その一部を担っていると考えることはできそうです。あってます!

おわりに

個人的にも経験できていろいろ話せるところで、他社の事例を聞けてめちゃくちゃ勉強になりました。特にプラットフォーム側のチェックリストなのかデザインドキュメントなのかについてはまだできてないところで、課題感も一致していることがわかったので、また1年後とかにどうなってる?って話をしたいなーと思いました。

sre.fm 毎月月末にやっていましたが、7月はおやすみです。(飽きたわけではない)

今リクエストもらってるトピックだと

  • CapacityPlanning
  • Monitoring
  • Performance Tuning
  • Kubernetes, Container Orchestration

あたりを事前アンケートでもらいました。

ゲストあってのことなので、僕自身の知識、経験量と、誰を呼べるか、話せるかと、僕自身のモチベーションによってやれたらやれることをやっていきたいと思います。こういうのこのひと呼んでやってよーみたいなのあったら声かけてください!

出演いただいた sakabe さん、aoi さん、ありがとうございました!sakabe さんは昨年の JTF ではじめてお会いして、ずっとファンとして追いかけてるので今回共演できてうれしかったです!終わった後もいろいろな資料、情報共有いただいたので、言語化の力負けないように頑張ります。 aoi さんともなんだかんだイベント共演は初!でできてよかったです。おとうふ君のファンなのでTシャツ間に合ってよかった。プラットフォームの Checklist これからできたら教えてください。これからも情報共有しましょう。あとビール飲みいきましょう。

おしまい!

SREに関する雑談 bosyu#2 SRE へのキャリアについて

はじめに

こういう bosyu をやってみています。2回目です!

bosyu.me

1回目はこちら。

blog.chaspy.me

事前の google docs での質疑

今回も、いきなり話はじめるわけではなく、話したいことを事前にピックアップしてもらい、それを非同期で返信していくやりとりを行いました。

今回はWebEngineer をやっていて、今はミドルやインフラに興味が出てきていろいろ触っているところであり、今後 SRE にキャリアを進めたいが具体的にどうすれば良いのか、という感じの相談内容でした。

事前に話したこととしては、

  • SRE になるための具体的なステップ
  • SRE になるにあたり理解しておいたほうがいいこと
    • Site Reliability Engineering が何かということ。100% を目指さない、とか、信頼性をコントロールする、とか。
  • SRE をやりたいという動機に対する深掘り
  • 今やるべきことは何か
    • 職務経歴書の作成
    • なければブログや登壇といったアウトプット
    • カジュアル面談や自分で調べたりしてどんな会社があるかを知る
  • 現状ご自身で"足りない"と感じているスキルの深掘り
    • 認証、ネットワークの基盤部分は専任チームがやっているので、理解が浅い
    • Read 権限があるのなら、まず自分でいろいろ見てみて、理解を何かに書いてそのチームにレビューしてもらうのはどうか
  • これまでご自身で工夫して DevOps のアプローチを組織に導入しようと試みたが、うまくいかなかった話の深掘り
    • デプロイの自動化、テスト自動化、ポストモーテムの導入など
    • うまくいかなかった点は良い経験として、「どうすればうまくいったか?」の思考実験をするのが良さそう

結構濃度高くこの時点で話せて、この時点で次にすべきアクションはある程度見えてきた状態ではありました。

当日話したこと

docs でのやりとりを通じて、

  • 三者からの意見をもらって、俯瞰できるようになった
    • 今の状況がよくなさそうってこともわかった
  • 転職していくなかでどういうアクションしていくかを今回いろいろ選択肢がある中で考えていく
  • 自分のやりたいこと、やれてないことわかったのでよかった

ということでした。追加での質問が以下2点。

コミュニティへの参加、打ち解けかた、仲間を作る方法

社内に技術のことを話せる仲間がいないということで、どうやってコミュニティに入っていけばいいのか?という質問で、自分の経験から以下を列挙しました

  • Twitter で、書籍、登壇、ブログなどアウトプットしてるひとをフォローする
    • 学んでいるひとのアウトプット、考え、みている情報が流れてきて便利
  • Community で質問する
    • 質問をするのも能力
    • やさしい世界なので、きっと誰か答えてくれる
  • Community スタッフやる
    • その分時間は使うけれど、関係は増える
  • Blog や LT で発表する
    • 何かをわかった、と言うには、言葉にすることがどうしても大事
    • 実際に仕事をする上でも、なぜするのか、何が重要なのか、何が起きたのか、そういったことを説明するためにも重要なスキル

最低限おさえておいたほうがいいこと

  • Docker
    • git なみに必須教養になっているので、コンテナの深い理解までは必須ではないが、最低限 docker コマンドを動かせる、docker-compose で local で web application を動かすぐらいはできたほうが良い
  • 12 factor apps https://12factor.net/ja/
  • Pull Request での開発
  • 何かしら1つのクラウドの理解
  • IaC / Ansible Terraform https://techtarget.itmedia.co.jp/tt/news/1912/18/news06.html
  • 他社の Job Description みる
    • ここに書いてある必須項目がまさに"最低限おさえておいたほうがいいこと"
    • Casual 面談いって直接きくのもいいかも
    • Twitter や Slack community とかでつながりつくって雑談するのも良い

こういったことをお話しして、30分で終了しました。

Feedback でいただいたこと

さて、今後もよりよくしていきたいということで、フィードバックをいただきました。いずれもポジティブな内容で良かったです。


聞けてよかったこと、話せてよかったこと、印象に残っていることががあれば教えてください

どのようにしてコミュニティへ関わっていくのかについて、chaspyさん自身の経験を交えたアドバイスが聞けてよかったです。

話しきれなかったこと、聞ききれなかったこと、もう少し詳しく聴きたかったこと、期待を満たさなかったことがあれば教えてください

現時点ではなかったと思います。

本日の時間がみなさんの次のアクションにつながりそうでしょうか?そうであればアクションの内容を教えてください

コミュニティへの参加 (声を上げていく)、ブログ等のアウトプット、転職準備(志望動機作り、必須知識の学習、カジュアル面談等)

実際に会話に至るまでの流れに不備はありませんでしたか?改善できる点があれば教えてください

特にありません。むしろ事前にたくさんやり取りをさせていただいて感謝しかないです。

会話を行う上で気になった点、不快に思った点はありませんでしたか?改善できる点があれば教えてください

特にありません。

その他自由に感想を教えてください

自分のキャリア選択における、明確な指針を得ることができました。今後この機会を活かしていきたいと思います。本当にありがとうございました。


おわりに

bosyu 引き続きやってます!


SRE あるいはそれ以外を雑談したいひとを bosyu

SRE やそれ以外について雑談・相談を受けます。コミュニティ活動の一環で、自分に役立てることがあれば貢献したいのと、自分自身も多様なひとと話すことで学びになればいいと思っています。

  • SRE に関すること. SLI/SLO, Production Readiness, Monitoring
  • AWS, Terraform, Kubernetes, Nginx, Ansible etc.
  • Team Building, Culture Making, OnBoarding
  • コミュニティ活動(SRE Lounge, Terraform-jp)
  • その他質問なんでも

特定の深い技術的な解決よりは相談することで次のアクションの手助けになればいいなと思っています。 30分以内無料、30分以上1時間未満はお酒を何か送ってください。

経歴は https://chaspy.me へどうぞ


お酒は amazon の欲しいものリストから選べます。安いのは1000円からあるので、(事前の docs でのやりとりは含まず、当日の会話で30分以上を選ばれる場合のみ、)実際に体験したあとのお気持ちで送っていただけると幸いです。

www.amazon.jp

(今回30分以下にも関わらず、事前にやりとりで時間を使ったからとお気持ちをいただきました。。。本当はタダなんですよ、ありがとうございます)

今回やってみて、キャリア相談、職務経歴書のレビュー、面接練習なんかもお役に立てるかなと思いました。

おわりに

貴重な機会をいただいた、相談していただいた方に心からお礼申し上げます。ありがとうございました!

SREに関する雑談 bosyu#1 SRE チームの立ち上げについて

はじめに

こういう bosyu をやってみています。

bosyu.me

ありがたいことに、応募いただいて、実際に対応したので、個人情報、特定可能な情報は伏せつつ、どういう話をしたのかをまとめていきたいと思います。

実際の雑談までの流れ

「SRE 組織の立ち上げ」という点で、最初のメッセージでざっくりと話したいことの概要は聞いているものの、まったく共通点もない他人同士がいきなり話して30分や1時間で問題解決に至るのは難しいでしょう。事前に Google Docs に話したいこと、質問したいことを書いて共有してもらい、現状で回答できるものは事前に非同期で回答してしまいました。

ここでやりとりする分と、当日の30分までは無料でず。だいたい2、3往復しました。

その上で、当日はこういう流れでいきましょう、ということをシミュレーションしたり、当日この部分を最初に話してもらえませんか?みたいなことを伝えて、当日を迎えました。

ちなみに今回は応募者の方のチームから4名参加されました。特に想定してたわけでもないんですが、断る理由もないので、何人こられても構いません。

当日話したこと

背景の理解

背景を5分、10分ほどで説明してもらいたい気がしました! 何が問題で、どう解決したいのか、なぜ SRE チームを立ち上げる必要があるのか、など 1時間終わったあと Next Action が決まる、あるいはもともとしようと思っていたものよりよいものになればいいなと思っています

ということを事前のメモ上で伝えていたので、まず相談者のチーム・会社が持たれているもともとの課題をお聞きしました。

  • 手作業が多く、信頼性を損なう問題があったため、工程やプロセスを見直し、手堅いものにした
  • 一方で、安定性は担保できた一方、アジリティが失われてしまった
  • より信頼性を担保した形で、高速にサイクルを回せようにしたい

ということが背景であることがわかりました。

計画のレビュー

話している途中で、実際に今書いている資料を見せていただき、上記課題をどのようなアプローチで解決するのかを説明する資料を見せていただき、そのレビューを行いました。

結論としては、「解決しようとしている問題も、その解決のために向かう方向も正しいけど、そのやり方に注意したほうがよさそう」という旨のコメントをしました。具体的には

  • リリースエンジニアリング、インフラのセルフサービス化、マイクロサービス化、モニタリングとアラート対応、ログ基盤の構築、SLI/SLO... など、トピックがたくさんあり、これら1つ1つとっても深いテーマなので、一気にやろうとするのは難しいかもしれないので優先順位をつけたほうがいいのでは?特にリリースエンジニアリングに関する自動化が最優先というコメントをしたり
  • SRE っぽいことを進める上では、ツールや技術はもちろんのこと、それを各チームでリードしてくれるひとを作らないと絶対広まらないということを自身の経験あるいは群衆の英知もしくは狂気 を使って説明しました。各サービスチームごとに Embeded SRE のような形で進めていくとのことで、現状興味があるひとがいるということだったので、その点はそういうひとにリードしてもらえればいいなと思いつつ
    • それぞれの要素、プラクティス1つ1つが難しいので、各担当がバーンアウトしないかが心配という懸念をお伝えしました
  • マイクロサービス化に関しては、境界を決めることが難しいため、サービス境界をどう見極めるか、あるいは途中で方向転換できる自信がないなら、あと回してもいいのでは、とお伝えしました
    • 直近では"明らかに切れる"サービスが1つあるということだったので、そのサービスを実験として、Site Reliability Enginering のプラクティスもまわしていくという方向性だったということがわかったので、それは非常に良い選択だというコメントをしました
  • 自分自身の経験から、考え方やプラクティスを組織単位で推し進めるための方法として、まず最初にそれなりのひとが見ている場所に文章を書く、という話をして、そういう場所が今ないので作った方がいいかもしれない、という課題感を持っていただきました
    • 問題と解決策、目指す世界を言語化した上で、各チーム単位で話にいく、というアプローチをとった話をしました

1時間と少しの時間で話は終了しました。

Feedback でいただいたこと

さて、今後もよりよくしていきたいということで、フィードバックをいただきました。

以下、回答を差支えなさそうな範囲で紹介させてください。

聞けてよかったこと、話せてよかったこと、印象に残っていることががあれば教えてください

  • 我々のSREのToBeをレビューしてもらえて忌憚のない意見をいただけたのが本当にありがたいです。こういうのはなかなか外のエンジニアに見てもらう機会がないので貴重な体験でした。
    • あと事前の質問シートのchaspyさんの返信濃度半端ない。あのアウトプット力は見習わせていただきます。
  • 自分たちのSREの方針をレビューしていただけたことが非常にありがたかったです。
    • 印象に残っているのは、chaspyさんのアウトプットの量と質に驚きました。自分ももっとアウトプットするぞという刺激になりました。
  • Cultureの浸透・定着(・継続的改善)がミッション、というところが最も感銘を受けました。他のメンバーの思考・行動に良い影響を与える、というのは僕の最も不得意なところなので、もっと真摯に取り組んでいきたいです。
    • Production Readiness Check、大変参考になりました。「開発初期段階からSREが関与しよう」という取り組みを始めたところでしたが、そのためにもこのようなチェックリストは必須ですね。※当然なのかもですが、明文化・周知・啓蒙はいろいろ応用できそうですね。
    • 「MSAは難しい。モノリシック最高!(苦笑)」は、僕も感じてることでした。特に「何でもRDB、何でもJOIN」で永続データ管理をしてるモノリシックサービスには手を出しづらい。。。昨年末ちょっとだけ検討に手を付けてそれっきりになってしまってますが、分割ポイントをまた検討したいなと思いました。
    • monorepoは他のメンバーに押し付けづらいな、、と思ってましたが、CI/CDの統制という優位性はちょっと自信になりました。
  • SREが作った仕組みを、実際に開発に使ってもらう事がいかに大変か、という話題はとても印象に残りました。定常的なサービス運用/運営にはSREは出てこないという形を考えた時、やや不安もあったのですが、お話できてよかったと感じました

自分の経験から、Blog に書いたアウトプットに紹介しながら、なかなか文章に現れない、大変だったという点が"生の声"として聞けてよかったという感想を多くいただき、よかったなと思います。

また、社内でいくら揉んだとしても、それを社外の、利害関係がない立場から意見をもらえるというのは良い機会だったようです。

話しきれなかったこと、聞ききれなかったこと、もう少し詳しく聴きたかったこと、期待を満たさなかったことがあれば教えてください

  • 元々議論したかった議題とは直接的にはずれていたかもしれませんが、結果的に聞きたかったことは聞けたので満足しています。
  • リポジトリ管理、ブランチ戦略、CICD周りはもうもう少し聞ければよかったかなと思っています。
  • 苦労話が聞きたかったな、とあとで思いました。
  • SRE無職説を説いた時の周りの反応等も聞けばよかったなと思いました

今の思いつきですが、このあたりは事後のフォローとして、個別にメッセージをお送りしようと思います。

本日の時間がみなさんの次のアクションにつながりそうでしょうか?そうであればアクションの内容を教えてください

  • まずは SRE の活動の社内認知。
    • SRE としての活動を社内に認知してもらうアクションが足りなかったことをchaspyさんがされていることを通じて気づきました。
  • 繋がりそうです。
    • 早速あのあと、4人で今後の進め方について1時間くらい話しました。
    • まずは、リリースエンジニアリングの自動化・仕組みづくりを進めていこうとしています。
  • できるところから徐々に、
    • リリース作業の改善 <-- CI/CDの統制を徐々に
    • 開発開始時の改善 <-- SLI/SLO, Production Readiness Check を広げていきたいと思ってます。そのためにも
    • ドキュメンテーション、啓蒙 ですね。
  • 現在のSREタスクを開発に渡してゆくための、タスクの具体化、優先順位付け、渡す内容整理(そのまま渡すのか?整理(物によっては自動化)してから渡すのか)、等の準備に参考になりました。また考えている事や実験した事等を「みなが見る所」にoutputしてゆく事も我々のactionになってゆきそうです

せっかく貴重な時間を、事前の docs へのインプット、レスポンス含め使っていただいているので、何かしら1つでもアクションにつながることがあれば、この会は価値があったかなと思います。

おっしゃられているように、課題はわかっている、それに対してどういうことをすればいいかも議論して見えはじめている、でも本当にいいんだっけ?という感じだったと思うので、その方向性に対して、難しそうな点、苦労しそうな点をお伝えすることで、そのアクションの解像度があがったのではないかな、と思います。

実際に会話に至るまでの流れに不備はありませんでしたか?改善できる点があれば教えてください

  • 特に問題はありませんでした。zoom 様様ですね
  • 事前に質問表ベースでコミュニケーションが取れたのも議論の土台となって良かったです。
  • 我々の出した項目に対し、まずこちらの背景を要求頂いて大変助かりました。
  • 特に困ったことはありませんでした。

事前のやりとりは実験的でしたが、うまく働いたようで安心しました。

会話を行う上で気になった点、不快に思った点はありませんでしたか?改善できる点があれば教えてください

  • 最初はやはりお互い硬い感じになってたかなと思いました。はじめのアイスブレイクをもう少し上手くやれれば良かったと反省してます

その通りですね、フィードバックいただき感謝します。この意見をいただいて2件目では意図的に冒頭にアイスブレイクをいれています。

その他自由に感想を教えてください

  • 貴重な体験をさせていただき本当に感謝してます。
    • chaspyさんの最初の圧に少しびびりながらも徐々に打ち解けられていって良い時間を過ごせたと思います。
    • 自分が体験してみて非常にプラスな時間でしたので、chaspyさんのこの活動がもっと広がれば最高です!
  • まず、エネルギーの質・量のケタが違うな、とエンジニアとしての日々の努力不足を痛感しました。
    • 今まで外部の勉強会で、他の方が「うまいことやっている」のを学ぶことはあっても、「どれだけバリバリやっているか」を実感する機会はなかなかありませんでした。
    • なんだか、今後頑張っていけそうな気がします。
    • 本当にありがとうございました。
  • いい刺激になりました。

勉強会のあとの懇親会で話を個別に聞く、みたいな感じに近いのかもしれませんね。勉強会での発表内容や、ブログの内容はどうしてもきれいでまとまったもので、応募者さん自身のケースに合わせて、こういう苦労がありそうだね、あったよ、という生の話を聞ける機会はなかなか得るのは難しいかもしれないので、そういう意味で良い場を提供できたのではないかと思います。

また、僕自身も、話す上で自分自身のブログのアウトプットを Reference として提供したり、知っていることを docs で書くなど、アウトプットの力の重要性を再認識できました。今後も怠らずに伸ばしていきたいと思います。気づかせていただきありがとうございます!

なんだか、今後頑張っていけそうな気がします。

めちゃくちゃ嬉しい。。。。!

まとめ

最後に、あらためて今回の bosyu の内容をまとめます。


SRE あるいはそれ以外を雑談したいひとを bosyu

SRE やそれ以外について雑談・相談を受けます。コミュニティ活動の一環で、自分に役立てることがあれば貢献したいのと、自分自身も多様なひとと話すことで学びになればいいと思っています。

  • SRE に関すること. SLI/SLO, Production Readiness, Monitoring
  • AWS, Terraform, Kubernetes, Nginx, Ansible etc.
  • Team Building, Culture Making, OnBoarding
  • コミュニティ活動(SRE Lounge, Terraform-jp)
  • その他質問なんでも

特定の深い技術的な解決よりは相談することで次のアクションの手助けになればいいなと思っています。 30分以内無料、30分以上1時間未満はお酒を何か送ってください。

経歴は https://chaspy.me へどうぞ


補足すると、お酒は amazon の欲しいものリストから選べます。安いのは1000円からあるので、(事前の docs でのやりとりは含まず、当日の会話で30分以上を選ばれる場合のみ、)実際に体験したあとのお気持ちで送っていただけると幸いです。

www.amazon.jp

(なお今回めっっっっっちゃお気持ち積んでいただいて喜びダンスしました。。。。。。。)

また、ここであげていること以外でも、今回やったように、 社内ドキュメント、資料のレビュー というのはお役に立てることだと思います。(もちろん秘密は厳守します)

おわりに

今回、思いつきでのはじめての試みでしたが、満足いただけたようでやってよかったなと思います。今後もコミュニティに貢献できるように、この bosyu は継続的にオープンしながら、自分自身もさらに経験を積み、わかったことや失敗したことをアウトプットしながらさらに価値を発揮できるよう頑張っていきたいと思います。

貴重な機会をいただいた、応募者様、チームのみなさま、本当にありがとうございました!

bosyu 応募いつでも誰でもどうぞ!

Argo Rollouts を使った Canary Release

はじめに

今年は Progressive Delivery をやっていくぞ!という気持ちでいろいろ調べたり試したりしています。その中で、試すのにもっともハードルが低い Argo Rollouts を使っていき、実際に導入するまでを説明していきます。

本当のところを言うと Argo Rollouts 良さそうっスよ、とか言ってたら速度で同僚の mtsm さんRails Upgrade の文脈で素振って使いはじめてあれよあれよと明日本番でやるということで、お任せしてもいいんですがまぁ一応ね、ちゃんと追いつくぐらいはしとかないとね、と思い慌ててまとめています。

Argo Rollouts

オフィシャルドキュメントがちゃんとしているのは最高ですね。

argoproj.github.io

Argo Family の1つで、Kubernetes Deployment の代替となるものです。Deployment と同様に Replicaset を子リソースとして持ちます。通常 Kubernetes Deployment は Replicaset の入れ替えに Recreate か Rolling Update といったStrategy によって行われますが、Rollouts はこの Strategy をより詳細に定義できるリソースです。

何ができるのか

strategy field で step を定義し、replicaset を移り変わる際の挙動を指定できます。

setWeight: 10

Canary 中に Update を進める割合です。これだと 10% を意味しますが、実態は replicaset なので、どう頑張っても pod の数の粒度でしか進めることができないことが注意点です。

argoproj.github.io

important note に書いてますが、round up されます。

pause

止まります。言い換えると、人間の判断を待ちます。

dashboard なのかなんなのかを見て、Yoshi! となってから、promote と呼ばれるコマンドを実行することで次の step に進みます。

なおこの Pause に Duration をつけることも可能で、つけた場合は指定した時間待機して、次の step に進むことになります。

その他の機能

ざっと見ていきましょう。

  • analysis: これは重要です。決められた条件を満たさなければ、rollout は abort となり、元に戻ります。これについてはあとで詳しく掘っていきましょう。
  • antiAffinity: 古い version の replicaset と新しい version の replicaset が同じ node に schedule されないように、RequiredDuringSchedulingIgnoredDuringExecution を set すればいいってやつ。なんでかというと古い version と 新しい version の pod が同一 node に混在していた場合、古い version がスケールインした場合、新しい pod がのっている node は Cluster Autoscaler によって縮退されてしまうから。でもそういうことあるかな。。。そもそも PodAntiAffinity を基本 Production では有効にしているので不要な気がする。
  • canaryService: 有効にすると canary 先の新しい replicaset にだけ traffic を流す。これ、なんのためかわかんなかったけど前方互換性がない場合のためかな?でもそれ割合によって capacity 激落ちするけどいいんだっけという。
  • stableService: stable, つまり canary 先ではないほうを常に参照するようにする。これもなんのためにやんだっけと思うんだがユーザに公開せず deploy して、canary の replicaset には何らかの方法で特別にアクセスするのか?traffic routing のところの header とか使って。
  • maxSurge: 各 step の setWeight した場合に遷移する際に作られる pod の maxSurge。意味あるんだろうか。。。
  • maxUnavailable: 上に同じ。default 0 だし、それでいいんではないか。
  • trafficRouting: 基本は新旧の replicaset の pod の割合で weighted loadbalancing されるが、特殊なルールを設定できる。が、これは Advanced かな。Pod 単位より小さい割合での Traffic Spliting だったり、Header Based routing だったり、Mirroed traffic だったりできる。が、これは他の Front Proxy(Istio, Nginx Ingress Controller, AWS ALB Ingress Controller, Service Mesh Interface)等との組み合わせで実現できるものなので、応用かなーと思っている。

HPA Support

argoproj.github.io

HPA と組み合わせたらどうなるの?ということだが、ちゃんとサポートしている。

HPA の target を rollout resource にしても動く。HPA は rollout の desired replicas を変化させる。

ただ Progressive State のときのロジックが新旧それぞれ Ceil になってるらしく、合計を上回ることはある。

github.com

このへんは同僚の mtsmfmd-kuro がちゃんとコード追っててさすがとなりました。見習おう。

実際にどうやるのか

Plugin いれましょう。

argoproj.github.io

Deployment からの書き換えはここを参照。

argoproj.github.io

あぁ、その前に Controller はいれておきましょう。Cluster Level で先にいれておいたら、あとは yaml 書くだけなので楽勝です。

まぁ例えばこんな感じの差分になる。

f:id:take_she12:20200616043137p:plain

で、もともと Deployment があった場合、Rollout と二重になる。selector も同じなので、ClusterIP の Service からどちらも Traffic は流されるはずだ。

実際の手順は以下のようになるだろう。

  1. Deployment を Rollout Resource に書き換え、Apply
  2. Cluster 上の Deployment を削除する
  3. Canary Release する

この場合、1 と 2 の間では実際に指定した割合以上に、すでに存在している旧バージョンである Deployment にも Traffic は流される。が、まぁ悪いことではない。

もっとも原始的にやるなら、SetWeight と Pause を交互に書けば良い。Promote は CLI で Web Engineer がやる想定。なお RBAC で権限絞ってる場合は変更が必要。

また、待ち時間によって自動的に次の step に進めたいなら Duration を指定すれば良い。かんたん。

Analysis

どうせやるなら自動で戻ったり進んだりしたいよね。Analysis 見ていきましょう。

argoproj.github.io

4つの CRD

  • Rollout: これまで説明したやつ
  • AnalysysTemplate: その Analysis が成功したか判断するロジックとかどの metrics 使うかとかが書いてあるやつ。引数も受け取れる。全体の中での条件( Background Analysis )として使われることもできて、この Step 以降でみる、みたいなのもできる。( startingStep ) また、Step の一部として Analysis を実行する場合でも使える。( Analysis at a Predefined Step
  • AnalysisRun: 複数の Analysys Template を、Step の一部として実行する場合に使われる( Analysis with Multiple Templates
  • Experiment: 解析のために限定的に Analysis を実行する。

その他

  • BlueGreen Pre Promotion Analysis: Blue/Green の事前 Analysis
  • BlueGreen Post Promotion Analysis: Blue/Green の事後 Analysis
  • Failure Conditions: Analysis の失敗条件
  • Inconclusive Runs: 解析結果が決定的でない場合がある:成功条件にも失敗条件にもひっかからない場合など。この場合、その Step で止まってしまう。
  • Delay Analysis Runs: initialDelaystartingStep で解析開始までに遅延をいれること。
  • Referencing Secrets: 外部 Provider へ metrics を収集するときに必要になりそうな Token のような秘匿情報を同じ namespace から arg として渡すことができる
  • Experimentation (e.g. Mann-Whitney Analysis): Stable と Canary 両方に Traffic 流して、どっちも Analysis やる的な。たぶん。
  • Run Experiment Indefinitely: Pause のように Duration を指定しなければずっと Experiment させることができる
  • Job Metrics: Analysis は Kubernetes Job として実行もできる
  • Wavefront Metrics: 知らぬ
  • Web Metrics: 外部の web service の metrics を使う。datadog の場合はこれ使うしかないんかな。

metrics provider 何があるんだろうか。

github.com

ここぽい。うーん web 使うしかないかあ。

とすると datadog api 叩くための secret 作って、それを arg で渡して get する analysis 書いて、arg でサブドメとか渡して前段の nginx の http status の 5xx / 2xx rate でいい気がする。

気をつけるべきこととか

  • 前方互換性:Canary Release するなら、これは守らないとダメ
  • branch が1本しかないことを許容する:つまり Progressing のときに HOTFIX を当てるとかはできない。したがって analysys と組み合わせて比較的短時間、例えば1時間とか。であげきる必要がある。
  • Rollback & HOTFIX: 基本的に途中でダメなら Abort で Rollback して、それに HOTFIX をあてて前に進むという戦略を取る。あげきったあとは戻れない。(し、戻る必要はない)
  • Deployment から Rollout というリソースに変わるので、アラートや Dashboard が死ぬ。やむなし。
  • 毎回 Strategy を選択するのは理想的ではない:
    • いや、リリースのたびStrategy 部分のコードを変更すればいいんだが
    • やる?それ、という
    • 基本的にはすべてのリリースで毎回通る Strategy を指定するしかないんでは
    • あるいは Analysis 付きの場合は対象の Analysis を変更することでスッと行くようにすることはできると思うが
    • そこに気を使わないといけない状況嫌じゃない?

おわりに

この記事が出る本日 Production でやっていくようです。やっていきましょう。

次は Traffic Management を読んで、ALB Ingress を利用したパターンを理解しておく。