View a markdown version of this page

AgentCore ランタイムのファイルシステム設定 - Amazon Bedrock AgentCore

AgentCore ランタイムのファイルシステム設定

AgentCore Runtime は、 filesystemConfigurationsパラメータを使用して永続的なファイルシステムをサポートします。各設定は、指定したパスにストレージをマウントします。カスタムマウントコード、特権コンテナ、またはダウンロードオーケストレーションは必要ありません。

AgentCore Runtime は、次の 2 つのカテゴリのファイルシステム設定をサポートしています。

  • マネージドセッションストレージ (プレビュー) – 停止/再開サイクルにわたって保持されるセッションごとのサービスマネージドストレージ。セッションごとに分離されます。VPC は必要ありません。

  • Bring-your-own ファイルシステム – 独自の Amazon S3 ファイルまたは Amazon EFS アクセスポイントをエージェントのランタイムに直接アタッチします。セッションとエージェント間で共有されます。VPC が必要です。

1 つのエージェントランタイムで両方のカテゴリを組み合わせることができます (最大合計 5 つの設定)。

ストレージオプションの概要

次の表は、使用可能なファイルシステム設定タイプを比較したものです。

Category タイプ 分離 永続的 VPC が必要 次の用途に適しています

マネージド

セッションストレージ (プレビュー)

セッションごと

停止/再開の存続、14 日間のアイドル有効期限、バージョン更新時にリセット

いいえ

スクラッチスペース、インストール済みパッケージ、コード、プロジェクトファイル、エージェント状態

BYO

Amazon S3 Files

共有 – 複数のセッションとエージェントが同じデータにアクセスする

カスタマー管理 (永続的、S3 バケットへの同期)

はい

標準ファイルオペレーションと S3 APIs の両方からアクセスできるデータセット

BYO

Amazon EFS

共有 – 複数のセッションとエージェントが同じデータにアクセスする

カスタマー管理 (削除するまで永続的)

はい

共有ツールライブラリ、モデルの重み、読み取り/書き込みマルチエージェントコラボレーション

クイックスタート

次のチェックリストは、各ファイルシステムタイプを設定するための詳細な手順を示しています。

マネージドセッションストレージ (プレビュー)

  1. VPC または追加の IAM アクセス許可は必要ありません。

  2. --filesystem-configurations '[{"sessionStorage": {"mountPath": "/mnt/workspace"}}]'create-agent-runtimeまたは update-agent-runtime呼び出しに追加します。

  3. を使用して エージェントを呼び出します--runtime-session-id

  4. セッションを停止し、同じ で再開します--runtime-session-id。がデータ/mnt/workspaceを保持することを確認します。

Bring-your-own ファイルシステム

Amazon S3 Files アクセスポイント

  1. s3files:ClientMounts3files:ClientWrites3files:GetAccessPoints3files:AccessPointArn条件で実行ロールに追加します。

  2. エージェントランタイムセキュリティグループから S3 Files マウントターゲットセキュリティグループへの TCP ポート 2049 アウトバウンドを許可します。

  3. S3 Files マウントターゲットが、エージェントのランタイムサブネットと同じ VPC とアベイラビリティーゾーンにあることを確認します。

  4. --filesystem-configurations '[{"s3FilesAccessPoint": {"accessPointArn": "<your-access-point-arn>", "mountPath": "/mnt/s3data"}}]'create-agent-runtimeまたは update-agent-runtime呼び出しに追加します。

  5. エージェントを呼び出します。バッキング S3 バケットと双方向に/mnt/s3data同期するファイル。

Amazon EFS アクセスポイント

  1. elasticfilesystem:AccessPointArn 条件を使用して実行ロールelasticfilesystem:ClientWriteelasticfilesystem:ClientMountと を追加します。

  2. エージェントランタイムセキュリティグループから EFS マウントターゲットセキュリティグループへの TCP ポート 2049 アウトバウンドを許可します。

  3. EFS マウントターゲットが、エージェントのランタイムサブネットの少なくとも 1 つと同じアベイラビリティーゾーンにあることを確認します。

  4. --filesystem-configurations '[{"efsAccessPoint": {"accessPointArn": "<your-access-point-arn>", "mountPath": "/mnt/efs"}}]'create-agent-runtimeまたは update-agent-runtime呼び出しに追加します。

  5. エージェントを呼び出します。ファイルは で入手できます/mnt/efs

