← Financial Cloud Cloud クラウドクラブ · AWS Re:cap

極点マクロ|Financial Cloud Cloud · AWS Re:cap

AWS Re:cap 04:Bedrock AgentCore で Serverless AR ゲームを構築する

登壇者: Cyrus Wong

セッション: 04

セッション
Summit Dev Lounge2026 Re:cap
01 アーキテクチャを Steering として記述し、AI Agent を導く
Summit Dev Lounge2026 Re:cap
02 Agent Harness こそ真のエンジニアリングの堀
Summit Dev Lounge2026 Re:cap
03 平易な言葉で可観測性データを尋ねる
Summit Dev Lounge2026 Re:cap
04 Bedrock AgentCore で Serverless AR ゲームを構築する
Summit Dev Lounge2026 Re:cap
05 AgentCore 上のマルチ Agent クオンツ・バックテスト
Summit Dev Lounge2026 Re:cap
06 3 分でブログをスライドにする——Kiro で
Summit Dev Lounge2026 Re:cap
AWS Community Day Hong Kong 2025 Re:cap
02 TerraformによるAWSコンプライアンス
AWS Community Day Hong Kong 2025 Re:cap
03 初心者からビルダーへ――素晴らしいクラウドの旅
AWS Community Day Hong Kong 2025 Re:cap
04 LaravelとBrefによるチームファーストのサーバーレスエンジニアリング
AWS Community Day Hong Kong 2025 Re:cap
05 イベント開会式
AWS Community Day Hong Kong 2025 Re:cap
06 AWS 上で相互運用可能な AI を構築する
AWS Community Day Hong Kong 2025 Re:cap
07 別のテレメトリデータを AI エージェントで活用し、改善を加速する
AWS Community Day Hong Kong 2025 Re:cap
08 Kiro による仕様駆動開発
AWS Community Day Hong Kong 2025 Re:cap
09 MCP と AI エージェントを活用した自動テスト
AWS Community Day Hong Kong 2025 Re:cap
10 機械学習を活用したアプローチ
AWS Community Day Hong Kong 2025 Re:cap
11 RAGとMCP
AWS Community Day Hong Kong 2025 Re:cap
12 TAKとAWSを活用した災害・緊急対応
AWS Community Day Hong Kong 2025 Re:cap
13 テストの観点からサーバーレスアプリケーションのワークフローを再考する
AWS Community Day Hong Kong 2025 Re:cap
14 クラウド成功のための実践的なAWS FinOps
AWS Community Day Hong Kong 2025 Re:cap
15 リスク調整後資産リターンの革新
AWS Community Day Hong Kong 2025 Re:cap
FSI Recap
01 Modern Trade Lifecycle: Trading to Settlement
FSI Recap
02 Goldman Sachs: Fast Track your applications onto Cloud - AWS Re:cap Q1/2023
FSI Recap
03 Zurich Insurance Group: Building an Effective Log Management Solution on AWS
FSI Recap
04 FSI Meetup 2025 Q4 - Brex Database Disaster Recovery
FSI Recap
05 FSI Meetup 2025 Q4 - A Graviton Migration Success Story
FSI Recap
06 FSI Meetup 2025 Q4 - Stifel Modern Data Platform
FSI Recap
07 FSI Meetup 2025 Q4 - Financial Transaction Data Reconciler PayPal
FSI Recap
08 FSI Meetup 2025 Q4 - Scaling Resilience
FSI Recap
09 Maximizing AI Inference Cost Efficiency: Strategic Adoption of AWS GPU Instances
FSI Recap
10 Advanced Agentic AI Design Patterns
FSI Recap
11 Build New Modern Apps on AWS
FSI Recap
AWS re:Invent 2025
01 Coinbase re:Invent の要約 (IND3312)
AWS re:Invent 2025
02 AI と AWS を活用した未来の取引プラットフォームの構築
AWS re:Invent 2025
03 トレーディングイノベーション: Amazon Bedrock (IND3315) の Jefferies AI アシスタント
AWS re:Invent 2025
04 FSI がエージェント型 AI で HFT 分析に革命をもたらした方法 (GBL302)
AWS re:Invent 2025
05 Nasdaq をフィーチャーした Amazon Time Sync による分散システムの改善
AWS re:Invent 2025
06 Amazon Aurora HA および DR グローバル復元力のための設計パターン (DAT442)
AWS re:Invent 2025
07 エージェントの構築 AI: Amazon Nova Act および Strands エージェントの実践 (DEV327)
AWS re:Invent 2025
08 Amazon Aurora とそのイノベーションの詳細 (DAT441)
AWS re:Invent 2025
09 Amazon S3 の詳細解説 (STG407)
AWS re:Invent 2025
10 Nasdaq:グローバル金融サービス向けのレジリエントなインフラストラクチャを構築する (HMC327)
AWS re:Invent 2025
11 AWS Lambda の新機能 (CNS376)
AWS re:Invent 2025
12 Kiro によるスペック駆動開発 (DEV314)
AWS re:Invent 2025
13 Amazon の FinOps: 世界的な E コマース大手から学ぶクラウドコストの教訓 (AMZ308)
AWS re:Invent 2025
14 AWS 上のティック・トゥ・トレード低レイテンシ取引プラットフォーム
AWS re:Invent 2025
Government data
01 The AI Era: The Boundary Between Development and Design Is Disappearing
Government data
02 On-Device Multimodal AI and Smart-City Practice
Government data
03 Large-Model Capability Evaluation and a Method for Landing AI Projects
Government data
04 Controlled End-to-End Automation of Government Development with Cloud Agents
Government data
05 A New Software Ecosystem for the Agent Era, Seen Through Multi-Agent Systems
Government data
06 AI-Driven Macro Quantitative Research and Smart Governance
Government data
07 Authorized Operation of Public Data and Smart-Government Practice
Government data
08 Putting Data Assetization into Practice: Rights, Compliance, Engineering Governance, and Digital-Government Cases
Government data
09 AI for Mental-Health Public Welfare: Governance, Architecture, and Practice of a Trustworthy Platform
Government data
Amarathon 2025 振り返り
01 エージェント向けアーキテクチャ設計への開発者ロードマップ
Donnie Prakoso
02 Amazon Bedrock Data Automation
Hafiz Syed Ashir Hassan
03 AgentCore 上のマルチエージェント
Tan Xin
04 Nova Act と Strands Agents を実践で活用したエージェント型 AI の構築
Haowen Huang
04 仕様駆動開発と Kiro で移行プロジェクトを加速
Sanchit Dilip Jain
06 「マッチング」から「理解」へ: AgentCore Memory が実現するパーソナライズド AI 検索の実践
Liu Cao
07 観測から最適化へ – LLM オブザーバビリティから AIOps へ、リアルタイムの洞察をインテリジェントな自動化に変える
Jimmy Soh
08 TEAM の導入と最高のエンジニアリングチームの構築
Yuji Oshima
09 いわゆるサーバーレスデータベースの5年間から得た5つの厳しい教訓
Renato Losio
14 AI が私の仕事をしたらどうなるか Q Developer CLI と Kiro が私の日常業務をどう変えたか
Miguel Angel Muñoz
16 警戒を保ちながら迅速に:Amazon Bedrock エージェント開発に不可欠なセキュリティ
Brian Tarbox
26 1 台の H100 で OSS LLM をよりスマートに、低コストで、高速に実行
Adit Modi Adit Modi
28 最新の統合メタデータアーキテクチャ:データサイロを解消する新たなアプローチ
Shaofeng Shi
29 サーバーレス MediaOps:Amazon Web Services 上の AI による動画ワークフローの自動化
Luis Valdivia
30 大規模パフォーマンステストによる効率性と信頼性を重視したアーキテクチャ設計
Luis Guirigay
31 オープンソースで世界をつなぐ: テクノロジー、コミュニティ、グローバルな開発者関係をめぐる実践の旅
Richard Lin
33 リアルタイム物流分析のためのストリーミング Iceberg テーブルの構築
Fahad Shah
34 大規模ロボット戦略トレーニングの高速化: Kiro、Trainium、EKS に基づく自動クローズドループアーキテクチャ
Junjie Tang
35 仕様駆動開発で「Vibe」から実用レベルへ
Ricardo Sueiras
36 クラウドコスト分析をよりスマートに: StrandsとAgentCoreによるFinOpsインテリジェントエージェントの構築
Xiaofei Li
37 CNCF Kagent、K8sGPT、Nova Sonicを使用したK8s向け対話型エージェントAIOpsの変革
Shaoyi Li

