トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

SREチームで導入したものをピックアップしてみるの巻

トレタ Advent Calendar 2020 の 12 日目の記事です。

こんにちは、wind-up-bird です。

2020年のアドベントカレンダー3回目の登場です。

今回は割と肩の力を抜いて書いてみます。(なので、主観とかが多分に含まれます)

ところで、トレタに入社して約2年が経ちました。

入社した当時と比べると、SREチームで使っているツールや AWS のサービスも大きく変わってきました。今回はこの2年間で導入したものや変更点などをいくつかピックアップして紹介しようと思います。(ピックアップの基準も完全に主観。)

Kubernetes の導入と集約

トレタで最初に k8s を導入したのは トレタ Now です。*1 ネイティブアプリのバックエンドとして当時は GKE 上で稼働していました。


その後、他のサービスでも k8s (EKS) の導入が始まり、このときはサービス毎に EKS クラスターを起動していました。クラスターを分割していた理由は、クラスター毎に環境が分離されており自由度が高かったこと、また問題が発生した場合は各クラスター内で影響範囲が閉じていること、というところが理由です。

しかし、これによってとても小さなサービスでもクラスターが作成されていき、乱立してしまう状態となってしまいました。これは費用対効果の面で疑問が出てきました。また、各サービスごとにクラスターのアップグレードも必要になるため、運用負荷も無視できなくなっていきました。

そこで、これは 1つのEKSクラスターにまとめて、各サービスは Namespace で分割する仕組みに変更しました。現在は、6個のサービスが EKS上で稼働しています。

f:id:w1nd-up-b1rd:20201209182605p:plain

ECS の採用

アドベントカレンダー3日目のブログでも書きましたが、トレタの顧客台帳・予約台帳サービスのバックエンドは ECS を採用しました。

tech.toreta.in

脊髄反射的に EKS 上にホストしたかった気持ちをぐっとこらえて、移行対象のサービス特性や Pros/Cons を検討した結果、最終的には ECS に決めました。

従って、現在トレタでは EKS、ECS 両方運用しています。今後も、サービスの特徴や課題によって、どちらの基盤を採用するか都度検討して行こうと思っています。

ちなみに、今はEKSもECSもどちらも同じくらい好きです。

サーバーレス

いくつかのサービスでは、 Serverless Framework を導入しています。

ウェブ版 トレタ Now
今日、これから入れる飲食店が予約できる | Toreta now

トレタCC
トレタCCにAmazonConnectを導入した話 - トレタ開発者ブログ

導入の背景は、デプロイやログの確認が容易であったり、プラグインの充実、学習コストなどの面でメリットが大きいのかなと思います。これらのサービスはフロントエンドエンジニアが主体となって継続的に開発・デプロイを行っています。

それ以外にも lambroll や AWS SAM なども目的や用途に応じて積極的に検証・導入していってます。

tech.toreta.in

AWS Organizations と SSO の導入

これに関しては、もうブログを読んで頂くのが一番早いです。

tech.toreta.in

記事の中にもある通り、以前は各AWSアカウントで IAMユーザの払い出しや、EC2へのSSH鍵の配布などの運用業務が発生していました。しかし、 現在では SSO による一元管理、SSM Sessions Manager の導入など、セキュリティや管理・運用面でも劇的に改善しています。

ちなみに、最近では WebAuthN にも対応しており、自分も Mac の Touch ID をMFAとして利用しています。

aws.amazon.com

IAM のコード管理とレビュー体制の確立

これはどちらかというと技術というより思想の話になるかもしれません。

入社当時は、Terraform は導入していたものの IAM はAWSコンソールからポチポチと設定する運用になっていました。この問題点は、強力な権限を持った IAMロール や IAMユーザ が生み出されてしまうリスクがあり、IAMのベストプラクティスからも外れてしまいます。

docs.aws.amazon.com

そこで、IAM はコード管理しつつ、レビューおよびCI/CDの仕組みを導入しました(導入してもらいました)。ツールは Miam を利用しています。

github.com