S3 ファイルと EFS の両方に、エージェントのランタイムでの VPC 接続が必要です。

各タイプの仕組み

以下のセクションでは、各ファイルシステムタイプが AgentCore ランタイム内でどのように動作するかについて説明します。

Bring-your-own ファイルシステム

Bringbring-your-own ファイルシステムを設定すると、AgentCore Runtime は、設定したパスのすべてのセッションに指定されたアクセスポイントをマウントします。データは共有されます。複数のセッション、複数のエージェント、または外部アプリケーションが同じファイルシステムに同時にアクセスできます。

AgentCore は、すべてのマウントオペレーションを自動的に処理します。エージェントにマウントヘルパーをインストールしたり、TLS 証明書を管理したり、マウントコードを記述したりする必要はありません。

注記

アクセスポイント (S3 ファイルまたは EFS) を作成するときは、POSIX ユーザー ID (UID) とグループ ID (GID) を指定します。アクセスポイントを介したすべてのファイルオペレーションは、この ID として実行されます。コンテナプロセスが実行するユーザーと一致するように UID/GID を設定します (通常、非ルートコンテナの場合は 1000:1000、ルートの場合は 0:0)。

Amazon S3 Files マウントフロー

S3 Files アクセスポイントを設定すると、次のシーケンスが発生します。

  1. S3 ファイルファイルシステム (S3 バケットにバックアップ) を作成し、VPC にターゲットをマウントします。

  2. POSIX UID/GID とルートディレクトリを指定する S3 Files アクセスポイントを作成します。

  3. エージェントランタイムは、アクセスポイント ARN とマウントパスを使用して設定します。

  4. 新しいセッション ID を使用した呼び出し時に、AgentCore は VPC へのネットワークアクセスを持つmicroVM をプロビジョニングします。

  5. microVM は、VPC 経由で IAM 認証 (ポート 2049) を使用して TLS 経由で NFSv4.2 を介してファイルシステムをマウントします。

  6. エージェントは、マウントパスでファイルの読み取りと書き込みを行います。変更はバッキング S3 バケットに自動的に同期されます。

S3 ファイルセマンティクス

  • ファイルシステムとバッキング S3 バケット間の双方向同期

  • NFS クライアントのClose-to-open整合性、バケット側アクセスの S3 結果整合性

  • 最大ファイルサイズ: 48 TiB、最大ディレクトリ深度: 1,000 レベル

  • サポート対象外: ハードリンク、S3 アーカイブストレージクラス (Glacier)、カスタム S3 オブジェクトメタデータ、pNFS

Amazon EFS マウントフロー

EFS アクセスポイントを設定すると、次のシーケンスが発生します。

  1. EFS ファイルシステムを作成し、VPC にターゲットをマウントします (アベイラビリティーゾーンごとに 1 つ)。

  2. POSIX UID/GID とルートディレクトリを指定する EFS アクセスポイントを作成します。

  3. エージェントランタイムは、アクセスポイント ARN とマウントパスを使用して設定します。

  4. 新しいセッション ID を使用した呼び出し時に、AgentCore は VPC へのネットワークアクセスを持つmicroVM をプロビジョニングします。

  5. microVM は、同じアベイラビリティーゾーンのマウントターゲットを介して TLS (ポート 2049) 経由で NFSv4.1 を介してファイルシステムをマウントします。

  6. エージェントは、標準のファイルオペレーションを使用して、マウントパスでファイルの読み取りと書き込みを行います。

EFS セマンティクス

  • フル POSIX: ハードリンク、シンボリックリンク、アドバイザリファイルロック

  • 複数のセッションとエージェントからの同時読み取り/書き込みアクセス

  • Close-to-open 整合性

  • 最大ファイルサイズ: 47.9 TiB、最大ディレクトリ深度: 1,000 レベル

マネージドセッションストレージ (プレビュー)

マネージドセッションストレージを使用して、ファイルシステム設定で停止/再開全体でセッション状態を維持します。AgentCore Runtime マネージドセッションストレージは、AgentCore Runtime がすべてのストレージオペレーションを処理するフルサービスマネージド機能です。エージェントはローカルファイルシステムマウントに読み取りと書き込みを行い、ランタイム環境はセッション期間を通じてデータをサービスストレージに透過的にレプリケートします。

セッションストレージはセッションごとに分離されます。各セッションは独自のストレージにのみアクセスでき、同じエージェントランタイムの他のセッションまたは異なるエージェントランタイムのセッションからデータを読み書きすることはできません。