AWS Hong Kong Summit 2026 · Developer Lounge 振り返り · 全 6 本中 第 4 本

AWS Magazine · ビクトリア・ハーバーからの現地レポート


現場:中環スワッガーが Serverless 呪術と出会う

六十年にわたり技術シフトを追ってきた私は、何百ものカンファレンスフロアに立ってきたが、AWS Hong Kong Summit 2026 Developer Lounge の電撃的な脈動に匹敵するものはほとんどない。

ビクトリア・ハーバーの壮大な背景を背負う Developer Lounge は、香港のラグジュアリーと AWS ハイテク工芸の鮮烈な衝突だった。想像してほしい:ベンチャーキャピタリストとスタートアップ創業者が職人ドリップコーヒー越しに七桁のディールを締め、国際スピーカーがアーキテクチャ図を交わし、プライベート開発者ミートアップが高リスクなベンチャートークでうなっている様子を。金は出入りし、協業は即興で形になり、ネオンのきらめきと中環のエネルギーのなかで、ビルダーたちは画面の周りに集まり、純粋な serverless 呪術を目撃していた。

Lounge の目玉アトラクションは?Cyrus Wong による、ラグジュアリーエンタメとクラウドエンジニアリングを融合したデモ:呪術廻戦 領域展開 AR ゲーム。

