本文にスキップ
AI News HubLIVE
サイト内リライト8 分で読了

Amazon Bedrock AgentCoreランタイムでコーディングエージェントが構築するWebアプリをライブプレビュー

記事の要約

Amazon Bedrock AgentCoreのセッションエンドポイントは、各ランタイムセッションに認証済みURLを提供し、任意のHTTPメソッド、パス、WebSocket接続を許可されたポートに転送します。この記事では、セッション内でViteウェブサイトを実行し続けるコーディングエージェントをデプロイし、エージェントがファイルを編集する様子をブラウザでリアルタイムに確認する方法を紹介します。

ソースAWS Machine Learning Blog著者: Sundar Raghavan
Amazon Bedrock AgentCoreランタイムでコーディングエージェントが構築するWebアプリをライブプレビュー
誤りを報告

訂正窓口はまだ利用できません。記事情報をコピーして保存できます。

訂正案内
本文へ

コーディングエージェントは現在、動作するWebアプリを構築できます。ダッシュボード、製品ページ、製品チームが試したいプロトタイプなどです。その作業をレビューする最速の方法は、アプリを開いて使用し、変更を依頼し、結果を確認することです。アプリがエージェントの編集場所で実行し続ける場合、このループは効率的で、各変更は数秒以内にブラウザに表示されます。一方、アプリをコピーして別の場所にデプロイする必要がある場合、各変更はデプロイを待つため、レビューはそのペースに遅くなります。

Amazon Bedrock AgentCoreは、大規模にエージェントを構築、接続、最適化するためのプラットフォームであり、エージェントフレームワークと基盤モデル(FM)を選択できます。AgentCoreランタイムはAmazon Bedrock AgentCoreの機能で、各エージェントセッションを独立したマイクロVMで実行します。セッションエンドポイントを使用すると、そのセッションで実行中のアプリを自分のブラウザから開くことができます。セッションエンドポイントは各セッションに認証済みURLを提供し、各リクエストのHTTPメソッド、パス、クエリ文字列、ボディ、およびWebSocket接続を許可されたポートに転送します。エージェントがファイルを保存するたびに、ページが更新されるのを確認できます。

この記事では、セッション内でViteウェブサイトを実行し続けるコーディングエージェントをデプロイし、左側にチャット、右側にライブウェブサイトがあるローカルページを開きます。エージェントにサイトをダークテーマに切り替えるよう依頼し、ストリーミングされるステップを追い、リフレッシュせずにウェブサイトが変わるのを確認します。最後に、内部で何が起こるかを見ます。同じセッション内の2番目のポートと、セッションエンドポイントが拒否するリクエストです。

完全なサンプル(この記事で使用するノートブックを含む)は、agentcore-samples GitHubリポジトリの14-remote-accessフォルダにあります。

セッションエンドポイントの仕組み

各セッションには独自のセッションエンドポイントがあり、6つの詳細がその使用方法を決定します。

到達するポートを選択します。CreateAgentRuntimeを呼び出すときにallowedPortsを設定します。1〜5個のエントリで、それぞれが単一ポートまたは8000〜12000の範囲内の範囲(予約されたプラットフォームポートを除く)です。ポートを許可してもサーバーは起動しないため、アプリケーションはそのポートでリッスンし、0.0.0.0にバインドする必要があります。

URLはセッションとともに提供されます。InvokeAgentRuntimeレスポンスはX-Amzn-Bedrock-AgentCore-Runtime-Session-Endpoint-UrlヘッダーにURLを含み、それをモデル化するSDKはsessionEndpointUrlとして公開します。

すべてのリクエストは認証されます。AWS Identity and Access Management(IAM)を使用するランタイムの場合、各HTTPリクエスト、HTTP/2ストリーム、WebSocketハンドシェイクにSignature Version 4(SigV4)署名が付きます。呼び出し元はランタイムとそのランタイムエンドポイントに対してbedrock-agentcore:InvokeAgentRuntimeProxyも必要です。インバウンドJSON Web Token(JWT)オーソライザーを使用するランタイムの場合、各リクエストはベアラートークンを運びます。URLを知っているだけではアクセスは許可されません。

ホスト名がポートを選択します。クライアントはターゲットポートに関係なくポート443で接続し、ホスト名のプレフィックスがセッション内のポートを選択します。

https://8090--.runtime.bedrock-agentcore..on.aws/index.html https://8081--.runtime.bedrock-agentcore..on.aws/status

サーバーが話すプロトコルを伝送します。HTTP/1.1およびHTTP/2リクエスト(サーバー送信イベントやgRPCを含む)とWebSocket接続が通過します。このウォークスルーではHTTP/1.1とWebSocketを使用します。

1つのセッションにスコープされます。URLは各リクエストに認証情報を必要とし、セッションの存続期間中のみ有効です。したがって、エージェントが生成するものを構築、テスト、レビューするために使用します。アプリをユーザーに提供するには、AWS Amplify Hostingなどのホスティングサービスにデプロイします。

