2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
小田川拓利氏:その中でHasuraについて説明していきます。
Digital Billderでは「Hasura GraphQL Engine」を導入しています。これはそもそもどういった技術かというと、データベースのスキーマ、つまりテーブル構造から、自動でGraphQLのエンドポイントを作成するようなサービスです。
(スライドを示して)ちょっと字が小さくて見えづらかったら申し訳ないんですが、データベースのスキーマを定義するだけで、request、where、requesterIdが$userIdに等しくて、createdAtの降順で並べて、20件まで取得するみたいなGraphQLのクエリを叩けるようになっています。何もコードを書かずに、ほとんどそのサーバーが立ってしまうといったようなものになっています。
これによって、そもそもコードを書かなくても開発できます。さらに、各APIについての権限設定や、Remote Schemas機能を用いて、各マイクロサービス、Hasuraの後ろ側にバックエンドのサーバーを立てるのですが、そのサービスとも結合して、フロント側のGraphQLをHasuraに送れば、その後ろのサービスまで取れるといったようなことまで実現可能となっています。
これによって開発者間でのGraphQLのスキーマ定義の共通化、簡単な権限管理とローコードによる高速開発というところで、開発のスピードを加速してやれるようになっていて、Hasuraを導入して良かったなといったところです。
(スライドを示して)先ほど同じような図で違う観点から見ています。技術的にはこういったところを使っていて。フロントエンドからHasuraで叩いて、その後ろにマイクロサービスで発注用のサーバーと経費精算用のサーバーが立っていて、その間をgRPCで通信しています。認証基盤としては「Lambda」「Cognito」を使っています。
全体としては、TypeScript、Turborepoを用いています。TurborepoはNode.jsのnpmパッケージのMonorepoを使う上で非常に便利なツールです。ビルドやテストなどのキャッシュをけっこう効率的に行ってくれる、Vercelが開発しているツールです。
運用面のところでどういったことをやっているかというと、CognitoとHasuraを連携しています。結局サーバーが立つといっても、やはりユーザーさんに取ってほしくないデータは当然あります。
会社によってその権限をかなり厳密に設定しなければいけないというところで、どういった手法を取っているかというと、弊社の認証・認可基盤としてAWSのCognitoを用いています。その手前にLambdaを用いて、Lambdaを通してカスタムクレームをJWTに付与しています。
これによってHasuraの情報、電子メールやユーザーのロールをカスタムフレームをJWTに含めて、その認証情報をまたHasuraに送って、そこで認可処理を行う。そういったことをやって認証・認可機構を実現しています。
最終章になります。これをどのようにAWSにデプロイするかです。
ここのポイントとしては、いかに運用の大変さを下げられるところは下げるというところにはなるかなと思います。マイクロサービスで複雑化するインフラの運用コストを下げるというところで、マネージドサービス、IaCを大きく2つに分けて紹介していきたいなと思っています。
1つは「Amazon Aurora」。フルマネージドなデータベースサービスですね。あとは「WAF」(AWS WAF)。セキュリティ関係のWAFを使っています。
まずAmazon Auroraです。有名なサービスかと思いますが、高性能で高速なスループットを持っていて、「MySQL」の5倍、「PostgreSQL」の3倍の処理を実現できます。あとはリードレプリカを増やせたり、高速化と高可用性を実現して、使用量に応じたオートスケーリングや、インフラの管理コストの低減ができることなどが利点です。
AWSのWAFです。こちらは自動でのセキュリティ対策というところで、マネージドルールで脆弱性を利用した攻撃をブロックします。過去にはLog4jの脆弱性を利用したような攻撃を特定してブロックするといったような、けっこう器用なブロックができたり。DDoS攻撃とかがあった時に緩和ができるというところでも、運用面で自動でマネージドなサービスを使うことで楽ができています。
あとはKubernetesのマネージドサービスというところで、「EKS」を利用していて、このあたりはEKSに乗っかって、Kubernetes Masterの管理はお任せしています。既存のAWSサービス、「IAM」「KMS」などの統合もやっています。
後半はそれを使ったIaCについて、弊社ではどういったことをやっているかというところで、ちょうど最近「Flux CD」を導入し、GitOpsによるKubernetesのリソース管理をしようとするところを進めています。
まずGit管理で整合性を取っているといったところです。「GitHub」のコードを見れば今のインフラがどういう状態なのかがわかるのはKubernetesの基本的なところではありますが、GitHub ActionsではなくFlux CDからコードを取ってきて、その変更を感知してデプロイするので、セキュリティが担保できます。
GitHub Actions上になにかインフラを触るような権限を持たせずに、インフラ側から取ってくるような仕組みになっているので、よりセキュリティが確保できる仕組みですね。flux.yamlとしてYAMLを生成するようなイメージです。
流れとして、最初は請求書のサービス、「invoice」というレポジトリ名なので、invoiceと呼びます。そのinvoice GitHubレポジトリのコードが変更されるたびにGitHub Actionsが走って、コンテナがビルドされて「ECR」上にプッシュされます。
次にそのECR上のDockerのイメージが更新、変更されたのを検知して、image-reflectorに通知が行きます。
その後、通知されたimage-automationがマニフェストを変更するようなPR、レポジトリを出します。
それがマージされた瞬間にFlux CDがデプロイメントを更新して、EKS上のサービスが更新されるような仕組みとなっています。
このように、マニフェストでさまざま管理できるというところで、デプロイ状況はコードベースで管理できているので、非常にシンプルな仕組みで運用できているかなと思います。
また、先ほどの繰り返しにはなりますが、GitHub Actionsに強い権限を持たせる必要がなく、コンテナ操作をFlux CDのプル型で行っているので、より運用上のリスクも低減できているかなと思います。
環境間の移行も簡単で、Kustomizationなどを組み合わせれば環境変数などをすぐに変更することが可能なので、そのあたりも非常に役に立っています。
今回は触れませんでしたが、「Terraform」を用いて、その他のインフラや権限周りのIAMロールなどを管理しています。これらを組み合わせることで、非常に複雑なマイクロサービスのアーキテクチャであっても、IaCを用いてうまく運用できているかなといったところです。
以上のように、マイクロサービスのアーキテクチャとHasuraを導入して爆速開発しつつ、そこの後ろにある複雑なインフラに対しては、マネージドサービスやEKS、Fluxを用いて運用コストを低減しています。
こちらで本日の発表は終わります。採用強化中なので、「Wantedly」などでお問い合わせください。以上です。
関連タグ:
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
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