エージェントランタイムでセッションストレージを設定すると、各セッションは指定したマウントパスに永続ディレクトリを取得します。ライフサイクルは次のように機能します。

  1. セッションで最初に呼び出す — 新しい分離されたコンピューティングがプロビジョニングされます。エージェントは、マウントパスに空のディレクトリを表示します。

  2. エージェントがファイルを書き込む – すべてのファイルオペレーション (読み取り、書き込み、mkdir、名前変更) は、ローカルファイルシステムと同様に通常どおりに機能し、データは耐久性のあるストレージに非同期的にレプリケートされます。

  3. セッションの停止 — コンピューティングは終了します。まだ保持されていないデータは、正常なシャットダウン中に耐久性のあるストレージにフラッシュされます。

  4. 同じセッションで再開する – 新しいコンピューティングがプロビジョニングされ、ファイルシステムの状態が耐久性のあるストレージから復元されます。エージェントは中断した場所から続行できます。

ファイルシステムのセマンティクス

セッションストレージは、設定されたマウントパスに標準の Linux ファイルシステムを提供します。標準のツールとオペレーションは変更なしで動作します – lscatmkdirgitnpmpip、、および cargo はすべて期待どおりに動作します。

サポートされているオペレーション

通常のファイル、ディレクトリ、シンボリックリンク。読み取り、書き込み、名前変更、削除、chmodchownstatreaddir- 一般的な開発ツールで使用される標準の POSIX ファイルオペレーション。

制限

最大ストレージサイズ、ファイル数、ディレクトリ深度などのセッションストレージの制限については、「セッションストレージの制限」を参照してください。

サポートされていないオペレーション

次のファイルシステムオペレーションはサポートされていません。

  • ハードリンク – 代わりにシンボリックリンクを使用します。

  • デバイスファイル、FIFOs、または UNIX ソケットmknodはサポートされていません。

  • 拡張属性 (xattr) – xattr メタデータに依存するツールはサポートされていません。

  • fallocate – スパースファイルの事前割り当てはサポートされていません。

  • セッション間のファイルロック – アドバイザリロックは実行中のセッション内で機能しますが、停止/再開全体で保持されません。ファイルベースのロックを使用するツール ( などgit) は影響を受けません。

注記

アクセス許可はセッション内に保存されますが、強制されません。 chmodおよび は正しくstat動作しますが、マイクロmicroVM でエージェントが唯一のユーザーとして実行されるため、アクセスチェックは常に成功します。

セッションストレージのライフサイクル

以下のシナリオでは、セッションデータは削除されます (クリーン状態にリセットされます)。

  • セッションは 14 日間呼び出されません。

  • エージェントランタイムバージョンが更新されました。バージョン更新後にセッションを呼び出すと、新しいファイルシステムがプロビジョニングされます。

DeleteAgentRuntime または DeleteAgentRuntimeEndpoint を使用して、ランタイムまたはエンドポイントに関連付けられたすべてのセッションストレージデータを削除します。

Bringbring-your-own ファイルシステムの前提条件

bring-your-own ファイルシステムを設定する前に、次の前提条件を完了してください。

VPC 設定

エージェントランタイムは を使用する必要がありますnetworkMode: VPC。指定するサブネットは、ファイルシステムのマウントターゲットアベイラビリティーゾーンと重複する必要があります。

IAM アクセス許可

エージェントランタイム実行ロールには、ファイルシステムをマウントするためのアクセス許可が含まれている必要があります。

S3 ファイルの IAM アクセス許可

{ "Effect": "Allow", "Action": [ "s3files:ClientMount", "s3files:ClientWrite", "s3files:GetAccessPoint" ], "Resource": "arn:aws:s3files:<region>:<account-id>:file-system/<file-system-id>", "Condition": { "ArnEquals": { "s3files:AccessPointArn": "arn:aws:s3files:<region>:<account-id>:file-system/<file-system-id>/access-point/<access-point-id>" } } }

EFS の IAM アクセス許可

{ "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite" ], "Resource": "arn:aws:elasticfilesystem:<region>:<account-id>:file-system/<file-system-id>", "Condition": { "ArnEquals": { "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:<region>:<account-id>:access-point/<access-point-id>" } } }

エージェントが読み取りアクセスのみを必要とするClientWrite場合は、 を省略します。エージェントのランタイム作成時の S3 Files アクセスポイントの検証には、 アクセスs3files:GetAccessPoint許可が必要です。