「唔錯喎!反應好似我去搶購減價化妝品噉快!當堂順眼好多!」 (Not bad! Your reaction is almost as fast as me grabbing a limited-edition bag in Shibuya!)

カメラの前で五条悟の Unlimited Void(無量空処)や両面宿儺の Malevolent Shrine(伏魔御廚子)の印を結ぶと、画面が 3D パーティクルエフェクトで爆発し、実物(またはシミュレート)のヒューマノイドロボットが功夫の構えを取る——すべて、おしゃれでファッション好きなローカル広東語で話す AI コメンテーターがライブ実況する。

以下は、このファンメイドアプリが AWS Bedrock AgentCore、AWS CDK、serverless オーケストレーションでどう構築されたかの深いハンズオンアーキテクチャ分解だ。


ショーの主役:AI コメンテーター釘崎野薔薇

体験の心臓部は Kugisaki Nobara(釘崎野薔薇) をモデルにした AI コメンテーターだ。マルチモーダル AI ビジョン駆動で、プレイヤーの手の印、服装、姿勢、散らかった部屋をリアルタイムでからかう。

多言語サポートとビジョン知能

● 言語:ローカル広東語、台湾華語、日本語、英語。

● 個性:中環ハイファッション × アニメ呪術。

● モデルスタック:Bedrock 上のカスタム ECR コンテナ内で動く moonshotai.kimi-k2.5、高忠実度ニューラル音声合成の AWS Polly と組み合わせ。

システムアーキテクチャ概要

サーフェス / 機能 モデルとインフラ実装 主要サービススタック
AI コメンテーター(Nobara) moonshotai.kimi-k2.5 による視覚認識テキスト推論 AWS Bedrock AgentCore Runtime
音声合成(TTS) ニューラル広東語、華語、日本語、英語 AWS Polly & Amazon S3
ジェスチャー追跡 60 FPS で 21 個の 3D ランドマーク Google MediaPipe Hands(Client JS)
ロボティクス制御 ハードウェアと 3D シミュレータの MQTT スタンス AWS IoT Core & AWS Lambda
インフラ 100% Infrastructure as Code AWS CDK(TypeScript)

ステップバイステップ・ハンズオン実行フロー

+-----------------------------------------------------------------------------------+
エンドツーエンド・ジェスチャーから音声へのフロー

1. [ Browser Client ] -- MediaPipe 60FPS --> [ API Gateway ]
2. [ API Gateway ] -- Cognito JWT --> [ Monolithic Lambda ]
3. [ Monolithic Lambda ] -- XML multimodal payload --> [ AgentCore Runtime ]
4. [ AgentCore Runtime ] --> [ AWS Polly ] neural speech
5. [ AWS Polly ] --> [ S3 Audio Bucket ] --> browser playback
+-----------------------------------------------------------------------------------+