ブラウザはページが独自に行うリクエストにSigV4署名やベアラートークンを追加できないため、bedrock-agentcore SDKのセッションエンドポイントクライアントはマシン上でローカルエンドポイントを開くことができます。ブラウザはhttp://localhost:8088を開き、ローカルエンドポイントは各リクエストとWebSocketハンドシェイクを転送する前に認証情報を追加します。

セッションエンドポイントは、AgentCoreランタイムが既に提供するランタイムエンドポイントとは異なります。ランタイムエンドポイント(DEFAULTなど)を使用してエージェントに到達します。これは呼び出し元が到達するバージョンを制御します。InvokeAgentRuntime呼び出しはそれを介して解決されるため、開発と本番を異なるバージョンに保ち、呼び出し元を変更せずに昇格またはロールバックできます。セッションエンドポイントを使用して、エージェントがセッションで実行するもの(Webプレビューなど)を確認します。これは認証済みURLで、許可されたポートにのみ到達し、セッションが実行するバージョンで動作し、セッションが終了すると機能しなくなります。完全なドキュメントについては、「セッションエンドポイントを介したランタイムセッションへの接続」を参照してください。

ソリューションの概要

サンプルは4つの部分で構成されています。コーディングエージェントはセッションのポート8080で実行され、4つのツール(list、read、write、edit)でウェブサイトのファイルを編集します。エージェントはポート8090でVite開発サーバーを起動し、ウェブサイトを提供し、保存された各変更をホットリロードWebSocketを介してブラウザにプッシュします。マシン上では、PreviewAppがプレビューページを提供し、プロンプトをInvokeAgentRuntimeに送信し、ウェブサイト用のローカルエンドポイントを開きます。図1に示すように、プレビューページはローカルエンドポイントとセッションエンドポイントを介してポート8090のVite開発サーバーからウェブサイトを読み込み、InvokeAgentRuntimeを介してプロンプトをポート8080のエージェントに送信します。番号は1つのリクエストのステップ順を示しています。

図1:ソリューションアーキテクチャ

ステップ1の前に、PreviewAppは既にInvokeAgentRuntimeを1回呼び出してセッションを開始しており、これによりエージェントとVite開発サーバーが起動します。PreviewAppはそのレスポンスからセッションエンドポイントURLを読み取り、ポート8090のローカルエンドポイントを開きました。図1の番号付きステップは、変更リクエストの1つに従います。

プレビューページのサイトペインは、localhost:8088のローカルエンドポイントからウェブサイトを読み込みます。ローカルエンドポイントは各リクエストとWebSocketハンドシェイクに認証情報を追加し、セッションエンドポイントに転送します。セッションエンドポイントは署名とポートをallowedPortsに対してチェックし、ポート8090のVite開発サーバーに転送します。ページはViteホットリロードWebSocketを開いたままにします。

チャットペインからプロンプトを送信します。PreviewAppはそれをAWS認証情報で署名された標準AWS API呼び出しとしてInvokeAgentRuntimeに送信し、ランタイムはそれをポート8080のエージェントに配信します。エージェントのステップは作業中にチャットペインにストリーミングされます。

エージェントはAmazon BedrockのClaude Haiku 5.5を呼び出して、何を変更するかを決定します。

エージェントはサイトのファイルを読み取り、変更したファイルを保存します。Vite開発サーバーはそれらのファイルを提供し、変更を監視します。

ファイルが保存されると、Viteはステップ1で開いたWebSocketを介して変更をプッシュし、セッションエンドポイントとローカルエンドポイントを経由して戻り、サイトペインはリフレッシュせずに更新されます。

ノートブックから、PreviewAppは同じセッションエンドポイントを介してポート8081のエージェントの/statusルートを読み取ります。変わるのはポートだけです。

ポート8080はallowedPortsに含まれていません。InvokeAgentRuntimeはセッションエンドポイントを介さずにエージェントに到達するためです。

前提条件

このウォークスルーを実行するには、以下が必要です。

AgentCoreランタイムのセッションエンドポイントが利用可能なAWSリージョンのAWSアカウントで、認証情報が設定されていること。

IAMロールの作成、Amazon S3へのアップロード、ランタイムの作成の権限、およびそのランタイムとDEFAULTランタイムエンドポイントに対するbedrock-agentcore:InvokeAgentRuntimeとbedrock-agentcore:InvokeAgentRuntimeProxyの権限。詳細については、AgentCoreランタイムのIAM権限を参照してください。

Python 3.10以降、bedrock-agentcore 1.25.2以降、boto3 1.43.122以降。

Git(サンプルリポジトリのクローン用)とJupyter環境(JupyterLabやJupyter拡張機能を備えたVisual Studio Codeなど)でノートブックを実行します。

Amazon BedrockのClaude Haiku 5.5へのアクセス。リージョンごとのモデル可用性については、モデル別のリージョン可用性を参照してください。

Node.js 22以降とnpm。デプロイスクリプトはこれらを使用してエージェントとウェブサイトをパッケージ化します。