自分も予想していなかったのですが導入後の効果はとても大きくて、今ではすべてのサービスや案件において、真っ先に IAMどうするか?をチーム内で議論するようになりました。

もう少し具体的に説明すると、例えば最小権限を設定したい場合、

  • AWS のリソースは何が必要か?
  • AWSのリソース間はどのように連携するのか?
  • 作成するリソース名は何か?(言い換えると、そのリソースは何をするものか?)

etc…

というのをきちんと理解しておかないと、Action/Resource/Principal などが適切に設定できないためです。

ということで AWSの設計はIAMありき というのが今のSREチームの共通認識となっています。(多分)

最後に

ということで、4つほど紹介してみました。

ここで紹介しきれなかったものもまだまだありますが、それはまた別の機会ということで。

最後の最後に、おなじみのやつです。

corp.toreta.in

*1:正確には、内部的な利用はあったのですが、プロダクトの基盤として使われたのはこれが初めて。

トレタでの輪読会

はじめに

これはトレタアドベントカレンダーの11日目の記事になります。

輪読会

トレタでは、有志を募って輪読会をする文化があります。

これまでに

著者にも来ていただいたこともあります。

そんな今回はドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本を開催しました。

なぜドメイン駆動設計なのか

ドメイン駆動設計とは、エリック・エヴァンスが提唱したソフトウェア開発手法です。

DDDと呼ばれて、様々な解説記事や書籍が販売されています。

しかし、概念はわかるけど、どうやって使っていけばいいのかが人によって解釈が違ったり、コードとして表現しづらかったりした印象でした。

そんな折にドメイン駆動設計入門が発売されて、DDD界隈でわかりやすいと紹介されているのを目にしました。

トレタでも近年DDDを取り入れて開発していこうという熱が高まっていたこともあり、これは輪読会する機運だということで開催を決意しました。

輪読会の進め方

  1. 毎週1時間の枠を確保
  2. 1人が1章を担当
  3. 残った時間で、章に対しての雑談

輪読会では、決まった時間を確保するのが大事だと思います。

隔週での開催か毎週の開催かは参加人数によって変えて行くといいと思います。

今回はその場で本を読むのではなくて、読んできたものを要約したものを発表する形でやっています。

そうすることによって、DDDを当てはめられる状況や仕事に対しての相談や共有が可能になりました。

リモートワークが中心になり、一人で本を音読することはそこそこきついのでおすすめです。

DDD輪読会をした感想

各人でふんわりした認識だったDDDを1冊の共通した書籍で同一の認識を持てるようになったのは良かった。

これからの開発でも一致した感覚で話ができると思うので、開発が楽しみになる。

開発がメインのメンバーだけだったので、企画メンバーにも参加をしてもらえばよかった。

最後に

トレタではDDDをやっていきたいエンジニアを募集しています。

カジュアルで話をしたい場をありますのでお気軽に連絡してください

中途採用 | 株式会社トレタ

チームワークにおけるDocumentation

みなさんesa等の共有ドキュメントツール使っていますか?ドキュメントって書くのって非常に難しいですよね。いや、ただ書くのは簡単ですが、相手に伝わるドキュメントを書くのが非常に難しいですよね。

特にエンジニアの皆さんは「シンプルで美しい」みたいな様相を好むと思いますので、ドキュメントを書く際にもそういったマインドの中で書かれている方も多いかと思います。

こんなタイトルの記事を書いておきながら自分はエンジニア業を通す中で積極的にドキュメントを書いている人間かと言ったらそうではないですし、後術するノウハウを意識できているかと言ったら出来ていないと思っています。ので、その自戒も込めつつこちらの記事を執筆させていただきます。

エンジニアだけでなく、日頃チームの中で働く皆さんのご参考になれば幸いです。

ドキュメンテーションはスキルの一つ

同じ領域で仕事をしている人へのドキュメントは文脈を読んでくれるので大体は伝わります。しかし、領域外の人はそもそもの文脈を理解していないので、客観的に書かれていない文章を理解するのに頭を意外と使います。