ステップ A:クライアント側ジェスチャー検出と API シグナリング

ブラウザは Google MediaPipe Hands を使う hand_tracker.js を実行し、60 FPS で 21 個の 3D ランドマークを分析する。ジェスチャー(例:Malevolent Shrine)が検証されると、battle.js が Cognito Bearer JWT 付きで Amazon API Gateway へ POST リクエストを送る:

// battle.js: Dispatching recognized gesture to API Gateway[cite: 1]
async function triggerCursedTechnique(techniqueName) {
    const token = await getCognitoAccessToken(); // High-security Bearer Token[cite: 1]
    try {
        const response = await fetch("/api/trigger-technique", {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Authorization": `Bearer ${token}`
            },
            body: JSON.stringify({
                technique: techniqueName, // e.g. "malevolent_shrine"[cite: 1]
                robotId: "all",
                sessionId: "mcpserver"
            })
        });
        const result = await response.json();
        playCommentaryAudio(result.audioUrl); // Play resulting neural voice track[cite: 1]
    } catch (err) {
        console.error("Failed to execute server-side technique orchestration:", err); //[cite: 1]
    }
}

ステップ B:Cognito 認可と XML Base64 バイパス

API Gateway がトークンを検証すると、リクエストをモノリシック Flask Lambda(lambda_function.py)へ転送する。

企業ネットワークプロキシが転送中にバイナリ multipart 画像データを剥ぎ取るのを防ぐため、commentary.py は Web カメラのスナップショットをテキストペイロード内のカスタム XML タグへ埋め込む:

# commentary.py: Packaging snapshots inside XML text tags[cite: 1]
def generate_ai_commentary(content_block, session_id="mcpserver", image_base64_p1=""):
    if image_base64_p1:
        content_block += f"\n<p1_webcam_base64_jpeg>{image_base64_p1}</p1_webcam_base64_jpeg>" #[cite: 1]

    agent_client = boto3.client("bedrock-agentcore", region_name="us-east-1") #[cite: 1]

    payload_dict = {
        "prompt": content_block,
        "session_id": session_id
    }

    response = agent_client.invoke_agent_runtime(
        agentRuntimeArn=os.environ.get("AGENTCORE_RUNTIME_ARN"),
        runtimeSessionId=session_id,
        payload=json.dumps(payload_dict).encode("utf-8")
    )
    return response.get("response").read().decode("utf-8") #[cite: 1]

ステップ C:Serverless AgentCore Runtime 実行

AWS Bedrock AgentCore Runtime は IAM SigV4 経由で呼び出しをカスタムコンテナ(domain_commentator_agentcore)へルーティングする。コンテナの FastAPI サービス(commentator_agent.py)は regex で base64 XML ブロックを抽出し、Bedrock 向けバイナリマルチモーダルペイロードを再構築する:

# commentator_agent.py: Unwrapping XML image parts inside container[cite: 1]
@app.post("/invocations")
async def invoke_agent(request: Request):
    body = await request.json()
    prompt_text = body.get("prompt", "")

    p1_pattern = re.compile(r"<p1_webcam_base64_jpeg>(.*?)</p1_webcam_base64_jpeg>", re.DOTALL) #[cite: 1]
    p1_match = p1_pattern.search(prompt_text)

    image_b64_p1 = ""
    if p1_match:
        image_b64_p1 = p1_match.group(1).strip()
        prompt_text = p1_pattern.sub("", prompt_text).strip() # Clean text prompt[cite: 1]

    img_bytes_p1 = base64.b64decode(image_b64_p1)
    message_content = [
        {"text": "Player 1 webcam snapshot:"},
        {"image": {"format": "jpeg", "source": {"bytes": img_bytes_p1}}},
        {"text": prompt_text}
    ]

    response = await strands_agent.invoke_async(message_content) #[cite: 1]
    return JSONResponse(content={"response": str(response)}, status_code=200) #[cite: 1]

ステップ D:AgentCore Tool Gateway 経由のハードウェアディスパッチ

