クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

実録:「えっ、このシステム何ですか?」から始まる小さな引継ぎのおはなし。

はじめに

みなさまこんにちは。なんとか生き延びております、たかのです。

いきなり本題ですが、事業を長く続けていると、サービスの中核のシステムは肥大化します。 複雑さが増せば、理解も運用も大変になってきます。

そんな複雑さを回避するために、小さい単位で機能を分割し、別システムに切り出すことはよくあることです。 クラウドワークスにも、中核のシステムを支える小さなシステムがたくさんあります

生きているからこそ、お世話がつづくのです

システムは生き物です。(そうは思えないかもしれませんが、そんなものと思ってみてください!*1

稼働はしていても拡張や整理の判断ができず、「属人化」どころかその進化系で、作った人が退職して詳しい人が誰もいなくなってしまったもの。 そんな状態を、わたしたちの職場では「無人」と呼んでいたりします。

こうした状況は望ましくないので、メンテナンスを仕組み化し、チームで分担して取り組むようにしています。

さて、わたしたちのチームも、この「無人化」対応のタスクを1つ担当することとなりました。 その際のあれこれや学びについて、わたしの「 余技 」をふまえてお伝えします。

見積もりするよ!

無人化システムをひきうけるよ!!

f:id:akiko-pusu:20200730214348j:plain
無人化システムをひきうけるよ!!

まずは読み解こう!

f:id:akiko-pusu:20200730214439j:plain
まずは読み解こう!

あれれ?検証環境で動かない!?

f:id:akiko-pusu:20200730214515j:plain
あれれ?検証環境で動かない!?

いよいよ本番も入れかえ!

f:id:akiko-pusu:20200730214552j:plain
いよいよ本番も入れかえ!

継続メンテは可能?まずやってみよう!

f:id:akiko-pusu:20200730214615j:plain
継続メンテは可能?まずやってみよう!

インフラも学んでいこう!

f:id:akiko-pusu:20200730214632j:plain
インフラも学んでいこう!

※この顛末についての補足

Rails6のNotable Changeに、DNSバインディング攻撃への対策が追加されています。

なお、In other environments Rails.application.config.hosts is empty and no Host header checks will be done. と書かれています。config.hostsが空なら、このチェック自体は行われません。

ただ、このマイクロサービスは、外部からのコールバックを受け取ったり、外形監視を追加しています。

できればこの対策は有効にしつつ、ALBからのヘルスチェックも通したい。

上記の例ではNginxが前に立っていたので、ヘルスチェック用のホストヘッダを追加し、Rails側のホワイトリストにも、そのホストヘッダを追加ということでいったん回避しました。

Nginx側でヘッダを追加させなくても、ALBからのリクエストがどのアドレス、どのネットワークに対してのものなのかがわかれば、IPアドレスでの指定が可能です。ただ、インフラの構成が変わる可能性があり、アプリケーション側では関与仕切れないため、この対応で乗り切りました。

やってみての学び

f:id:akiko-pusu:20200730214652j:plain
やってみての学び

将来のだれか、もしくは自分がこまらないために

無人化してしまった場合は残念ですが、そうでなくても、人は忘れます。 なぜその時この仕組みを採用したのか、なぜこんな設定が入っているのか。

記録が少しでも残っていると、圧倒的に作業がしやすくなります。 コミットログでも、Wikiでも、プルリクエストでもなんでも構いません。

作業を通しての「なぜこの設定なの?」が多くありました。 同じく、わたしたちもまた、「なぜこんなことをしたの?」と将来思われるであろう設定も追加しています。 だからこそ、「うーん、これは書いておかないといけないな」ということを実感しました。

たぶんこうした記録は、「入れ替え」よりも「存続するかどうか」の判断に迫られた時に、非常に役に立つはずです。

こちらに関連して、わたしの好きな本の一章を添えておきます。

xn--97-273ae6a4irb6e2h2ia0cn0g4a2txf4ah5wo4af612j.com

まとめ

以上、「どんなことをするのか」「なぜやるのか」を、少しでもお伝えできれば幸いです。

「新築物件」も、一度でも入居されれば「中古」になります。システムも、一度そこで動かし初めてしまったからには、維持を考えなくてはなりません。 場合によっては、今回のようにインフラも含めて面倒をみることもあります。 「大丈夫そうかな?」と思っても、動かし続けながら、トラブルなく切り替えるためには慎重さが必要です。

ただ、「ああ、厄介だなあ」と思っても、食わず嫌いで手を出さないのはちょっともったいない気がします。 「一応は手をつけなくても稼働が担保されているシステム」ですし、SREのみなさん、愉快なエンジニアのみなさんがいるので、「困ったら泣きつこう!」と思える心理的安全性もあります。

また、チームとして取り組む際には、チームでの意思決定も考慮してもらえます。

  • 本当にこのシステムは必要なんだろうか
  • 当時は解決方法がこれしかなかったけれど、今なら置き換えできるかも
  • もしかしたら、機能そのものが要らないかも
  • コストとの見合いで、外部サービスにしてもいいかも

担当システムを維持するのが唯一の解ではないので、段階的にチャレンジを含めることも可能です。 維持する場合であっても、「今回はこれを覚えよう」といった目標を1つでも持つと、作業はまったく違うものになって来ます。

どうせやるなら楽しんで。

おのれALB....!!いつか必ずネタにしてやる!!! 」と思いながら対応していましたので、やっと終わってこうやってチームの記録として描けたことは何よりでした。*2*3

We're hiring!

クラウドワークス では、働き方の変革に挑戦するエンジニアを募集しています! 個性豊かで、愉快なエンジニアがお待ちしています。まずは気軽にお話してみませんか?

www.wantedly.com

*1:お母さんが言うんだから間違いありません!

*2:ALBとしては正しい挙動でちゃんとお仕事してたわけではありますが......

*3:また、笑い話のように書いてはいますが、「意外と大変で時間が必要」なことを、中の人、とくにビジネスサイドやプロダクトオーナー、マネージャーに少なからずわかってもらえたらな、というのが真の目的です。

© 2016 CrowdWorks, Inc., All rights reserved.