ヤプリのSREマネージャー望月です。
近況としては以前のしいたけ栽培の失敗を教訓に、栽培はプロに任せて成果物だけいただくという素晴らしいサービス(普通の収穫体験)にハマっています。
先日SRE・サーバーサイドエンジニア・セキュリティエンジニアの6名で、Google Cloud社のTech Acceleration Programというワークショップに参加させていただきました。
Tech Acceleration Programとは
Google Cloud社が提供する開発支援のプログラムで、数日間で完結するアジャイル型のワークショップです。
元々は開発内製化を目的としたものですが、ヤプリの開発は当初から内製化されているため、今回は全体アーキテクチャの振り返りと今後検討している認証基盤の設計・プロトタイピングを目的として開催していただきました。
ちなみに普段は省略してTAP(タップ)と呼ぶようです。
ワークショップ内容
スケジュールとしては終日・3日間連続の形で、普段の業務から離れて集中できる濃密な時間となりました。
1日目
最初にTAP ROOMと呼ばれる専用スペースにご案内いただいて開始となりました。
まず冒頭で何よりも最初に出てきたテーマが「心理的安全性を確保する」の説明で、自社内の業務だけではなく外部との関わりでもGoogleの文化を大切にされている姿勢が感じられました。
今回はヤプリ担当以外にも各領域のスペシャリストが参加されているということで、ヤプリのビジネス要件・システム構成の共有から始めました。
その中でも特に
- SQLiteをベースにしたマルチテナントアーキテクチャ
- ヤプリのバリューにもなった再構築という機能 *1
- 累計1億5000万ダウンロードの大規模ユーザーを支えるプッシュ配信基盤 *2
- Google Cloud - AWS間のデータ転送・集計基盤
などのヤプリにおける特徴的なアーキテクチャでは議論が白熱していました。
私個人としても「え、こういう仕様じゃなかったの!?」「お、昔あった課題が今は改善されたんだ」など、あらためてシステムへの理解が深められる良い機会となりました。
こういったワークショップ関係なく社内でも継続的に振り返り・議論をすることで、知識の底上げや新たなアイディアの創出に寄与するなどの効果が見込めるのではと感じています。
またヤプリは現在AWSの比重が高いですが、コスト最適化やマルチクラウドなどの観点でGoogle Cloudへ置き換えた場合のアーキテクチャなども議論してきました。
前述のヤプリ独自の事情なども踏まえて、あらためて色々考慮すべきポイントが見えてきています。
この1日では議論しつくせてはいませんが、継続的に検討していくことが重要だと再認識できました。
まったくの余談ですが、前日ホタル鑑賞に行ったところ、日焼け対策を怠って腕が真っ赤な状態での参加となりました。
当然のごとく皆さんにつっこまれて、初対面からあまり緊張することなくスムーズに入れた気がします。 (あえて隙を見せるのも悪くない)
2日目
2日目はテーマを変えて、認証基盤のアーキテクチャ検討をしました。
ヤプリではこれまで認証機能を各サービス毎に実装しておりましたが、今後の事業拡大を見据えて共通の認証基盤を検討する時期に来ています。
しかしながら社内の知見があまりなかったため、本プログラムを活用して一般的なアーキテクチャのキャッチアップなども含めて議論しました。
「KeycloakをカスタマイズしてGKEにのせる」「Auth0のようなIDaaSを利用する」などの選択肢の中から、今回は実装のスピード感や後続のプロトタイピングなども意識してIdentity Platformを利用して設計することにしました。
Identity PlatformはFirebase Authenticationをベースに、テナント管理や監査ログなどエンタープライズ向けの機能サポートがあることも現状の要件にマッチしています。
OIDCやSAML・SNSなどの外部連携、MFA(OTP)などのセキュリティ強化といった機能も含めて利用できるシンプルな料金体系もポイントかと思います。
最近私は新しいアーキテクチャの議論に参加する機会があまりなかったので、懐かしいなと思いながら楽しんで参加できました。
今回は時間の関係上で詳細までは踏み込んでいませんが、本格的に認証基盤を用意すると仮定すると、ヤプリの既存サービスの対応など含めて色々考慮すべきポイントがありそうです。
最終的な着地は見えていませんが、そこに至る道筋の解像度が上がっただけでも非常に有意義な取り組みでした。
3日目
最終日は前日に考えた認証基盤のイメージを、実際にプロトタイピングして動作する物に落とし込んでいきました。
Cloud Runなどはヤプリ内で実際に採用しているサービスではありますが、あらためて各設定項目のレクチャーを受けながら進めると、「この設定はこういう意味だったのか」「新しくこんなモードが加わったのか」みたいに新たな発見がありました。
その中でも GitHub - Cloud Build - Cloud Run がシームレスに連携してデプロイできるという体験は興味深かったです。
[今回のプロトタイピング内容]
- ログイン画面(Nuxt.js)からIdentity Platformを利用したID・パスワード認証
- Identity Platformにテナントを用意してのマルチテナント認証
- MFA(OTP)の組み込み
- Google Workspace連携の組み込み
モブプログラミング形式で進めて、5時間程度でゼロから上記が動作するところまでスピード実装しています。
エラー内容などはGoogle Cloud社内のナレッジなども調べてもらいつつ解消していったので、若干チート感はありつつも総じて楽しくワイワイと進められました。
私自身もNuxt.js初体験ではありますが一部ドライバーをさせていただき、もしかしたらフロントエンドエンジニアとしてやっていけるのではないかという自信がつきました。(錯覚)
苦戦している私の実装イメージ図
ちなみに本ワークショップ中は、Google Cloud社の社員食堂(と呼ぶのか?)にてランチをさせていただいていました。
ビュッフェ形式でおしゃれな料理が多数並んでおり初日は気後れしてしまっていたのですが、最終日ともなるとヤプリメンバーも慣れた手つきでランチを楽しめるようになりました。
最後に
コロナ以降はリモートワークが主流となり、オフラインでホワイトボーディングしながらアーキテクチャを議論するような体験自体が久しぶりでした。
ワークショップとしても単純にハンズオン形式でコードを写経するようなものではなく、自分たちで考え議論しながら進行できるようファシリテートしていただき、メンバーの相互理解も深まったように思えます。
あらためてこういった機会を設けていただいたGoogle Cloud社、およびご参加いただいた両社メンバーへ感謝しています。
これをスポットの取り組みとして終わらせるのではなく、社内でも継続的にシステム・アーキテクチャについて議論・改善していくことで、より良いサービス提供へと繋げていきたいと思います。