モデルが物理アクションをトリガーすると、ランタイムは AgentCore Tool Gateway(bedrockagentcore.Gateway)を呼び出し、それが IAM SigV4 経由で robot_tool_lambda.py を呼び出して AWS IoT Core へ MQTT コマンドを publish する:

# robot_tool_lambda.py: Stripping tool prefix and invoking IoT Core[cite: 1]
def lambda_handler(event, context):
    full_tool_name = event.get("tool_name", "") # e.g., "robot-only-mcp-lambda___robot_wave"[cite: 1]
    local_tool_name = full_tool_name.split("___")[-1] if "___" in full_tool_name else full_tool_name #[cite: 1]

    if local_tool_name == "robot_wave":
        iot_client = boto3.client("iot-data")
        iot_client.publish(
            topic="arn:aws:iot:us-east-1:123456789012:topic/robot_1/topic",
            qos=1,
            payload=json.dumps({"action": "wave_hand", "timestamp": int(time.time())})
        )
        return {"status": "SUCCESS", "message": "Robot hand wave triggered."} #[cite: 1]


Infrastructure as Code:CDK コアパターン

インフラを繰り返し可能、モダン、クリーンに保つため、システム全体が AWS CDK でモデル化されている。

1. 集中型 Tool Gateway Construct(robot-tool-gateway.ts)

// Constructing the Tool Gateway with IAM SigV4 security[cite: 1]
export class RobotToolGatewayConstruct extends Construct {
  public readonly robotToolFunction: PythonFunction;
  public readonly gateway: bedrockagentcore.Gateway;

  constructor(scope: Construct, id: string, props: RobotToolGatewayConstructProps) {
    super(scope, id);

    this.robotToolFunction = new PythonFunction(this, "RobotToolFunction", {
      entry: path.join(__dirname, "../../../mcp_server"),
      runtime: SHARED_PYTHON_RUNTIME,
      index: "robot_tool_lambda.py",
      handler: "lambda_handler",
      timeout: Duration.seconds(30),
    });

    this.gateway = new bedrockagentcore.Gateway(this, "RobotToolGateway", {
      description: "AgentCore gateway fronting the robot Lambda tools",
      authorizerConfiguration: bedrockagentcore.GatewayAuthorizer.usingAwsIam(), // SigV4 Auth[cite: 1]
    });

    this.gateway.addLambdaTarget("RobotToolLambdaTarget", {
      gatewayTargetName: "robot-only-mcp-lambda",
      lambdaFunction: this.robotToolFunction,
      toolSchema: bedrockagentcore.ToolSchema.fromLocalAsset(materializeRobotToolSchemaAsset()),
    });
  }
}

2. Serverless AgentCore コメンテーター Runtime(domain-expansion-serverless.ts)

// Deploying commentator runtime with cost-aware lifecycles[cite: 1]
const runtime = new agentcore.Runtime(this, "Runtime", {
  runtimeName: "domain_commentator_agentcore",
  agentRuntimeArtifact: agentcore.AgentRuntimeArtifact.fromAsset(
    path.join(__dirname, "../../../domain-expansion-commentator-agentcore"),
    { platform: Platform.LINUX_ARM64 }
  ),
  authorizerConfiguration: agentcore.RuntimeAuthorizerConfiguration.usingIAM(),
  lifecycleConfiguration: {
    idleRuntimeSessionTimeout: Duration.seconds(120), // 2 min idle timeout[cite: 1]
    maxLifetime: Duration.seconds(900),              // 15 min max session[cite: 1]
  },
  tracingEnabled: true,
  environmentVariables: {
    BEDROCK_MODEL_ID: "moonshotai.kimi-k2.5",
  },
});


分割ルート API Gateway セキュリティモデル

チームは、古典的な Web 衝突を解くため分割ルート REST モデルを実装した:標準ブラウザ要素(<img src="...">)は Bearer ヘッダーを渡せないが、書き込み操作は LLM 費用がかかる。

// Public vs Protected Endpoint Configuration[cite: 1]
const restApi = new apigateway.RestApi(this, "DomainExpansionRestApi", {
  restApiName: "Domain Expansion Serverless REST API",
});

const restAuthorizer = new apigateway.CognitoUserPoolsAuthorizer(this, "DomainExpansionRestApiAuthorizer", {
  cognitoUserPools: [props.userPool],
});

