Amazon Bedrock AgentCore Runtime のインタラクティブシェル機能を試してみた

Amazon Bedrock AgentCore Runtime のインタラクティブシェル機能を試してみた

2026年6月のアップデートで Amazon Bedrock AgentCore Runtime にインタラクティブシェル機能が追加。WebSocket経由でリモートmicroVM上のエージェントに直接接続でき、SSHなしでターミナル操作が可能に。永続的な状態管理と追加料金なしの課金体系が特徴です。
2026.06.06

はじめに

2026年6月5日のアップデートで、Amazon Bedrock AgentCore Runtime にインタラクティブシェル機能が追加されました。リモートの microVM 上で動くエージェントに対して、ローカルターミナルに近い操作感で直接接続できます。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/amazon-bedrock-agentcore-runtime/

What's New では対応エージェントとして Claude Code、OpenAI Codex、Amazon Kiro が言及されています。コーディングエージェントのデバッグや環境確認を、SSH なしで手軽に行えるのが大きなメリットです。

実際に接続すると、このようなターミナルが表示されます。

[connected · session xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx · Ctrl+D or 'exit' to quit · Ctrl+] to detach]
[agentcore-runtime-user@localhost /]$

ワンショット実行とインタラクティブシェルの比較

AgentCore Runtime のシェル実行には2つのモードがあります。

ワンショット インタラクティブ
API InvokeAgentRuntimeCommand InvokeAgentRuntimeCommandShell
プロトコル HTTP/2 (request-response stream) WebSocket
状態 ステートレス 永続(env, cwd, history)
再接続 なし shellId で可能
接続時間 タイムアウト設定可(1〜3,600秒) 最大1時間。再接続で同じシェルに復帰可能
出力 構造化イベント(exitCode付き) バイナリフレーム(生ターミナルI/O)

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-shell-execution.html

課金について

インタラクティブシェル固有の追加料金はなく、Runtime の通常課金(Active Consumption Based)が適用されます。

  • CPU: $0.0895 / vCPU-hour(実消費ベース。I/O待ちやアイドル中、バックグラウンドプロセスが動いていなければ課金なし)
  • Memory: $0.00945 / GB-hour(その時点までのピーク消費メモリベース。アイドル中もメモリ課金は発生する)

「シェルを開いているだけ = 完全無料」ではない点に注意してください。

https://aws.amazon.com/bedrock/agentcore/pricing/

やってみた

前提条件

  • Docker(ホスト側に npm/Node.js は不要)
  • AWS CLI で認証済み
  • CDK bootstrap 済み(対象リージョン)
  • AgentCore が利用可能なリージョン(今回は us-west-2)
  • エージェントフレームワーク: Strands(agentcore create --defaults で選択される標準フレームワーク)

今回の検証環境:

  • 検証日: 2026-06-06
  • AgentCore CLI: @aws/agentcore
  • Docker イメージ: node:20-slim
  • リージョン: us-west-2

プロジェクト作成

docker run --rm \
  -v "$HOME/.aws:/root/.aws:ro" \
  -v "$(pwd):/work" \
  -w /work \
  node:20-slim sh -c "
    apt-get update -qq && apt-get install -y -qq curl python3 python3-venv > /dev/null 2>&1 &&
    curl -LsSf https://astral.sh/uv/install.sh | sh > /dev/null 2>&1 &&
    export PATH=\"\$HOME/.local/bin:\$PATH\" &&
    npm install -g @aws/agentcore 2>/dev/null &&
    agentcore create --name StrandsShellTest --defaults --skip-python-setup --skip-install --skip-git --output-dir /work 2>&1
  "

agentcore create は内部で uv を使用するため、Python + uv のインストールが必要です。--defaults を指定すると Strands フレームワークでプロジェクトが生成されます。

※ Docker コンテナは使い捨てのため、各ステップで @aws/agentcore を再インストールしています。実運用では1つのコンテナ内で通しで作業するほうが効率的です。

デプロイ先の設定

agentcore/aws-targets.json を作成します。

[
  {
    "name": "default",
    "account": "123456789012",
    "region": "us-west-2"
  }
]

