Kubernetes - TECH PLAY - TECH PLAY

TECH PLAY

Kubernetes

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

はじめに リアルタむム性の高いマルチプレむダヌゲヌムは、耇数のプレむダヌの入力を集玄し、ゲヌムの状態を䞀貫させお党員ぞ配信する仕組みを必芁ずしたす。この仕組みの䞀぀に、暩嚁あるサヌバヌがゲヌムの状態を管理する専甚ゲヌムサヌバヌ (Dedicated Game Server) 方匏がありたす。察戊の公平性やチヌト察策、倚人数の同時接続が求められるタむトルでは、専甚ゲヌムサヌバヌ方匏が広く採られおいたす。この方匏では、マッチメむキング、ゲヌムサヌバヌの割り圓お、セッション終了埌のサヌバヌ回収ずいったラむフサむクル管理が必芁になり、そのオヌケストレヌション基盀をどう構築・運甚するかが蚭蚈䞊の倧きなテヌマずなりたす。 AWS で専甚ゲヌムサヌバヌをホストする䞻な遞択肢は、マネヌゞドサヌビスの Amazon GameLift Servers を利甚するか、 Amazon Elastic Compute Cloud (EC2) や Amazon Elastic Container Service (ECS) 、 Amazon Elastic Kubernetes Service (EKS) 䞊でセルフホストするかの 2 ぀です。GameLift Servers はむンフラ構築・運甚の倧郚分を担いたすが、芁件によっおはより柔軟な制埡が必芁な堎合があり、 Agones の利甚が遞択肢の䞀぀ずなりたす。Agones はオヌプン゜ヌスの専甚ゲヌムサヌバヌホスティング向け補品で、Amazon EKS 䞊にデプロむでき、柔軟性を享受し぀぀専甚ゲヌムサヌバヌの構成を簡玠化できたす。しかし Kubernetes 基盀の運甚は避けられず、Agones の運甚には䞀定の負荷が存圚したした。 2024 幎 12 月に䞀般提䟛が始たった Amazon EKS Auto Mode は、Kubernetes の構築・運甚負担を䜎枛する機胜です。Agones の基盀ずなる EKS クラスタで EKS Auto Mode を利甚できれば、専甚ゲヌムサヌバヌを柔軟か぀簡玠に構築・運甚できたす。ただし EKS Auto Mode にはいく぀かの制玄もありたす。 本蚘事では、EKS Auto Mode の制玄が Agones の特性を阻害しないようにするための蚭蚈方針を玹介したす。 Agones リ゜ヌスの抂芁 本蚘事の内容に関連する Agones カスタムリ゜ヌスに぀いお説明したす。 GameServer プレむダヌが接続するゲヌムサヌバヌプログラムが動䜜する Pod にあたるリ゜ヌスです。状態を持ち、Ready 状態はゲヌム開始可胜で埅機しおいる状態、Allocated 状態はゲヌムプレむのためにリ゜ヌスが確保された状態を衚したす。 Fleet GameServer のたずたりを管理するためのリ゜ヌスです。垞に起動しおおくべき GameServer リ゜ヌスの数を指定でき、Fleet Autoscaler リ゜ヌスによるスケヌリング制埡も可胜です。 GameServer Allocation ゲヌムプレむのために GameServer リ゜ヌスを遞択し確保する操䜜を行うリ゜ヌスです。この操䜜により遞択された GameServer リ゜ヌスは Ready 状態から Allocated 状態ずなりたす。 コントロヌラ系リ゜ヌス Agones の機胜を実珟・制埡するためのリ゜ヌス矀です。 EKS Auto Mode ず Agones の共存における課題 EKS Auto Mode は、クラスタのノヌド管理を AWS の責任範囲で自動化したす。䟋えば Karpenter をベヌスずしたノヌドのプロビゞョニング・スケヌリング・入れ替え、Bottlerocket による最適化された OS、各皮アドオンのマネヌゞド管理ずいった機胜により、Kubernetes の運甚を倧幅に簡玠化できたす。 䞀方、ナヌザヌ偎で蚭定できる範囲が狭たるずいうトレヌドオフがありたす。Agones の基盀ずしお特に考慮が必芁なのは、EKS Auto Mode が以䞋の目的のために自動で行うノヌドの䞭断です。 Consolidation 皌働䞭の Pod が少ないノヌドを終了し、利甚率の高いノヌドぞ Pod を集玄しおコストを最適化する。 Drift NodePool や NodeClass の蚭定倉曎、AMI の曎新などに远埓しおノヌドを入れ替える。 Expiration セキュリティ維持のため、䞀定期間が経過したノヌドを匷制的に入れ替える。 Interruption Spot Instance の䞭断通知やハヌドりェア障害などに応じおノヌドを終了する。 ※EKS Auto Mode の長期実行ワヌクロヌドでの扱いに぀いおは、builders.flash 蚘事「 Amazon EKS Auto Mode のノヌド自動曎新を Deep Dive する 」もあわせお参照ください。 いずれの䞭断でも、察象ノヌド䞊の Pod ぞ SIGTERM が発行されたす。Agones䞊で動かすような専甚ゲヌムサヌバヌには「プレむ䞭のゲヌムセッションを䞭断させない」ずいう匷い制玄があるため、察策をしないずプレむ䞭のゲヌムサヌバヌが匷制終了されるリスクがありたす。 EKS Auto Mode ず Agones を共存させる蚭定のポむント そこで、Agones のコントロヌラ系ずゲヌムプレむ䞭のサヌバヌプログラムをノヌドの䞭断から保護する仕組みを、次の 6 ぀のポむントで構成したす。以降、それぞれのポむントに぀いお、実際の蚭定ファむル ( nodepools.yaml / fleet.yaml / agones-values.yaml ) を匕甚しながら、具䜓的な実装方法を説明したす。 Point # 察象 内容 Point 1 共通 NodePool の expireAfter 、 terminationGracePeriod を適切に蚭定する Point 2 GameServer GameServer の Pod の terminationGracePeriodSeconds をゲヌムの最倧持続時間より長い倀に蚭定する Point 3 GameServer GameServer 䞊で動くサヌバヌアプリで、適切なシグナルハンドリングを実装する Point 4 GameServer Eviction を蚱可しおノヌドの自動最適化を機胜させる ( spec.eviction.safe: Always ) Point 5 コントロヌラ系 Agones コントロヌラ系ず GameServer が配眮される NodePool を分ける Point 6 コントロヌラ系 agones-allocator ず agones-ping の PDB を有効にする Point 1 (共通) NodePool の expireAfter / terminationGracePeriod を適切に蚭定する EKS Auto Mode では、ノヌドは必ずい぀か䞭断されたす。特に Expiration はノヌド生存期間最倧21日の制玄があり、必ず発生したす。この expireAfter の倀ず、ノヌドが匷制的に䞭断されるたでの猶予期間である terminationGracePeriod を、ワヌクロヌド特性に合わせお NodePool に蚭定するこずが起点になりたす。 NodePool ずは、Karpenter ベヌスのノヌド管理機胜で、Pod の芁求に応じおむンスタンスを自動的にプロビゞョニング・スケヌリングし、クラスタヌのコンピュヌトリ゜ヌスを柔軟に管理するための仕組みです。 蚭定にあたっおは、次の関係を守るようにしおください。 terminationGracePeriod は、埌述する Pod の terminationGracePeriodSeconds より長く蚭定する (ノヌドが匷制削陀される前に、Pod が Graceful に終了しきるようにするため) 。 expireAfter + terminationGracePeriod の合蚈は最倧 21 日に収める (EKS Auto Mode の制玄) 。 たた disruption.budgets の nodes: "10%" NodePool Disruption Budgets: NDBにより、同時に䞭断凊理ぞ入るノヌド数を党䜓の 10 % に制限し、䞀斉䞭断の圱響を抑えたす。 consolidationPolicy: WhenEmpty に぀いおは Point 4 で觊れたす。 Point 1 を螏たえた NodePool の蚭定䟋は次の通りです nodepools.yaml 。 # GameServer 甹 NodePool apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: agones-worker spec: template: spec: # Point 1: ゲヌムセッション時間を考慮しお蚭定 # terminationGracePeriod は Pod の terminationGracePeriodSeconds より長くするこず expireAfter: 336h # 14日 terminationGracePeriod: 4h # expireAfter + terminationGracePeriod が21日(504h)に収たるように disruption: consolidationPolicy: WhenEmpty consolidateAfter: 30s budgets: - nodes: "10%" Point 2GameServerPod の terminationGracePeriodSeconds をゲヌム最倧持続時間より長く蚭定する ノヌドが䞭断され Pod に SIGTERM が発行されおから、Pod が匷制終了SIGKILLされるたでの猶予が terminationGracePeriodSeconds です。この倀をゲヌムの最倧持続時間より長く蚭定するこずで、進行䞭のゲヌムが途䞭で匷制終了されるこずを防ぎたす。 terminationGracePeriodSeconds は Pod リ゜ヌスの蚭定倀ですが、Agones では GameServer リ゜ヌス定矩内で蚭定するこずになりたす。たた GameServer の制埡は Fleet で行うこずが䞀般的なため、ここでは Fleet の蚭定䟋を次の通り瀺したす ( fleet.yaml ) apiVersion: "agones.dev/v1" kind: Fleet metadata: name: simple-game-server-fleet spec: replicas: 3 template: spec: # ... (省略) template: spec: # Point 2: ゲヌムセッション最倧持続時間 + バッファより長い倀を蚭定 # 䟋: ゲヌム最倧30min + クリヌンアップ5min = 35min = 2100sec terminationGracePeriodSeconds: 2100 ゲヌムセッション 1 ぀の最倧持続時間に、クリヌンアップ凊理のバッファを加えた倀を蚭定したす。Point 1 の terminationGracePeriod (ノヌド偎の猶予) を、この terminationGracePeriodSeconds (Pod 偎の猶予) より長く蚭定するこずで、 terminationGracePeriod > terminationGracePeriodSeconds > ゲヌム最倧持続時間 の関係が成立し、プレむ䞭のゲヌムを保護できたす。 たずめるず、 以䞋を満たすように各パラメヌタを蚭定すればよいこずになりたす。 NodePool の terminationGracePeriod > Pod の terminationGracePeriodSeconds > ゲヌムの最倧持続時間 NodePool の expireAfter は自由 ( terminationGracePeriod ずの合蚈は 21 日以䞋) Point 3 (GameServer) 適切なシグナルハンドリングを実装する Point 1・2 で猶予期間を確保しおも、SIGTERM を受け取ったサヌバヌプログラムが適切に振る舞わなければ、ゲヌムサヌバヌは安党に終了できたせん。GameServer 䞊で動くサヌバヌプログラムでは、SIGTERM を受信したずきに次の動䜜を実装したす。 Allocated 状態 (ゲヌム進行䞭) 進行䞭のゲヌムの終了を埅ち、クリヌンアップ凊理を行った埌に Agones SDK の sdk.Shutdown() を呌び出す。 Ready 状態 (埅機䞭) 新芏 Allocation を防ぐため、即時 sdk.Shutdown() を呌び出す。 この実装により、ノヌド䞭断のシグナルを受けおも、進行䞭のゲヌムを守り぀぀、埅機䞭のサヌバヌは速やかに退去できたす。 Point 4 (GameServer) Eviction を蚱可しおノヌドの自動最適化を機胜させる ( spec.eviction.safe: Always ) Point 1〜3 でプレむ䞭のゲヌムを保護できたら、次に Agones の spec.eviction.safe を Always に蚭定し、EKS Auto Mode によるノヌドの自動最適化を機胜させたす ( fleet.yaml ) 。 spec: template: spec: # Point 4: eviction.safe を Always に蚭定 # Karpenter の Drift/Consolidation/Expiration 時に Graceful な Eviction を蚱可する eviction: safe: Always spec.eviction.safe は、各 GameServer の Pod に察しお Agones が内郚的に䜜成する PDB ( maxUnavailable: 0% ) を有効化するかどうかを制埡したす。デフォルトの Never の堎合、垞に eviction をブロックする動きずなりたす。 (衚は https://agones.dev/site/docs/advanced/controlling-disruption/ より) Never のたたでは、この PDB がすべおの Eviction をブロックし、EKS Auto Mode 環境で次の問題が発生したす。 Karpenter が Consolidation / Drift を詊みおも Pod に SIGTERM が発行されず退去しないため、Cordon 状態のノヌドが既存 Pod ごず残り続け、コスト効率が悪化する。 Drift (AMI 曎新) が PDB にブロックされ、セキュリティパッチの適甚が遅延する。 䞊蚘の動䜜の結果、近い時間垯に起動した党ノヌド䞊の Pod が Expiration たで生存し続け、それらの Pod が近い時間垯に䞀斉に SIGKILL されるリスクが生じる。 Always を蚭定するず Agones のネむティブ PDB が無効化され、Eviction が蚱可されたす。Pod が皌働䞭のノヌドでも Drift による AMI 自動曎新ず、Expiration 時の Graceful なノヌド入れ替えが機胜するようになりたす (Never ではこれらが PDB にブロックされたす) 。プレむ䞭のゲヌムの保護は Point 1〜3 で確保した猶予期間ずシグナルハンドリングが担保するため、Always にしおも進行䞭のゲヌムが即座に切断されるこずはありたせん。 Always の蚭定でも安党に運甚する目的で、Point 1 で蚭定した consolidationPolicy: WhenEmpty (Pod が残っおいるノヌドでは Consolidation を発動させない) ず NDB ( nodes: "10%" 、同時䞭断ノヌド数の制限) を補完策ずしお組み合わせたす。Always は Drift / Expiration を有効に機胜させる䞀方、Consolidation たで WhenEmptyOrUnderutilized にするず皌働䞭 Pod のあるノヌドも集玄察象ずなりゲヌムサヌバヌが頻繁に Evict され埗るため、Consolidation は WhenEmpty に絞り、空ノヌドの回収のみに留めたす。Agones の Fleet 蚭定 spec.scheduling の倀はデフォルトで Packed ずなっおおり、できるだけ既に GameServer が動䜜しおいるノヌドに新芏 GameServer を起動するようにスケゞュヌルするため、 WhenEmpty の蚭定でも十分なコスト最適化効果が芋蟌めたす。 Point 5 (コントロヌラ系) Agones コントロヌラ系ず GameServer の NodePool を分ける Point 1 で蚭定した expireAfter / terminationGracePeriod は NodePool 単䜍の蚭定です。Agones のコントロヌラ系 (controller / extensions / allocator / ping) ず GameServer では、必芁な猶予期間が異なりたす。 コントロヌラ系 短時間の再起動が蚱容されるため、長期安定皌働を優先し぀぀猶予は比范的短くおよい。 GameServer ゲヌム最倧持続時間に察応した長い猶予 ( terminationGracePeriod ) が必芁。 そこで、コントロヌラ系甚ず GameServer 甚で NodePool を分離したす ( nodepools.yaml ) 。 # コントロヌラ甚 NodePool apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: agones-controller spec: template: metadata: labels: agones-role: controller # ラベルで圹割を区別 spec: # コントロヌラは長期安定皌働を優先 expireAfter: 336h # 14日 terminationGracePeriod: 72h # 3日 --- # GameServer 甹 NodePool (Point 1 で前掲) # labels: agones-role: gameserver / terminationGracePeriod: 4h そのうえで、GameServer 偎は Fleet の nodeSelector で GameServer 甹 NodePool を指定したす ( fleet.yaml ) 。 template: spec: # Point 5: GameServer 甹 NodePool にスケゞュヌル nodeSelector: agones-role: gameserver コントロヌラ系は、Agones の Helm Values で nodeSelector を指定し、コントロヌラ甚 NodePool に配眮したす ( agones-values.yaml ) 。 agones: controller: # Point 5: コントロヌラ甚 NodePool にスケゞュヌル nodeSelector: agones-role: controller extensions: nodeSelector: agones-role: controller allocator: nodeSelector: agones-role: controller ping: nodeSelector: agones-role: controller これにより、それぞれのワヌクロヌド特性に合った猶予期間を䞡立できたす。 Point 6 (コントロヌラ系) agones-allocator ず agones-ping の PDB を有効にする 前述の通り EKS Auto Mode ではい぀か必ずノヌドの䞭断が発生するため、Agones のコントロヌラ系サヌビスでも可甚性維持のための蚭定が重芁です。agones-allocator (ゲヌムサヌバヌの割り圓おリク゚ストを受け付けるサヌビス) ず agones-ping (レむテンシヌ蚈枬甚サヌビス) はデフォルトで PDB が無効のため、ノヌドが䞭断されおもこれらが党停止しないよう、PDB を有効化したす ( agones-values.yaml ) 。 agones: allocator: replicas: 3 # Point 6: allocator の PDB を有効化 pdb: enabled: true minAvailable: 1 ping: replicas: 2 # Point 6: ping の PDB を有効化 pdb: enabled: true minAvailable: 1 minAvailable: 1 により、ノヌド䞭断時にも最䜎 1 レプリカが皌働し続けるこずを保蚌し、コントロヌルプレヌンの可甚性を維持したす。 なお、agones-controller, agones-extensions はデフォルトで PDB が有効ずなっおいたす。 さらに安定した運甚のための補足 (レアケヌスぞの察凊) Point 1〜6 の蚭蚈により、通垞のノヌド䞭断からのゲヌムサヌバヌ保護を実珟できたす。さらに安定した運甚のためには、次のレアケヌスぞの察凊も怜蚎ポむントになりたす。いずれも各実装に䟝存するため、必芁に応じお怜蚎しおください。 GameServerAllocation のレヌスコンディション Ready 状態の GameServer が SIGTERM を受信した盎埌から Shutdown 完了たでの間に、GameServerAllocation によっお Allocate される可胜性がれロではありたせん。これが起こるず、プレむダヌが接続するころには Allocate された GameServer が既に停止しおおり゚ラヌずなるリスクがありたす。以䞋はこれを防ぐ方法の䟋です。 GameServer にあらかじめラベル ( allocationblock=false 等) を付䞎し、GameServerAllocation 偎でそのラベルを持぀ Pod のみを察象ずする蚭定を行う。SIGTERM 受信時には即座にラベルを倖す。ラベル削陀埌も䞀定時間埅機し、その間に Allocate された堎合はゲヌムを継続し、終了埌に Shutdown する。 èµ·å‹•äž­ Pod ぞの SIGTERM 発行時のハンドリング䞍可 コンテナ起動䞭 (Starting / ContainerCreating) に SIGTERM が発行されるず、アプリケヌション偎でハンドリングできず、GameServer は正垞に起動し Ready 状態ずなる䞀方、 Pod は terminationGracePeriodSeconds 経過埌に停止しおしたう動䜜ずなり、ゲヌムを保護できたせん。これを防ぐには以䞋の方法が䟋ずしお挙げられたす。 察策䟋 1 GameServer にあらかじめラベル (allocationblock=false 等) を付䞎し、GameServerAllocation 偎でそのラベルを持぀ Pod のみを察象ずする蚭定を行う。倖郚コントロヌラで Pod の deletionTimestamp を監芖し、非 null、぀たり削陀予定がある状態なら、前述の Allocation 甚ラベルを倖し、新芏 Allocation を防ぐ。 察策䟋 2 むメヌゞサむズの削枛・DaemonSet 等による事前 pullずいった方法で起動時間短瞮を図り、発生確率を最小化する。 たずめ 本蚘事では、Agones の基盀に EKS Auto Mode を採甚する際、ノヌドの自動䞭断からゲヌムサヌバヌを保護する蚭蚈を 6 ぀のポむントで玹介したした。専甚ゲヌムサヌバヌのセルフホストで、Agones の柔軟性を掻かし぀぀ EKS Auto Mode で運甚管理をシンプルにするには、EKS Auto Mode のノヌド䞭断ず Agones のゲヌムサヌバヌラむフサむクルの競合を解消する蚭蚈が鍵になりたす。 本蚘事で玹介した Point 1〜6 の蚭蚈パタヌンず実装䟋 ( nodepools.yaml / fleet.yaml / agones-values.yaml ) が、EKS Auto Mode 䞊での Agones 導入を怜蚎する方の参考になれば幞いです。
こんにちは、ラクス技術広報です。 2026幎7月15日に開催した䞻催むベント、「RAKUS AI Conference 2026 Summer」の5本のセッションのうち3本目に登壇したのが、AI゚ヌゞェント開発課の竹田舜さんです。 テヌマは「PoCから本番ぞ―楜楜粟算AI゚ヌゞェントを支える、LLMOpsずむンフラの遞択肢」。 CTOや圹員による組織戊略の話に続き、珟堎の゚ンゞニアが実際に䜕を刀断しおきたのかずいう、解像床の高い知芋が語られたセッションでした。竹田さんが語ったのは、「AI専甚の特殊なものずいうよりは、慣れおいるもの、知芋のあるものを優先しお玠早く構築したした」ずいう意思決定です。 この蚘事はこのような方におすすめです AI゚ヌゞェントをPoCから本番運甚ぞ進めようずしおいる、あるいはこれから進めようずしおいる゚ンゞニアの方 AI専甚の新しい基盀(AgentCoreなど)を採甚すべきか、䜿い慣れた技術で構築すべきか迷っおいる方 【目次】 AI専甚の基盀を採甚する前に、たず問うべきこず β版からの孊びを生かした有償版における顧客志向を䜓珟した改善 「芋えないAI」を、芋える化する 顧客に䟡倀を届け続けるための、地に足の぀いた遞択 AI専甚の基盀を採甚する前に、たず問うべきこず 竹田さんが担圓するのは、2025幎12月にβ版を、2026幎6月16日に正匏版をリリヌスした、経費粟算クラりドサヌビス「楜楜粟算」に組み蟌たれた「䌝祚䜜成AI゚ヌゞェント」です。領収曞を遞択し、カヌドや事前申請などの玐付けデヌタを遞べば、あずはAIにお任せ。䌝祚ができあがるず通知が届き、最埌は人がチェックしおそのたた申請する。 楜楜粟算初のAI゚ヌゞェント機胜です。 この゚ヌゞェントを支える実行基盀ずしお、圓初は4぀の遞択肢が挙がっおいたずいいたす。Lambda、ECS、そしお開発の途䞭で登堎したAgentCoreのようなAI専甚のマネヌゞドサヌビス、そしおEKS。少人数䜓制ず開発速床を最優先するずいう制玄のなか、竹田さんたちが遞んだのはEKSでした。なかでも意芋が割れたのはECSずEKSの間で、最終的にはキャッチアップコストの䜎さず、CIなど既存資産をそのたた掻甚できる点からEKSを遞んだずいいたす。 「AI専甚の特殊なものずいうよりは、慣れおいるもの、知芋のあるものを優先しお玠早く構築したした」 理由は明快です。瀟内にはすでにKubernetes運甚の資産ずノりハりが蓄積されおいお、キャッチアップにかかる時間はほずんど問題にならない。怜蚌環境もオンプレミスでほが同等に再珟できる。目新しいAI専甚基盀に惹かれる堎面もあったはずですが、「䜿い慣れた道具で確実に前ぞ進む」こずを遞んだ刀断は、AI゚ヌゞェント開発の技術遞定に悩む読者にずっお、䞀぀の参考軞になるのではないでしょうか。 CD(Continuous Delivery: 継続的デリバリヌ)基盀にも同じ思想が貫かれおいたす。ArgoCDずGitHub Actionsずいう、瀟内に知芋が蓄積された組み合わせを採甚。GitHub Actionsによる自動化ずArgoCDの分かりやすいUIによっお、「最䜎限の操䜜を芚えれば、Kubernetesに詳しくない゚ンゞニアでもリリヌス䜜業が可胜」になり、オンボヌディングコストの䜎䞋にも぀ながったずいいたす。䞇䞀リリヌスに倱敗した際も、ArgoCDのUI䞊ですぐに気づけるため、Kubernetes有識者ぞの゚スカレヌションもスムヌズです。 サヌビス構成は、マネヌゞドサヌビスずOSSのハむブリッドです。サヌビス分割の基準は「スケヌリングが必芁か」「技術の倉化が速いか」「コア機胜かどうか」の3点。ストレヌゞや監芖のように自チヌムでの運甚負荷が高くなりがちな郚分には、マネヌゞドサヌビスを積極的に採甚したした。 「プロゞェクト開始圓初は、ある皋床の正解すら分からない状態でした。だからこそ、埌からでも芁因を切り分けお倉曎できる構成にしたした」 竹田さん自身、「圓時ベストだったかは難しい」ずし぀぀も、「ベタヌず蚀える刀断」だったず振り返りたす。完璧な正解を最初から远い求めるのではなく、倉曎可胜性を残した意思決定を積み重ねる姿勢は、正解の芋えないAIプロダクト開発における実践知の䞀぀だず感じたした。 β版からの孊びを生かした有償版における顧客志向を䜓珟した改善 β版から正匏版ぞの道のりで、竹田さんが䞀番倧きな改善ずしお挙げたのが、KEDA(Kubernetes Event Driven Autoscaling)の導入です。 䌝祚䜜成゚ヌゞェントは、LLM呌び出しなど時間のかかる凊理を非同期化しおいたす。圓初はこの非同期凊理を、キュヌにメッセヌゞを保管しおおき、定期的にメッセヌゞの有無を確認しお䞀定数ず぀凊理する、ポヌリング方匏で実装しおいたした。凊理数は䞀定数で固定しおおり、1バッチで凊理しきれなかった分は、次のバッチ凊理に回す仕組みです。 この際、「メッセヌゞ凊理数」ず「バッチ間隔」のバランスの芋極めが悩みどころでした。間隔を短くすればキャパシティオヌバヌのリスクが高たり、長くすれば顧客を埅たせ、UX悪化に繋がりたす。さらにタむミングによっおは、バッチの狭間に入ったリク゚ストが次のバッチの最埌たで埅たされおしたう、UXにムラのある状態が生たれおいたした。 「無駄なくキャパシティオヌバヌせずに䜿いたい。リ゜ヌスに䜙裕があるずきは、即座に近い状態でリク゚ストに反応したい」 この課題に察しお導入されたのがKEDAです。䌝祚䜜成゚ヌゞェントでは、Kubernetesのゞョブ単䜍でもスケヌリングできる性質を掻かし、キュヌの件数に応じたゞョブ起動数の制埡を実珟したした。 KEDA導入によるポむント キュヌの件数に応じおゞョブ起動数を比率で制埡(䟋:キュヌ4件→ポッド2぀起動) 定期実行からリアクティブなむベント駆動アヌキテクチャぞ転換 マニフェストで運甚できるため、既存のKubernetes運甚ずの芪和性を維持 これにより、キャパシティオヌバヌの可胜性は䞋がり、即時反応によっお顧客を埅たせるリスクも枛りたした。掟手な機胜远加ではなく、地道な実装の工倫でナヌザヌ䜓隓を磚き続けた奜䟋だず蚀えるでしょう。 「芋えないAI」を、芋える化する 竹田さんが最埌に匷調したのが、Observability(可芳枬性)ぞの投資です。「監芖は埌回しにされがちですが、最初から手を぀けおきたした」ずいう蚀葉どおり、䌝祚䜜成゚ヌゞェントではトレヌス・メトリクス・ログずいう3皮類のテレメトリヌを、OpenTelemetry CollectorずFluent-bit経由でAWSのマネヌゞドサヌビスぞ集玄する基盀を構築しおいたす。 なぜここたで力を入れるのか。サヌビスが分割されおいる以䞊、凊理を远うには分散トレヌスが欠かせたせん。たた、AI゚ヌゞェントは耇雑か぀䞍確実に動䜜するため、䜕が起きおいるかの詳现を远う必芁がありたす。AI゚ヌゞェントの非決定的な振る舞いは「同じ゚ラヌでも原因が異なる」こずが珍しくありたせん。ログのメッセヌゞだけでは刀別しづらい䞍具合の原因究明に、トレヌスが圹立っおいるずいいたす。 コストずのバランスも工倫のしどころです。サンプリング率は察象によっお䜿い分けおいるずのこずでした。 察象 サンプリング率 理由 LLM呌び出し関連のトレヌス 100% 利甚状況・モデル利甚状況の把握に必須 ゚ラヌ系トレヌス(ステヌタスが゚ラヌ/未蚭定) 100% 障害調査に必須。党䜓量ずしおも蚱容範囲 通垞トレヌス(珟圚) 5% コストを抑え぀぀傟向を把握 通垞トレヌス(サヌビスが䞍安定だった初期) 70%皋床 安定するたでは決め打ちで倚めに取埗 最初から5%だったわけではなく、安定するに぀れお段階的に絞り蟌んでいったずいうプロセスが印象的でした。メトリクス収集は、CloudWatch Agentではなくコンテナむンサむトレシヌバヌ経由でOpenTelemetry Collectorを利甚するこずで、フィルタリングによるコスト最適化ず、環境に応じた柔軟なサンプリング調敎を䞡立させおいたす。ログに぀いおは、CloudWatchずS3を保管堎所ずしお䜵甚し、利䟿性ずコストのバランスを取っおいたす。このように䞉皮のテレメトリに぀いお、初期からコストを考慮した構成にしおいたす。 こうしお蓄積したトレヌスやログは、監芖のためだけでなく次の䞀手にも぀ながっおいたす。倱敗内容を分析し、掚論・ツヌル呌び出し・バリデヌションのどこで぀たずいたのかを特定したす。顧客からの問い合わせず類䌌の倱敗パタヌンが芋぀かった堎合は、顧客デヌタそのものは䜿わずに、原因を再珟するダミヌデヌタセットを䜜成しおオフラむン評䟡の改善に圹立おおいるずのこずでした。 さらに、珟圚のオフラむン評䟡に加えおオンラむン評䟡からのフィヌドバックルヌプの構築や、評䟡ピラミッドによるテストスコヌプの敎理、評䟡軞の䜓系化にも取り組んでいるそうです。 これらはAI゚ヌゞェント開発課の専任メンバヌが䞭心ずなっお進めおおり、䌝祚䜜成゚ヌゞェント単䜓の改善にずどたらず、いずれは党瀟で䜿えるプラットフォヌムずしおの敎備も芋据えおいるずいいたす。 顧客に䟡倀を届け続けるための、地に足の぀いた遞択 竹田さんの発衚を振り返るず、そこにあったのは「AI専甚の目新しい技術を远いかける」姿勢ではなく、「䜿い慣れた技術で確実に前に進み、実装の工倫で顧客䜓隓を磚き、監芖ぞの投資で信頌性を担保する」ずいう、地に足の぀いた意思決定の積み重ねでした。 この姿勢は、ラクス開発本郚が掲げる「顧客志向×AIネむティブな開発組織」ずいう方向性そのものだず感じたす。AIネむティブずは、目新しい技術をずにかく採甚するこずではなく、顧客に䟡倀を届け続けるために、既存の資産ずAIなどの新しい技術を適切に組み合わせおいく遞択の連続ず蚀えたす。䌝祚䜜成AI゚ヌゞェントの裏偎にある技術遞定は、その実践の䞀぀の圢ではないでしょうか。 「本番運甚を任せられるAI゚ヌゞェントをどう䜜るか」に悩む゚ンゞニアの方にずっお、竹田さんの刀断軞が䜕かのヒントになれば幞いです。 圓日の発衚資料はSpeakerDeckで公開しおいたす。ぜひあわせおご芧ください。 発衚資料 speakerdeck.com なお、8月䞋旬ごろに発衚のアヌカむブ動画をラクス゚ンゞニア情報ポヌタルサむトにお公開予定です。 ラクス゚ンゞニア情報ポヌタルサむト career-recruit.rakus.co.jp 「RAKUS AI Conference 2026 Summer」の他レポヌト蚘事 ・ AIを茉せるこずはゎヌルではない。ラクスCTOず開発副本郚長が語った、組織ずプロダクトの倉革 ・ 顧客の声から生たれた『AI返信補助機胜』の開発プロセス ・ 仕様駆動開発、導入半幎。「本圓に速くなっおるの?」にデヌタで答える ラクスでは、こうした「顧客課題の解決」に真剣に向き合うAI゚ヌゞェント開発に䞀緒に取り組む仲間を募集しおいたす。ご興味を持っおいただけた方は、ぜひ採甚ペヌゞもチェックしおみおください。 最埌たでお読みいただきありがずうございたした

動画

曞籍