// 🔓 PUBLIC READ-ONLY ENDPOINTS (No Cognito Token required)[cite: 1]
apiResource.addResource("get-snapshot").addMethod("GET", lambdaIntegration, {
  authorizationType: apigateway.AuthorizationType.NONE, //[cite: 1]
});

// 🔒 PROTECTED WRITE ENDPOINTS (Strict Cognito Validation)[cite: 1]
apiResource.addResource("trigger-technique").addMethod("POST", lambdaIntegration, {
  authorizationType: apigateway.AuthorizationType.COGNITO, // Edge validation[cite: 1]
  authorizer: restAuthorizer,
});


可観測性とエンタープライズトレーシング

可観測性は CloudWatch Vended Logs 名前空間と AWS X-Ray で処理される:

// Configuring Vended Logs namespace for AgentCore[cite: 1]
const applicationLogGroup = new logs.LogGroup(scope, `${id}ApplicationLogGroup`, {
  logGroupName: `/aws/vendedlogs/bedrock-agentcore/gateway/APPLICATION_LOGS/${gateway.gatewayId}`, //[cite: 1]
  retention: logs.RetentionDays.THREE_DAYS,
});

これにより、単一の X-Ray マップ上でエンドツーエンド分散トレーシングが保証される:

Browser Gesture → API Gateway → Lambda Router → AgentCore Container → Strands LLM → AWS Polly TTS。


スマートクライアントガードとキャラクターエンジニアリング

1. コストガードセッションロジック(auth-check.js)

アイドルなブラウザタブが AgentCore ソケットを開き続けて請求漏れを起こすのを避けるため、クライアントはデバイス上で 30 秒ごとに Cognito JWT をチェックする:

Session Expired = currentTime >= jwt.exp

期限切れなら、アクティブな WebSocket を直ちに閉じる:

function checkSessionGuard() {
    const token = getCognitoToken();
    if (isTokenExpired(token)) {
        if (webSocketConnection) webSocketConnection.close(); // Prevent billing leaks[cite: 1]
        triggerLocalLogout();
    }
}
setInterval(checkSessionGuard, 30000); // 0 cloud compute overhead[cite: 1]

2. 音声テキスト・サニタイズ(commentary_tts.py)

モデル出力を AWS Polly に渡す前に、BeautifulSoup で Markdown 記号(**bold**、#)をきれいなプレーンテキストへ変換し、Polly が構文を読み上げないようにする:

import markdown
from bs4 import BeautifulSoup

def sanitize_text_for_tts(raw_text):
    html_formatted = markdown.markdown(raw_text)
    return BeautifulSoup(html_formatted, "html.parser").get_text() # Clean plain text[cite: 1]

3. Soul as Code 設定

キャラクター同一性は、ランタイムで読み込まれる標準 Markdown ファイルへ完全に分離される:

● IDENTITY.md:辛口広東語スタイルと態度の指示。

● SOUL.md:戦闘 lore ルール(例:五条悟ユーザーをどうからかうか)。


アーキテクチャ経済学と従量課金

アーキテクチャ選択 コストと効率への影響
ゼロアイドル課金 マッチがアクティブでないときコスト $0.00;常時稼働の EC2/ECS サーバなし。
S3 ライフサイクルルール Web カメラスナップショットと Polly MP3 音声ストリームは 7 日後に自動削除。
P2P ビデオ WebRTC ビデオはピアツーピアで直接ストリーム;API Gateway WebSocket は軽量テレメトリのみ。

締めくくり:Developer Lounge の空気感

Cyrus Wong とチームが AWS Hong Kong Summit 2026 Developer Lounge で示したのは、楽しいファンゲーム以上のものだった。それは現代 serverless 設計のマスタークラスだ:ハイファッション、ハイテクノロジー、低レイテンシ、ゼロアイドルコスト。

夕陽が中環に沈みビクトリア・ハーバーを照らすなか、開発者たちはまだブースの周りに群がり、CDK リポジトリをスキャンし手の印を試していた。それこそが AWS Developer Lounge の本当の精神——世界級のエンジニアリング、活気あるローカル文化、serverless の力を一つの屋根の下に集めることだ。