デプロイ

docker run --rm \
  -v "$HOME/.aws:/root/.aws:ro" \
  -v "$(pwd)/StrandsShellTest:/work" \
  -w /work \
  -e AWS_REGION=us-west-2 \
  node:20-slim sh -c "
    apt-get update -qq && apt-get install -y -qq curl python3 python3-venv zip > /dev/null 2>&1 &&
    curl -LsSf https://astral.sh/uv/install.sh | sh > /dev/null 2>&1 &&
    export PATH=\"\$HOME/.local/bin:\$PATH\" &&
    npm install -g @aws/agentcore 2>/dev/null &&
    cd agentcore/cdk && npm install 2>/dev/null && cd /work &&
    agentcore deploy -y 2>&1
  "

agentcore/cdk/ 配下で npm install を実行しないと TypeScript のコンパイルに必要な依存が揃わず失敗します。デプロイが成功すると Runtime ARN が出力されます。

ApplicationAgentStrandsShellTestRuntimeArnOutput...: arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/<RUNTIME_ID>

ワンショットコマンドで動作確認

docker run --rm \
  -v "$HOME/.aws:/root/.aws:ro" \
  -e AWS_REGION=us-west-2 \
  node:20-slim sh -c '
    npm install -g @aws/agentcore 2>/dev/null &&
    agentcore exec --json --runtime arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/<RUNTIME_ID> "whoami"
  '
{"success":true,"exitCode":0,"stdout":"root\n","stderr":""}

ワンショットモードでは root ユーザーとして実行されました。

インタラクティブシェルに接続

インタラクティブシェルには TTY が必要なため、docker run -it で実行します。

# クレデンシャルを環境変数に展開
eval $(aws configure export-credentials --format env)

# インタラクティブシェルに接続
docker run --rm -it \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  -e AWS_REGION=us-west-2 \
  node:20-slim sh -c "npm install -g @aws/agentcore 2>/dev/null && \
    agentcore exec --it --runtime arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/<RUNTIME_ID>"
[connected · session xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx · Ctrl+D or 'exit' to quit · Ctrl+] to detach]
[agentcore-runtime-user@localhost /]$

接続できました。公式ドキュメントによると、デタッチ(Ctrl+])後は同じ shellId で再接続が可能です。

シェルから見える実行環境

OS・CPU・メモリ

$ uname -a
Linux localhost 6.1.161-18.298.amzn2023.aarch64 #1 SMP Fri Feb 13 00:35:04 UTC 2026 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release | head -4
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
$ python --version
Python 3.14.2
$ grep -E "^(processor|CPU implementer|CPU part)" /proc/cpuinfo
processor       : 0
CPU implementer : 0x41
CPU part        : 0xd40
processor       : 1
CPU implementer : 0x41
CPU part        : 0xd40
$ free -m
               total        used        free      shared  buff/cache   available
Mem:            8017         236        7334          37         445        7519
Swap:              0           0           0
  • Amazon Linux 2023(カーネル 6.1)
  • ARM Neoverse V1(CPU implementer 0x41 / CPU part 0xd40、Graviton3 相当と考えられる)/ 2 vCPU
  • 8GB RAM / スワップなし

ディスク構成

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/root                449M  449M     0 100% /rom
devtmpfs                 4.0M     0  4.0M   0% /dev
/dev/vdb                 9.7G  137M  9.1G   2% /rom/overlay
overlayfs:/overlay/root  9.7G  137M  9.1G   2% /
tmpfs                    4.0G     0  4.0G   0% /dev/shm
tmpfs                    1.6G  216K  1.6G   1% /run
tmpfs                    4.0G   37M  3.9G   1% /tmp

/rom(449MB、read-only)にベースイメージ、/dev/vdb(9.7GB)が overlay の上位レイヤーとして書き込み可能な領域を提供しています。

ファイルシステム構成

/rom/                         — read-only ベースイメージ (Amazon Linux 2023)
/rom/overlay/                 — overlay upper layer
/opt/aws/agentcore-runtime/   — AgentCore Runtime 関連ファイル(Python 3.14.2 含む)
/var/task/                    — アプリケーションコード(デプロイしたエージェント)
/home/agentcore-runtime-user/ — インタラクティブシェルユーザーのホーム