サンプルはエージェントをNode.jsの直接コードデプロイを使用してAmazon S3のzipファイルとしてデプロイするため、DockerやAmazon ECRリポジトリは不要です。セッションエンドポイントはマイクロVMランタイムで動作し、Instancesコンピュートタイプでは動作しません。また、セッションエンドポイントURLはパブリックHTTPSで到達可能です。インバウンド接続にはAWS PrivateLinkはサポートされていません。

エージェントとそのウェブサイトをデプロイする

まず、ランタイムをデプロイします。ここで選択する設定が、セッションエンドポイントが到達できるポートを決定します。デプロイスクリプトはエージェントを1つのファイルにバンドルし、ランタイムのLinux on Arm64システム用のウェブサイトとその依存関係を追加し、zipをAmazon S3にアップロードし、ランタイムを作成します。

deploy.pyの以下の抜粋は、この記事で重要な2つの設定を示しています。protocolConfigurationはエージェントがInvokeAgentRuntimeをリッスンする場所を指定し、allowedPortsはセッションエンドポイントが到達できるポートをリストします。8090はウェブサイト用、8081はエージェントのステータスルート用です。ポート8080はリストに含まれていません。InvokeAgentRuntimeはそれなしでエージェントに到達するためです。ポートとパスの設定については、エージェントのサービス提供ポートと呼び出しパスの設定を参照してください。

agentRuntimeArtifact={"codeConfiguration": { "code": {"s3": {"bucket": code_bucket(), "prefix": S3_PREFIX}}, "runtime": "NODE_22", "entryPoint": ["app.js"], }}, protocolConfiguration={"serverProtocol": "HTTP", "port": 8080, "path": "/invocations"}, allowedPorts=[{"port": 8090}, {"port": 8081}],

ウェブサイトのVite設定は、開発サーバーをセッションエンドポイントから到達可能にします。0.0.0.0のポート8090でリッスンし、Hostヘッダーを制限しません(server.allowedHostsはtrue)。リクエストはlocalhostではなくランタイムが割り当てたホスト名で到着するためです。セッションエンドポイントはリクエストがサーバーに到達する前に各リクエストを認証するため、サーバーは独自のホストチェックを必要としません。

ランタイムをデプロイするには:

  1. サンプルリポジトリをクローンし、サンプルフォルダに移動します。

git clone https://github.com/awslabs/agentcore-samples.git cd agentcore-samples/01-features/02-host-your-agent/01-runtime/03-advanced/16-session-endpoints

  1. サンプルフォルダからsession_endpoints_preview.ipynbを開きます。
  1. インストールセルを実行して、Python依存関係をインストールします。
  1. %run deploy.pyセルを実行します。デプロイには数分かかり、ほとんどはランタイムがREADY状態になるのを待つ時間です。

プレビューを開く

ランタイムの準備ができたら、プレビューを開始します。1回の呼び出しで3つのことを行います。セッションを開始し(ウェブサイトを起動)、ポート8090のローカルエンドポイントを開き、localhost:8087でプレビューページを提供します。

from preview_app import PreviewApp

app = PreviewApp().start() print("Open", app.url)

start()内では、セッションエンドポイントを使用する呼び出しは短いです。最初のInvokeAgentRuntime呼び出しはレスポンスヘッダーでURLを返し、session_endpoint_urlがそれを読み取り、セッションエンドポイントクライアントがポート8090のローカルエンドポイントを開きます。

answer = client.invoke_agent_runtime( agentRuntimeArn=runtime_arn, runtimeSessionId=session_id, payload=json.dumps({"prompt": ""}).encode(), contentType="application/json", ) endpoint = client.session_endpoint_client(session_endpoint_url(answer)) local = endpoint.open_local_endpoint(port=8090, local_port=8088).start()

プレビューを開くには:

PreviewAppを起動するセルを実行します。

ブラウザで印刷されたリンクhttp://localhost:8087を開きます。

ページの右側にセッションのポート8090から提供されるウェブサイトが表示され、左側に短いガイドと推奨リクエストが表示されます。

エージェントに変更を依頼する

次に、変更を依頼してそれが反映されるのを確認します。各プロンプトはInvokeAgentRuntimeを介してエージェントに送信されます。エージェントは必要なファイルを読み取り、変更したファイルを書き込み、各ステップを発生時に報告します。ファイルが保存されると、Vite開発サーバーはWebSocketを介して変更をプッシュし、セッションエンドポイントとローカルエンドポイントを経由して、ウェブサイトがその場で更新されます。

変更を依頼するには:

プレビューページで

要点と分析を開く

記事インテリジェンス

エンジニア中級

要点

  • セッションエンドポイントは、HTTP/1.1、HTTP/2、WebSocketをサポートし、許可されたポートに認証済みリクエストを転送します。
  • セッションURLはInvokeAgentRuntimeレスポンスのヘッダーで返され、SigV4署名またはJWTトークンが必要です。
  • サンプルでは、コーディングエージェントがポート8080で、Vite開発サーバーがポート8090で実行され、ローカルエンドポイント経由でプロキシされます。
  • セッションエンドポイントは開発・テスト用であり、本番アプリはAWS Amplify Hostingなどのサービスにデプロイする必要があります。

要点と分析は自動生成され、誤りを含む場合があります。原典をご確認ください。