セキュリティグループ

エージェントランタイムセキュリティグループからマウントターゲットセキュリティグループへのポート 2049 でのアウトバウンド TCP を許可します。エージェントランタイムセキュリティグループからマウントターゲットセキュリティグループのポート 2049 でインバウンド TCP を許可します。

ファイルシステムを設定する

以下のセクションでは、各ファイルシステムタイプを設定する方法を示します。

Amazon S3 Files アクセスポイントを設定する

S3 Files アクセスポイントを設定するには、 でアクセスポイント ARN とマウントパスを指定しますfilesystemConfigurations。エージェントランタイムは VPC ネットワークモードを使用する必要があります。

AWS CLI
  1. aws bedrock-agentcore-control create-agent-runtime \ --agent-runtime-name "data-agent" \ --role-arn "arn:aws:iam::<account-id>:role/AgentExecutionRole" \ --network-configuration '{ "networkMode": "VPC", "networkModeConfig": { "subnets": ["<subnet-id-1>", "<subnet-id-2>"], "securityGroups": ["<security-group-id>"] } }' \ --agent-runtime-artifact '{ "containerConfiguration": { "containerUri": "<account-id>.dkr.ecr.<region>.amazonaws.com/my-agent:latest" } }' \ --filesystem-configurations '[{ "s3FilesAccessPoint": { "accessPointArn": "arn:aws:s3files:<region>:<account-id>:file-system/<file-system-id>/access-point/<access-point-id>", "mountPath": "/mnt/datasets" } }]'
AWS SDK
  1. boto3 を使用して S3 Files アクセスポイントを持つ AgentCore ランタイムを作成する Python の例。

    import boto3 client = boto3.client("bedrock-agentcore-control", region_name="us-west-2") response = client.create_agent_runtime( agentRuntimeName="data-agent", roleArn="arn:aws:iam::<account-id>:role/AgentExecutionRole", networkConfiguration={ "networkMode": "VPC", "networkModeConfig": { "subnets": ["<subnet-id-1>", "<subnet-id-2>"], "securityGroups": ["<security-group-id>"] } }, agentRuntimeArtifact={ "containerConfiguration": { "containerUri": "<account-id>.dkr.ecr.<region>.amazonaws.com/my-agent:latest" } }, filesystemConfigurations=[ { "s3FilesAccessPoint": { "accessPointArn": "arn:aws:s3files:<region>:<account-id>:file-system/<file-system-id>/access-point/<access-point-id>", "mountPath": "/mnt/datasets" } } ] )

Amazon EFS アクセスポイントを設定する

EFS アクセスポイントを設定するには、 でアクセスポイント ARN とマウントパスを指定しますfilesystemConfigurations。エージェントランタイムは VPC ネットワークモードを使用する必要があります。

AWS CLI
  1. aws bedrock-agentcore-control create-agent-runtime \ --agent-runtime-name "shared-tools-agent" \ --role-arn "arn:aws:iam::<account-id>:role/AgentExecutionRole" \ --network-configuration '{ "networkMode": "VPC", "networkModeConfig": { "subnets": ["<subnet-id-1>", "<subnet-id-2>"], "securityGroups": ["<security-group-id>"] } }' \ --agent-runtime-artifact '{ "containerConfiguration": { "containerUri": "<account-id>.dkr.ecr.<region>.amazonaws.com/my-agent:latest" } }' \ --filesystem-configurations '[{ "efsAccessPoint": { "accessPointArn": "arn:aws:elasticfilesystem:<region>:<account-id>:access-point/<access-point-id>", "mountPath": "/mnt/tools" } }]'
AWS SDK
  1. boto3 を使用して EFS アクセスポイントを持つ AgentCore ランタイムを作成する Python の例。

    import boto3 client = boto3.client("bedrock-agentcore-control", region_name="us-west-2") response = client.create_agent_runtime( agentRuntimeName="shared-tools-agent", roleArn="arn:aws:iam::<account-id>:role/AgentExecutionRole", networkConfiguration={ "networkMode": "VPC", "networkModeConfig": { "subnets": ["<subnet-id-1>", "<subnet-id-2>"], "securityGroups": ["<security-group-id>"] } }, agentRuntimeArtifact={ "containerConfiguration": { "containerUri": "<account-id>.dkr.ecr.<region>.amazonaws.com/my-agent:latest" } }, filesystemConfigurations=[ { "efsAccessPoint": { "accessPointArn": "arn:aws:elasticfilesystem:<region>:<account-id>:access-point/<access-point-id>", "mountPath": "/mnt/tools" } } ] )