デプロイしたコードと依存パッケージは /var/task/ にフラットに配置されていました。Lambda でも見られるパス配置ですが、AgentCore Runtime が Lambda ベースであるという意味ではありません。

ユーザーの違い

ワンショット実行とインタラクティブシェルで、実行ユーザーが異なることが確認できました。

モード ユーザー
ワンショット (agentcore exec --json) root
インタラクティブ (agentcore exec --it) agentcore-runtime-user

インタラクティブシェルでは非 root ユーザーとなるため、セキュリティの観点から意図的に分離されている可能性があります。ただし、公式ドキュメントにはこの違いについて記載がありませんでした。

AWS クレデンシャルの供給方法

microVM 内の環境変数に AWS クレデンシャルは存在しませんでした。

$ env | grep AWS
(出力なし)

MMDS(MicroVM Metadata Service)経由で IAM ロールのクレデンシャルが自動供給されていました。

# トークン取得(EC2 IMDSv2 とはヘッダー名が異なる。以下が実際に応答を得られたコマンド)
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-metadata-token-ttl-seconds: 60")

# ロール確認
curl -s -H "X-metadata-token: $TOKEN" \
  http://169.254.169.254/latest/meta-data/iam/security-credentials/
execution_role

execution_role という名前の IAM ロールが MMDS 経由で注入されています。boto3 などの SDK はこの種のメタデータサービスを認証プロバイダーチェーンで利用できるため、環境変数へのクレデンシャル設定は不要と考えられます。

クレデンシャルのレスポンス構造(値はマスク):

{
  "Code": "Success",
  "LastUpdated": "2026-06-06T02:33:25Z",
  "Type": "AWS-HMAC",
  "AccessKeyId": "ASIA...(masked)",
  "SecretAccessKey": "(masked)",
  "Token": "(masked)",
  "Expiration": "2026-06-06T03:28:25Z"
}

有効期限は約55分でした。EC2 の IMDS と同様に自動更新される仕組みと考えられますが、今回の検証では更新の挙動までは確認していません。

通常のアプリケーションでは MMDS から直接クレデンシャルを取得する必要はなく、SDK の認証プロバイダーチェーンに任せるのが適切です。

microVM のメタデータから推測される実行基盤

以下のメタデータが確認できたことから、この実行環境は Firecracker ベースの microVM 上で動作している可能性が高いと考えられます。

メタデータパス 確認できた内容
/latest/meta-data/instance-id ai- プレフィックスの ID
/latest/meta-data/placement/region us-west-2
/latest/meta-data/placement/availability-zone-id usw2-az2
/latest/meta-data/ipv6 IPv6 アドレス(マスク)
/latest/meta-data/iam/security-credentials/ execution_role

今回の環境で確認できた主要パッケージ

$ ls /var/task/ | grep -E "strands|boto|mcp|opentelemetry|uvicorn|pydantic" | grep dist-info
bedrock_agentcore-1.14.0.dist-info
strands_agents-1.42.0.dist-info
boto3-1.43.24.dist-info
botocore-1.43.24.dist-info
mcp-1.27.2.dist-info
opentelemetry_api-1.33.0.dist-info
uvicorn-0.49.0.dist-info
pydantic-2.13.4.dist-info

Strands テンプレートでデプロイしたため、これらが Runtime 標準パッケージなのか Strands テンプレート由来なのかは切り分けできませんでした。

まとめ

AgentCore Runtime のインタラクティブシェルにより、リモートの microVM にローカルターミナルに近い感覚で接続できるようになりました。Docker 完結でセットアップから接続まで試せることも確認できました。

今回は Strands エージェントでの接続確認と実行環境の調査まででしたが、次回は Kiro などのコーディングエージェントを AgentCore 上で動かし、インタラクティブシェル経由での実際の開発作業を試す予定です。

検証後のクリーンアップは agentcore remove all と CloudFormation スタック削除で実施してください。

参考リンク

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事