日本人は小学生や中学生の頃から国語の授業で『この一文のときの主人公の気持ちを20文字で記載しなさい。』といった問題で訓練されているので、文脈を汲み取ろうとする文化があります。

しかし、一般的に用いられない自分の領域内の用語や単語を使っていたりすると、ドキュメントを読むのに時間が掛かってしまうこと繋がります。難しい用語や単語を一般的な用語や単語に置き換えることや、論理展開を相手の思考回路に合わせて記述していくことによってドキュメントの理解度の向上につながると考えます。

つまり、どれだけ客観的に物事を記載していくかで相手の理解度が変わっていくわけですが、今回は『意思決定』を主軸をおいたドキュメントの書き方を紹介します。

◆Prerequisite: 背景となる前提

なぜ、このドキュメントが存在するのかを背景を踏まえて明記する

  • このドキュメントが生まれた背景となる課題感
  • このドキュメントを通して何を成し遂げたいのかを記載
    • 何をしないのかも記載すると絞りやすくなる
    • お互いの共通認識をもつ

◆AsIs/ToBe: 現実と理想からのギャップ

理想形を作って、現実に落とし込む

  • 理想形をつくるためにリソース(人、物、金)について言及しないで考える
  • 理想の形から現実に落とし込むときにリソースについて言及する
    • 理想と現実のギャップから課題が発見されるため、それを解決するために必要な要素を洗い出す
  • 現実に落とし込むときは一つだけに固執せず、複数パターンを列挙して現実でのやり方を落とし込む

◆Pros / Cons: 長所と短所を理想と現実のパターンから洗い出す

パターンから長所と短所の洗い出しをする

  • AsIs / ToBeから洗い出された複数パターンについてPros/Consを洗い出す
  • 人、チーム内、チーム外、プロジェクト、組織、経営の各目線を変えて長所と短所を見出す
  • テクニックとして、マトリクスで表記するのが見やすい

◆ToDo: ネクストアクションを決める

パターン決定ないしはパターンをいくつか絞ったことに対するTODOをまとめる

  • ToDoについてはコントローラブルとアンコントローラブルについて切り分けておく
  • 時間差となるタイムラインを踏まえて重要性と緊急性を考えておく

◆気をつけること

  • 最初から論理思考フレームワーク(MECEなど)を使うことはやめる
    • フレームワークを使うと「っぽく」はなる。なるけどゴールが噛み合わなくなるので議論が収束しにくいのと納得感も生まれにくい
    • なぜならば、『それはあなたの世界における思考であって、世界がわからなければそのMECEが正しいかもわからない』状態になってしまう
    • つまり、世界を理解するためのドキュメントの前提となる Prerequisite が重要

まとめ

細々と書いていきましたが、まとめると冒頭にも述べた通り「どれだけ客観的に物事を記載していくかで相手の理解度が変わっていく」ということに尽きると思っています。よく言われることだと思いますが、意外とそれをどうやってやれば良いかまで体系的にまとまっているものが見当たらなかったのでこちら記事にさせていただきました。

プロダクトやプロジェクトの想起時、考えやアイデイアのブレストの際に活かしてみてはいかがでしょうか。

さいごに

今回は要点だけ書いたので実際の書き方はピンと来ないかもしれないですが、機会があればそれも書こうかなと思います。

ちなみに、この文章も読みにくい人は一定数いると思っていますが、ためらうよりはたくさん書いた方が特訓になると割り切っているので、悩んでしまうならまずは手を動かしてみましょう!(自戒も込めて)

Let's document all of your stuff to be easy to understand them for all employees. 📝

お知らせ

トレタは既存の事業にとらわれず日々スピード感をもって新しいことをドンドン始めています。人から切っても切り離せない「食」の世界に興味がある人はぜひ遊びに来てください!

一緒に働けるメンバー も募集しております!

参考文献

理科系の作文技術 (中公新書 (624))

理科系の作文技術 (中公新書 (624))


サイモン・シネックの『優れたリーダーはどうやって行動を促すか』

© Toreta, Inc.

Powered by Hatena Blog