マネージドセッションストレージを設定する

エージェントランタイムを作成または更新するときに、 にsessionStorageエントリfilesystemConfigurationsを追加します。

AWS CLI
  1. aws bedrock-agentcore-control create-agent-runtime \ --agent-runtime-name "coding-agent" \ --role-arn "arn:aws:iam::111122223333:role/AgentExecutionRole" \ --agent-runtime-artifact '{ "containerConfiguration": { "containerUri": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-agent:latest" } }' \ --filesystem-configurations '[{ "sessionStorage": { "mountPath": "/mnt/workspace" } }]'
AWS SDK
  1. boto3 を使用してセッションストレージで AgentCore ランタイムを作成する Python の例。

    import boto3 client = boto3.client("bedrock-agentcore-control", region_name="us-west-2") response = client.create_agent_runtime( agentRuntimeName="coding-agent", roleArn="arn:aws:iam::111122223333:role/AgentExecutionRole", agentRuntimeArtifact={ "containerConfiguration": { "containerUri": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-agent:latest" } }, filesystemConfigurations=[ { "sessionStorage": { "mountPath": "/mnt/workspace" } } ] )

同じfilesystemConfigurationsパラメータで UpdateAgentRuntime を使用して、既存のエージェントランタイムにセッションストレージを追加することもできます。

ファイルシステムを組み合わせる

マネージドセッションストレージと bring-your-own ファイルシステムを単一のエージェントランタイムで組み合わせることができます。次の の例では、3 つのタイプすべてを設定します。

import boto3 client = boto3.client("bedrock-agentcore-control", region_name="us-west-2") response = client.create_agent_runtime( agentRuntimeName="full-stack-agent", roleArn="arn:aws:iam::<account-id>:role/AgentExecutionRole", networkConfiguration={ "networkMode": "VPC", "networkModeConfig": { "subnets": ["<subnet-id-1>", "<subnet-id-2>"], "securityGroups": ["<security-group-id>"] } }, agentRuntimeArtifact={ "containerConfiguration": { "containerUri": "<account-id>.dkr.ecr.<region>.amazonaws.com/my-agent:latest" } }, filesystemConfigurations=[ { "s3FilesAccessPoint": { "accessPointArn": "arn:aws:s3files:<region>:<account-id>:file-system/<file-system-id>/access-point/<access-point-id>", "mountPath": "/mnt/datasets" } }, { "efsAccessPoint": { "accessPointArn": "arn:aws:elasticfilesystem:<region>:<account-id>:access-point/<access-point-id>", "mountPath": "/mnt/tools" } }, { "sessionStorage": { "mountPath": "/mnt/workspace" } } ] )

永続ストレージの呼び出しと使用

設定されたすべてのファイルシステムは、エージェントが呼び出されたときにマウントパスで使用できます。Bring-your-own ファイルシステム (S3 ファイル、EFS) は、呼び出しのたびにすぐにアクセスできます。マネージドセッションストレージは、同じ を使用して停止/再開サイクル全体でデータを保持しますruntimeSessionId

例: 停止/再開サイクルでのセッションストレージの使用

# First invocation — agent sets up the project aws bedrock-agentcore invoke-agent-runtime \ --agent-runtime-arn "arn:aws:bedrock-agentcore:us-west-2:111122223333:agent-runtime/coding-agent" \ --runtime-session-id "session-001" \ --payload '{"prompt": "Set up the project and install dependencies in /mnt/workspace"}' # Stop the session aws bedrock-agentcore stop-runtime-session \ --agent-runtime-arn "arn:aws:bedrock-agentcore:us-west-2:111122223333:agent-runtime/coding-agent" \ --runtime-session-id "session-001" # Resume later — the project is exactly where the agent left it aws bedrock-agentcore invoke-agent-runtime \ --agent-runtime-arn "arn:aws:bedrock-agentcore:us-west-2:111122223333:agent-runtime/coding-agent" \ --runtime-session-id "session-001" \ --payload '{"prompt": "Run the tests and fix any failures"}'

エージェントは/mnt/workspace、ソースファイル、インストールされたパッケージ、ビルドアーティファクト、.git 履歴はすべてそのまま残ります。セッションを再開すると、新しいコンピューティング環境は永続ストレージをマウントします。エージェントは、パッケージを再インストールしたり、ファイルを再生成したりすることなく、作業を継続できます。

注記

明示的に を呼び出す場合StopRuntimeSession、セッションを再開する前に必ず完了するのを待ちます。これにより、すべてのデータが耐久性のあるストレージにフラッシュされます。

注記

マウントされたパスは、初期化中ではなく、エージェントの呼び出し時にのみ使用できます。

制限

次の表に、ファイルシステム設定の制限を示します。

[リソース] 制限

エージェントランタイムあたりのファイルシステム設定の合計

5

最大 S3 ファイルアクセスポイント設定

2

EFS アクセスポイントの最大設定

2

マネージドセッションストレージの最大設定

1

マウントパスの制約

すべてのファイルシステム設定は、次のマウントパスルールに従う必要があります。

  • 1 つのサブディレクトリレベル (例: 、) /mnt/data/mnt/で 未満である必要があります/mnt/workspace

  • パターン: /mnt/[a-zA-Z0-9._-]+/?

  • 長さ: 6~200 文字。

  • 各マウントパスは、すべての設定で一意である必要があります。

  • マウントパスは相互にサブディレクトリにすることはできません。

ライフサイクル動作

次の表は、マネージドセッションストレージと bring-your-own ファイルシステム間のライフサイクル動作を比較したものです。

動作 マネージドセッションストレージ (プレビュー) Bring-your-own (S3 ファイル、EFS)

アイドルの有効期限

呼び出しなしで 14 日間 – データリセット

なし – カスタマー管理

ランタイムバージョン更新時

データ消去 — 次回の呼び出し時の新しいファイルシステム

効果なし – データは保持されます

DeleteAgentRuntime の場合

削除されたすべてのセッションデータ

ファイルシステムはアンマウントされ、データはアカウントに保持されます

同時アクセス

セッションごとに分離

セッションとエージェント間で共有

オーナーシップ

AgentCore によって管理されるサービス

AWS アカウント内のカスタマー管理

重要

bring-your-own ファイルシステムの場合、エージェントが同時アクセスを適切に処理していることを確認します。競合を避けるためにfile-per-session命名パターンまたはアドバイザリファイルロックを使用します。

ユースケース

次の表に、一般的なパターンとそれぞれの推奨されるファイルシステム設定を示します。

パターン 推奨される設定

永続的なプロジェクトファイルを使用してエージェントをコーディングする

でのマネージドセッションストレージ (プレビュー) /mnt/workspace

エージェントと S3 パイプラインの両方からアクセスできるリファレンスデータセット

の S3 ファイルアクセスポイント /mnt/datasets

すべてのエージェント間でツールライブラリを共有する

の S3 ファイルまたは EFS アクセスポイント /mnt/tools

共有ワークスペースでのマルチエージェントコラボレーション

の S3 ファイルまたは EFS アクセスポイント /mnt/shared

チェックポイントを使用した長時間の分析

チェックポイントのセッションストレージ + 入力データの S3 ファイル

フルスタックエージェント (両方のカテゴリを結合)

セッションストレージ + S3 ファイル + EFS (3 マウント)

例: 永続ワークスペースを使用してエージェントをコーディングする

この例では、プロジェクトファイルの会話履歴とセッションストレージFileSessionManagerに で Strands エージェントを使用するコーディングエージェントを示しています。どちらも停止/再開サイクルにわたって保持されます。

セッションストレージを使用したエージェントのコーディング

import os # Enable non-interactive mode for strands tools os.environ["BYPASS_TOOL_CONSENT"] = "true" from strands import Agent from strands.session import FileSessionManager from strands.models import BedrockModel from strands_tools import file_read, file_write, shell from bedrock_agentcore.runtime import BedrockAgentCoreApp app = BedrockAgentCoreApp() WORKSPACE = "/mnt/workspace" model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-20250514-v1:0") tools = [file_read, file_write, shell] @app.entrypoint def handle_request(payload): session_id = payload.get("session_id", "default") # Persist conversation history alongside project files session_manager = FileSessionManager( session_id=session_id, storage_dir=f"{WORKSPACE}/.sessions" ) agent = Agent( model=model, tools=tools, session_manager=session_manager, system_prompt="You are a coding assistant. Project files are in /mnt/workspace." ) response = agent(payload.get("prompt")) return {"response": response.message["content"][0]["text"]} if __name__ == "__main__": app.run()

requirements.txt

strands-agents strands-agents-tools bedrock-agentcore boto3

エージェントを呼び出し、セッションを停止してから再開します。プロジェクトファイルと会話コンテキストの両方が保持されます。

サイクルの呼び出し、停止、再開

import boto3, json client = boto3.client("bedrock-agentcore") agent_arn = "arn:aws:bedrock-agentcore:us-west-2:111122223333:agent-runtime/coding-agent" session_id = "project-xyz-001" def invoke(prompt): resp = client.invoke_agent_runtime( agentRuntimeArn=agent_arn, runtimeSessionId=session_id, payload=json.dumps({"prompt": prompt, "session_id": "conv-001"}).encode() ) return json.loads(b"".join(resp["response"]))["response"] # First invoke: Create a simple script invoke("Write a Python script called calculator.py with add and subtract functions.") # Stop session — compute terminates, storage persists client.stop_runtime_session(agentRuntimeArn=agent_arn, runtimeSessionId=session_id) # Resume same session — new compute, but files and conversation history restored invoke("Add a multiply function to the script you created.") # Agent knows it created calculator.py (conversation history) # AND finds existing file (file persistence)

FileSessionManager会話履歴を に保存し/mnt/workspace/.sessions/、エージェントが停止/再開サイクル全体のコンテキストを記憶できるようにします。

ネットワーク要件

このセクションでは、マネージドセッションストレージと bring-your-own ファイルシステムの両方のネットワーク要件について説明します。

マネージドセッションストレージネットワーク

エージェントランタイムがセッションストレージで VPC モードを使用している場合、エージェントはリモートストレージと同期するためにネットワークアクセスが必要です。セッションデータは AgentCore S3 に保存されるため、VPC は S3 へのアウトバウンド接続を許可する必要があります。カスタムポリシーで S3 Gateway エンドポイントを使用している場合は、次のようにリージョンセッションストレージバケットへのアクセスの範囲を設定できます。

"Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::acr-storage-*-region-an", "arn:aws:s3:::acr-storage-*-region-an/*" ], "Condition": { "StringEquals": { "aws:PrincipalServiceName": "bedrock-agentcore.amazonaws.com" } }

region を AWS 自分のリージョン ( などus-west-2) に置き換えます。

Bring-your-own ファイルシステムネットワーキング

Bring-your-own ファイルシステムでは、マウントを成功させるために VPC ネットワークが以下の要件を満たしている必要があります。

Amazon EFS

  • マウントターゲット – EFS ファイルシステムには、エージェントのランタイムサブネットがあるアベイラビリティーゾーンの少なくとも 1 つにマウントターゲットが必要です。高可用性を実現するには、設定されたすべてのサブネットアベイラビリティーゾーンにターゲットをマウントすることをお勧めします。

  • 一度に 1 つの VPC – EFS ファイルシステムは、一度に 1 つの VPC にのみマウントターゲットを持つことができます。AgentCore では、クロスアカウント VPC マウントはサポートされていません。

  • アベイラビリティーゾーンの配置 — エージェントランタイムサブネットと EFS マウントターゲットは、少なくとも 1 つの共通のアベイラビリティーゾーンを共有する必要があります。クロス AZ NFS トラフィックは機能しますが、レイテンシーとデータ転送コストが増加します。

  • DNS 解決 — VPC で DNS ホスト名と DNS 解決が有効になっている必要があります。エージェントは、マウント時に<az-id>.<file-system-id>.efs.<region>.amazonaws.comマウントターゲットホスト名を解決します。

EFS マウントターゲットを確認するには:

aws efs describe-mount-targets --file-system-id fs-0123456789abcdef0 --region us-west-2

EFS マウントターゲットの詳細については、「Amazon EFS の仕組み」を参照してください。

Amazon S3 Files

  • マウントターゲット – S3 ファイルファイルシステムには、エージェントのランタイムと同じ VPC にマウントターゲットが必要です。マウントターゲットは、エージェントのランタイムサブネットと同じアベイラビリティーゾーンの少なくとも 1 つにある必要があります。

  • AZ ごとに 1 つのマウントターゲット – 各アベイラビリティーゾーンには、最大 1 つの S3 ファイルマウントターゲットを含めることができます。

  • 同じ VPC – S3 ファイルマウントターゲットは、エージェントのランタイムと同じ VPC に存在する必要があります。VPC ファイルシステム間のアクセスはサポートされていません。

  • DNS 解決 — VPC は、マウント<az-id>.<file-system-id>.s3files.<region>.on.aws時に S3 Files マウントターゲットホスト名を解決する必要があります。VPC 設定で DNS 解決が有効になっていることを確認します。

S3 Files マウントターゲットを確認するには:

aws s3files list-mount-targets --file-system-id fs-0123456789abcdef0 --region us-west-2

S3 ファイルのマウントの詳細については、S3 ファイルシステムのマウント」を参照してください。

共有要件

要件 EFS S3 Files

VPC モードが必要

NFS ポート 2049 (TCP)

同じ AZ にターゲットをマウントする

✓ (推奨)

✓ (必須)

同じ VPC

同じ AWS アカウント

DNS 解決が有効

クロスアカウント VPC

✗ サポートされていません

✗ サポートされていません

重要

クロスアカウント VPC 設定はサポートされていません。ファイルシステムリソース (ファイルシステム、アクセスポイント、マウントターゲット) とエージェントのランタイムは、同じ AWS アカウントと VPC に存在する必要があります。

AgentCore がファイルシステムをマウントする方法

AgentCore は、microVM 内の NFS マウントオペレーションを自動的に処理します。

  • EFS – TLS 経由で NFSv4.1 経由でマウントされます (ポート 2049)。IAM 認証は、実行ロールに AccessPointArn条件を持つelasticfilesystem:ClientMountアクセス許可がある場合に使用されます。

  • S3 ファイル – 必須の IAM 認証を使用して TLS 経由で NFSv4.2 経由でマウントされます。TLS と IAM は常に有効になっており、S3 ファイルに対して無効にすることはできません。

をインストールしたりamazon-efs-utils、 を設定したり/etc/fstab、TLS 証明書を管理する必要はありません。microVM ランタイムは、すべてのマウントオペレーション、認証情報のローテーション、ヘルスモニタリングを処理します。

サブネットとアベイラビリティーゾーンの選択

エージェントランタイムで VPC サブネットとファイルシステム設定の両方を設定するときは、ファイルシステムのマウントターゲットアベイラビリティーゾーンと重複するサブネットを選択します。

サブネットのアベイラビリティーゾーン ID を識別するには:

aws ec2 describe-subnets \ --subnet-ids subnet-0123456789abcdef0 \ --query 'Subnets[0].AvailabilityZoneId'

EFS マウントターゲットのアベイラビリティーゾーンを特定するには:

aws efs describe-mount-targets \ --file-system-id fs-0123456789abcdef0 \ --query 'MountTargets[*].[AvailabilityZoneId, LifeCycleState]' \ --output table

エージェントランタイムサブネットが、ファイルシステムにマウントターゲットがあるアベイラビリティーゾーンにあることを確認します。

リージョン別のサポートされているアベイラビリティーゾーンについては、VPC 設定トピックの「サポートされているアベイラビリティーゾーン」を参照してください。セキュリティグループの設定については、「例: Amazon EFS または Amazon S3 ファイルへの接続」を参照してください。

bring-your-own ファイルシステムマウントのトラブルシューティング

bring-your-own ファイルシステムのマウントが失敗すると、 は HTTP 424 (Failed Dependency) InvokeAgentRuntimeを返します。

症状 考えられる原因 クイック修正

「アクセスが拒否されました」

実行ロールに ClientMountまたは がありません ClientWrite

AccessPointArn 条件で IAM アクセス許可を追加する

ResourceNotFound」または「Failed to resolve」

アクセスポイントまたはマウントターゲットの削除または使用不可

ARN が存在し、マウントターゲットが使用可能であることを確認する

マウントがハングすると失敗する (約 30 秒)

セキュリティグループがポート 2049 をブロックしているか、エージェントのアベイラビリティーゾーンにマウントターゲットがない

TCP 2049 を許可し、アベイラビリティーゾーンの重複を検証する

書き込みの「アクセス許可が拒否されました」

欠落ClientWriteまたは POSIX UID/GID の不一致

書き込みアクセス許可を追加するか、アクセスポイント POSIX ユーザーを調整する

各マウントのタイムアウトは 30 秒です。すべての設定済みファイルシステムは並行してマウントされます。1 回の失敗で呼び出し全体が失敗します。

詳細については、「BYO ストレージのトラブルシューティング」を参照してください。