

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AgentCore ランタイムで Amazon Bedrock マネージドエージェント (OpenAI を使用) の使用を開始する
<a name="runtime-get-started-bma"></a>

**注記**  
Amazon Bedrock マネージドエージェント (OpenAI を使用) はプレビュー中です。機能や APIs、一般提供前に変更される場合があります。

Amazon Bedrock マネージドエージェントは OpenAI Codex ハーネスを実行します AWS。ハーネスはモデルとツール間のループを実行し、セッションを保持し、会話が大きくなるにつれてコンテキストを圧縮します。エージェントがコマンドを実行したり、ファイルを操作する必要がある場合、Bedrock マネージドエージェントは作業を 環境に送信します。その環境を実行する場所を決定します。

Codex exec-server は、ローカル開発用に独自のコンピュータで実行できます。その他のワークロードの場合、Bedrock マネージドエージェントはアカウントで AgentCore ランタイムを呼び出します。ランタイムは、各セッションに独自のmicroVM を提供します。セッションはユーザーが管理する実行ロールで実行され、ランタイムは VPC に接続して、エージェントがプライベートリソースに到達できるようにします。モデル呼び出しは Bedrock マネージドエージェントに留まるため、コンテナはエージェントが送信するコマンドのみを実行します。

このチュートリアルでは、以下のタスクを実行します。
+ AgentCore CLI を使用してランタイムを作成してデプロイします。
+ OpenAI SDK を使用してセッションを開始します。エージェントはランタイムでサンプルスキルを使用します。
+ (オプション) 独自のスキルを追加します。

ステップ 1～4 には約 15 分かかります。

このチュートリアルで作成した AWS リソースは、 AWS アカウントに課金される可能性があります。これらのリソースには、ランタイム、 AWS CodeBuild イメージビルド、Bedrock マネージドエージェントモデル呼び出しが含まれます。詳細については、[AgentCore の料金](https://aws.amazon.com/bedrock/agentcore/pricing/)」を参照してください。料金を停止するには、 のリソースを削除します[ステップ 8: クリーンアップする](#runtime-get-started-bma-clean-up)。

## 前提条件
<a name="runtime-get-started-bma-prerequisites"></a>
+  **Node.js 20 以降。**AgentCore CLI は npm パッケージとして配布されます。で を確認します`node --version`。
+  **uv。**サンプルクライアントは [uv](https://docs.astral.sh/uv/) を使用して Python 依存関係をインストールします。
+  **認証情報が設定された AWS アカウント。**アカウントを作成するには、[「 AWS アカウントの開始方法](https://docs.aws.amazon.com/accounts/latest/reference/getting-started.html)」を参照してください。認証情報を設定するには、「 [CLI AWS の設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。
+  **[IAM アクセス許可]**。ID には、AgentCore API コールを行い、デプロイ中に使用される CDK ブートストラップロールを引き受けるアクセス許可が必要です。[AgentCore CLI を使用する](runtime-permissions.md#runtime-permissions-cli)」を参照してください。サンプルクライアントには IAM アクセス許可も必要です。「[セッションロール](#runtime-get-started-bma-session-role)」を参照してください。
+  **モデルアクセス。**アカウントは Bedrock マネージドエージェントモデル にアクセスする必要があります`openai.gpt-5.6-luna`。

CLI は、アカウントに AWS CodeBuild を使用してコンテナイメージを構築します。

## ステップ 1: プロジェクトを作成する
<a name="runtime-get-started-bma-create"></a>

AgentCore CLI をインストールし、認証情報とリージョンを設定します。

```
npm install -g @aws/agentcore
agentcore --version

export AWS_PROFILE=your-profile
export AWS_REGION=us-east-1
```

`BedrockManagedAgents` フレームワークを使用してプロジェクトを作成します。フラグ`agentcore create`なしで を実行することもできます。**エージェント**を選択し、**Bedrock マネージドエージェント**をフレームワークとして選択します。

```
agentcore create --name MyManagedAgent --framework BedrockManagedAgents
cd MyManagedAgent
```

プロジェクトには、 のランタイム設定`agentcore/agentcore.json`と のコンテナソースがあります`app/MyManagedAgent/`。コンテナは `codex exec-server`を実行します。これは Bedrock マネージドエージェントに接続し、エージェントのコマンドを実行します。

プロジェクトは、以下のデフォルトを使用してランタイムを設定します。
+ アイドルタイムアウトは 30 分、最大有効期間は 8 時間です。[「ライフサイクル設定の構成](runtime-lifecycle-settings.md)」を参照してください。
+ のアクセス許可を持つ実行ロール`policies/bma-acr-policy.json`。

### プロジェクトの構造
<a name="runtime-get-started-bma-project-structure"></a>

```
MyManagedAgent/
├── agentcore/
│   ├── agentcore.json
│   └── cdk/
└── app/MyManagedAgent/
    ├── Dockerfile
    ├── lifecycle/server.py
    ├── otel/collector.yaml
    ├── plugins/acr-report/
    ├── policies/
    │   ├── bma-acr-policy.json
    │   ├── bma-session-trust.json
    │   └── bma-session-policy.json
    ├── pyproject.toml
    ├── client.py
    └── README.md
```

キーファイル:
+  `lifecycle/server.py` - ライフサイクルサーバー。Bedrock マネージドエージェントはこれを呼び出してランタイムセッション`codex exec-server`で開始します。このファイルは変更しないでください。
+  `Dockerfile` - Codex、CloudWatch エージェント、Python をインストールし、`lifecycle/`、`otel/`、 を にコピー`plugins/`します`/opt/bma`。
+  `otel/collector.yaml` - exec-server のスパンとログを CloudWatch に送信します。
+  `plugins/acr-report/` - 1 つのスキルを持つサンプルプラグイン。スキルはワークスペース`acr-report.txt`に保存されます。
+  `policies/bma-acr-policy.json` - ランタイム実行ロールのポリシー。`bedrock-mantle:RegisterEnvironment` および `bedrock-mantle:ConnectEnvironment` を許可します。1 つのプロジェクトに制限するには、 `Resource`を に変更します`arn:aws:bedrock-mantle:<region>:<account-id>:project/<project-id>`。
+  `pyproject.toml` - Python の依存関係。`dev` グループは `client.py`専用です。
+  `policies/bma-session-trust.json` および `policies/bma-session-policy.json` - 信頼ポリシーとセッションロールのアクセス許可。「[セッションロール](#runtime-get-started-bma-session-role)」を参照してください。
+  `client.py` - セッションを開始するサンプルクライアント。ステップ 3 で実行します。

### VPC にランタイムをデプロイする
<a name="runtime-get-started-bma-vpc"></a>

ネットワークオプションを に追加します`agentcore create`。

```
agentcore create --name MyManagedAgent --framework BedrockManagedAgents \
  --network-mode VPC --vpc-id <vpc-id> --subnets <subnet-ids> \
  --security-groups <security-group-ids>
```

exec-server が接続するため、VPC には Bedrock Managed Agents エンドポイントへのルートが必要です。イメージビルドは Codex と Python をダウンロードするため、インターネットへのルートも必要です。「VPC [の AgentCore を設定する](agentcore-vpc.md)」を参照してください。

### インスタンスでランタイムを実行する
<a name="runtime-get-started-bma-instances"></a>

同じプロジェクトが**インスタンス**コンピューティングタイプで実行されます。プロジェクトにキャパシティープロバイダーを追加し、キャパシティープロバイダーでエージェントを追加します。

```
agentcore create --name MyManagedAgent --no-agent
cd MyManagedAgent
agentcore add capacity-provider --name MyCapacityProvider \
  --subnets <subnet-ids> --security-groups <security-group-ids> \
  --os LINUX_ARM64 --instance-types c7g.large
agentcore add agent --name MyManagedAgent --framework BedrockManagedAgents \
  --capacity-provider MyCapacityProvider
```

次に、 を続行します[ステップ 2: デプロイする](#runtime-get-started-bma-deploy)。 はキャパシティープロバイダーとそのオペレーターロール`agentcore deploy`も作成します。
+ イメージビルドは ARM64 イメージを作成するため、 `LINUX_ARM64`および Graviton インスタンスタイプを使用します。
+ キャパシティープロバイダーはネットワークを提供します。サブネットには Bedrock Managed Agents エンドポイントへのルートが必要です。

プロジェクトにないキャパシティープロバイダーをアタッチするには、その ARN を に渡します`agentcore create --framework BedrockManagedAgents --capacity-provider <capacity-provider-arn>`。[「ランタイムインスタンスとキャパシティープロバイダー](runtime-instances.md)」を参照してください。

## ステップ 2: デプロイする
<a name="runtime-get-started-bma-deploy"></a>

```
agentcore deploy
agentcore status
```

CLI は、アカウントに AWS CodeBuild を使用してイメージを構築し、ランタイムとその実行ロールをデプロイします。Bedrock マネージドエージェントはランタイムを呼び出します。

の出力からランタイム ARN を保存します`agentcore status`。

```
arn:aws:bedrock-agentcore:us-east-1:<account-id>:runtime/<runtime-id>
```

## ステップ 3: セッションを実行する
<a name="runtime-get-started-bma-client"></a>

Bedrock マネージドエージェントは、セッションロールを使用してモデルを呼び出し、ランタイムを呼び出します。セッションロールはランタイム実行ロールではありません。**を実行すると`client.py`、アカウントにセッションロールが作成されます。** `agentcore deploy` はセッションロールを作成しず、削除も`agentcore remove`しません。「[セッションロール](#runtime-get-started-bma-session-role)」を参照してください。

エージェントディレクトリからクライアントを実行します。

```
cd app/MyManagedAgent
uv run client.py --runtime <runtime-arn>
```

クライアントはセッションを作成し、セッション ID、各コマンドとその出力、エージェントの回答を出力します。デフォルトでは、エージェントは`acr-report`スキルを使用してワークスペース`acr-report.txt`に保存します。

次のセクションでは、クライアントがセッションロールを管理する方法と、クライアントを実行するために必要な IAM アクセス許可について説明します。

### セッションロール
<a name="runtime-get-started-bma-session-role"></a>

セッションロールはランタイム実行ロールではありません。 は を使用して実行ロール`agentcore deploy`を作成します`policies/bma-acr-policy.json`。クライアントは、セッションの作成時に `role_arn`フィールドの Bedrock マネージドエージェントにセッションロールを付与します。

新しいセッションを開始し、 を指定しない場合`--role-arn`、クライアントは次のステップを実行します。

1. ロール`BmaSessionRole-<region>`が存在しない場合は、クライアントが作成します。

1. クライアントは、ロール`BmaSession`の信頼ポリシーとインラインポリシーを `policies/bma-session-trust.json`および と比較します`policies/bma-session-policy.json`。ポリシーが同じでない場合、クライアントはファイルをロールに書き込みます。ファイルは、ランタイムのアカウントとリージョンに限定されます。

1. クライアントがロールを変更した場合、15 秒待機します。Bedrock マネージドエージェントが変更を使用する前に、IAM にこの時間が必要です。

ロールを変更するには、ファイルを変更します。クライアントは、ロールに追加する他のポリシーを削除しません。を付与するときにロールはチェックされず`--session-id`、 で付与するロールは変更されません`--role-arn`。

本番環境では、クライアントに 1 つのランタイムと 1 つのゲートウェイのロールを で付与します`--role-arn`。ロールを作成するには、 の 2 つのファイルを使用します`policies/`。パーティション、リージョン、アカウント ID を入力し、 `runtime/`と ` `をランタイム ID とゲートウェイ ID に変更`gateway/*`します。リージョン内のすべてのプロジェクトが を共有するため、プロジェクト内のファイルを変更しないでください`BmaSessionRole-<region>`。

クライアントを実行する ID には、セッションロール`iam:PassRole`に対する Bedrock Managed Agents クライアントのアクセス許可、`bedrock-mantle:CallWithBearerToken`、および が必要です。クライアントがロールを作成および修復できるようにするには、 `iam:PutRolePolicy`で `iam:GetRole`、`iam:CreateRole`、`iam:UpdateAssumeRolePolicy``iam:GetRolePolicy`、、 も指定します`arn:aws:iam::<account-id>:role/BmaSessionRole-*`。に付与した場合`--role-arn`、クライアントはこれら 5 つのアクセス許可を必要としません。

信頼ポリシー、セッションロールのアクセス許可、およびクライアントアクセス許可については、*「Amazon Bedrock ユーザーガイド*」の[「セキュリティロールと IAM ロール](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-managed-agents-openai-security.html)」を参照してください。

### クライアントの仕組み
<a name="runtime-get-started-bma-client-code"></a>

クライアントは `openai`パッケージの`client.beta.agents`リソースを使用します。Bedrock マネージドエージェントはエージェントループを実行します。

クライアントはセッションを作成するときに、 でこれらの値を設定します`environment`。
+  `type` - Bedrock マネージドエージェント`aws_bedrock_agentcore`に AgentCore ランタイムを使用するように指示する 。
+  `runtime_arn` - ランタイム。セッションはランタイムの リージョンで実行されます。
+  `workspace_directory` - エージェントがコマンドを実行するディレクトリ。クライアントは を使用します`/home/app/workspace`。ライフサイクルサーバーは ディレクトリを作成します。
+  `runtime_qualifier` - ランタイムのエンドポイント。クライアントは を使用します`DEFAULT`。
+  `capability_directories` - Bedrock マネージドエージェントがスキルを見つけるディレクトリ。クライアントは を使用します`/opt/bma/plugins`。

クライアントはセッションロール`extra_body`にも `role_arn` を設定します。`openai` パッケージには、このフィールドのパラメータがありません。

`provide_token` ヘルパーは認証情報を使用して AWS 、リクエストごとに有効期間の短い Amazon Bedrock ベアラートークンを取得します。

プロジェクトにゲートウェイを追加する場合は、 `agentcore deploy`を使用して の出力からその ARN を指定します`--gateway`。フラグは、新しいセッションにのみ使用します。クライアントは、 の ARN を使用してゲートウェイを`mcp`ツールとして追加します`connector_id`。Bedrock マネージドエージェントは、セッションロールを使用してゲートウェイを呼び出します。ゲートウェイは MCP バージョン をサポートしている必要があります`2025-03-26`。そうでない場合、エージェントはゲートウェイツールを取得せず、Bedrock マネージドエージェントはエラーを表示しません。

```
"""Send an input to a Bedrock Managed Agents session that uses this project's ACR."""

import argparse
import json
import time
from pathlib import Path
from typing import Any

import boto3
from aws_bedrock_token_generator import provide_token
from botocore.exceptions import ClientError
from openai import NotFoundError, OpenAI

BMA_MODEL_ID = "openai.gpt-5.6-luna"
# The agent runs its commands in this directory. The lifecycle server creates it.
WORKSPACE_DIRECTORY = "/home/app/workspace"
# Plugins and skills that the agent can use. The image has the acr-report plugin
# at this path. Add the path of an S3 Files mount to use the skills in a bucket.
CAPABILITY_DIRECTORIES = ["/opt/bma/plugins"]
TURN_END = ("completed", "failed", "cancelled")
TOOL_CALLS = ("mcp_call", "function_call", "web_search_call")
POLICIES = Path(__file__).parent / "policies"
SESSION_ROLE = "BmaSessionRole-{region}"
SESSION_POLICY = "BmaSession"


def show(data: dict[str, Any]) -> None:
    """Prints the session ID, the commands, the tool calls, and the answer."""
    kind = data["type"].removeprefix("agent.session.")
    item = data.get("item") or {}
    if kind == "created":
        print(f"Session {data['session']['id']}")
    elif kind == "turn.output_text.delta":
        print(data["delta"], end="", flush=True)
    elif kind == "turn.item.done" and item.get("type") == "command_execution":
        print(f"\n$ {item['command']}\n{item.get('output') or ''}".rstrip())
    elif kind == "turn.item.done" and item.get("type") in TOOL_CALLS:
        print(f"\nTool {item.get('name') or item['type']} {item.get('status')}")
    elif kind == "error" or kind.split(".")[-1] in TURN_END:
        source = data.get("turn") or data.get("environment") or data.get("session")
        print(f"\n{kind} {(source or data).get('error') or ''}".rstrip())


def load_policy(name: str, partition: str, region: str, account: str) -> str:
    """Reads a policy file and puts in the partition, the Region, and the account."""
    text = (POLICIES / name).read_text()
    for key, value in (("Partition", partition), ("Region", region), ("AccountId", account)):
        text = text.replace("${AWS::" + key + "}", value)
    return text


def session_role(runtime_arn: str) -> str:
    """Creates or repairs the session role, and returns its ARN.

    If the trust policy or the policy of the role is not the same as the file in `policies/`,
    the client writes the file to the role.
    """
    _, partition, _, region, account = runtime_arn.split(":")[:5]
    name = SESSION_ROLE.format(region=region)
    trust = load_policy("bma-session-trust.json", partition, region, account)
    policy = load_policy("bma-session-policy.json", partition, region, account)
    iam = boto3.client("iam")
    changed = False
    try:
        role = iam.get_role(RoleName=name)["Role"]
    except iam.exceptions.NoSuchEntityException:
        role = iam.create_role(RoleName=name, AssumeRolePolicyDocument=trust)["Role"]
        print(f"Created the session role {name}")
        changed = True
    else:
        if role["AssumeRolePolicyDocument"] != json.loads(trust):
            iam.update_assume_role_policy(RoleName=name, PolicyDocument=trust)
            print(f"Updated the trust policy of {name}")
            changed = True
    try:
        current = iam.get_role_policy(RoleName=name, PolicyName=SESSION_POLICY)["PolicyDocument"]
    except iam.exceptions.NoSuchEntityException:
        current = None
    if current != json.loads(policy):
        iam.put_role_policy(RoleName=name, PolicyName=SESSION_POLICY, PolicyDocument=policy)
        if not changed:
            print(f"Updated the policy of {name}")
        changed = True
    if changed:
        # IAM needs some seconds before Bedrock Managed Agents can use a new or changed role.
        time.sleep(15)
    return role["Arn"]


def main() -> None:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--runtime", required=True, help="The ACR ARN.")
    parser.add_argument(
        "--session-id",
        help="The BMA session ID. If it does not exist, the client creates a session.",
    )
    parser.add_argument(
        "--input",
        default="Use the acr-report skill to save an ACR report in the workspace.",
    )
    parser.add_argument(
        "--gateway",
        help="The Gateway ARN from the output of `agentcore deploy`.",
    )
    parser.add_argument(
        "--role-arn",
        help="The session role that BMA assumes. If you do not give it, the client creates a role.",
    )
    parser.add_argument("--delete", action="store_true", help="Delete the session.")
    parser.add_argument("--raw", action="store_true", help="Print events as JSON.")
    args = parser.parse_args()
    # BMA must run in the Region of the ACR.
    region = args.runtime.split(":")[3]

    with OpenAI(
        api_key=lambda: provide_token(region=region),
        base_url=f"https://bedrock-mantle.{region}.api.aws/openai/v1",
    ) as client:
        sessions = client.beta.agents.sessions
        session_id = args.session_id
        if session_id:
            try:
                session = sessions.retrieve(session_id).model_dump(warnings=False)
            except NotFoundError:
                print(f"Session {session_id} does not exist.")
                session_id = None
            else:
                if session["environment"].get("runtime_arn") != args.runtime:
                    raise ValueError(f"Session {session_id} uses another ACR.")
        if not session_id and not args.role_arn:
            try:
                args.role_arn = session_role(args.runtime)
            except ClientError as error:
                parser.error(
                    f"The client cannot create or check the session role: {error}. "
                    "Get the IAM permissions in README.md, or give --role-arn."
                )
            print(f"Session role {args.role_arn}")

        if session_id:
            # BMA opens the stream only with stream=true, and the SDK does not send it.
            events = sessions.events.stream(session_id, extra_query={"stream": "true"})
            message = {
                "role": "user",
                "content": [{"type": "input_text", "text": args.input}],
            }
            sessions.events.create(
                session_id,
                events=[{"type": "agent.session.input.message", "input": [message]}],
            )
        else:
            agent: dict[str, Any] = {
                "model": BMA_MODEL_ID,
                "instructions": "Use the available tools to complete the task.",
            }
            if args.gateway:
                # Bedrock Managed Agents calls Gateway with the session role from the service side.
                agent["tools"] = [
                    {"type": "mcp", "server_label": "team_tools", "connector_id": args.gateway}
                ]
                args.input += " Then list the tools that the Gateway gives you."
            events = sessions.create(
                agent=agent,
                environment={
                    "type": "aws_bedrock_agentcore",
                    "runtime_arn": args.runtime,
                    "runtime_qualifier": "DEFAULT",
                    "workspace_directory": WORKSPACE_DIRECTORY,
                    "capability_directories": CAPABILITY_DIRECTORIES,
                },
                input=args.input,
                stream=True,
                # The SDK has no role_arn parameter. BMA assumes this role to call the ACR.
                extra_body={"role_arn": args.role_arn},
            )

        with events:
            for event in events:
                data = event.model_dump(mode="json", warnings=False)
                session_id = session_id or (data.get("session") or {}).get("id")
                if args.raw:
                    print(json.dumps(data), flush=True)
                else:
                    show(data)
                if data["type"].removeprefix("agent.session.turn.") in TURN_END:
                    break

        if args.delete:
            sessions.delete(session_id)
            print(f"\nDeleted session {session_id}")


if __name__ == "__main__":
    main()
```

## ステップ 4: セッションを続行する
<a name="runtime-get-started-bma-continue"></a>

同じセッションに別の入力を送信するには、セッション ID を追加します。ターンは同じワークスペースを使用します。アイドル停止後もワークスペースを維持するには、 のようにセッションストレージを追加します[アイドル状態の停止後にファイルを保持する](#runtime-get-started-bma-keep-files)。

```
uv run client.py --runtime <runtime-arn> --session-id <session-id> \
  --input "Run cat acr-report.txt and show the output."
```

セッションが存在しない場合、クライアントは新しいセッションを作成します。`--delete` を追加してターン後にセッションを削除するか、各イベントを JSON として`--raw`出力します。

### アイドル状態の停止後にファイルを保持する
<a name="runtime-get-started-bma-keep-files"></a>

microVM ランタイムで、exec-server のホームディレクトリをセッションストレージに配置します。次に、ワークスペース、接続状態、アイドル状態の停止後も`CODEX_HOME`維持されます。

1. ステップ 1 の コマンドの代わりに、セッションストレージを使用してプロジェクトを作成します。

   ```
   agentcore create --name MyManagedAgent --framework BedrockManagedAgents \
     --session-storage-mount-path /mnt/home
   cd MyManagedAgent
   ```

1. で`agentcore/agentcore.json`、この変数をランタイムのエントリに追加します。

   ```
   "envVars": [{ "name": "BMA_HOME_DIR", "value": "/mnt/home" }]
   ```

1. で`client.py`、 を設定します`WORKSPACE_DIRECTORY = "/mnt/home/workspace"`。

1. クライアントをデプロイして実行します。

セッションストレージの詳細については、[AgentCore Runtime のファイルシステム設定](runtime-filesystem-configurations.md)」を参照してください。

## ステップ 5: (オプション) スキルを追加する
<a name="runtime-get-started-bma-skills"></a>

イメージにスキルを追加するには、 にプラグインを追加して`plugins/`デプロイします。プラグインには `.codex-plugin/plugin.json` ファイルと `skills/` ディレクトリがあります。`skills/` ディレクトリには、スキルごとに 1 つのサブディレクトリがあり、そこに`SKILL.md`ファイルがあります。このイメージは`/opt/bma/plugins`、クライアントが Bedrock マネージドエージェントに既に付与している にコピーします。

起動するには、 をコピーし`plugins/acr-report/`、プラグインディレクトリと の名前`skills/acr-report/`をプラグインとスキルの名前に変更します。で`plugin.json`、`name`、、`version``description`、および を設定します`"skills": "./skills/"`。各 は、 `name`と を持つフロントマターで`SKILL.md`始まります`description`。デプロイ後、 で新しいセッションを開始します`--input "Use the <skill-name> skill to …​"`。

### Amazon S3 バケットからスキルを共有する
<a name="runtime-get-started-bma-skills-s3"></a>

S3 Files アクセスポイントをランタイムにマウントします。その後、バケットが変更されるとスキルが変わり、イメージは変わりません。S3 ファイルファイルシステム、アクセスポイント、およびセキュリティグループのルールについては、[AgentCore Runtime のファイルシステム設定](runtime-filesystem-configurations.md)」を参照してください。

S3 Files マウントには、VPC ネットワークモードでランタイムが必要です。のネットワークオプションを使用してプロジェクトを作成します[VPC にランタイムをデプロイする](#runtime-get-started-bma-vpc)。

バケットで、各プラグインをアクセスポイントのルートディレクトリの下にある独自のディレクトリに配置します。`plugins/acr-report/`: `<plugin>/.codex-plugin/plugin.json`および と同じレイアウトを使用します`<plugin>/skills/<skill>/SKILL.md`。

のランタイムのエントリにマウントを追加します`agentcore/agentcore.json`。

```
{
  "filesystemConfigurations": [
    {
      "s3FilesAccessPoint": {
        "accessPointArn": "arn:aws:s3files:us-east-1:111122223333:file-system/fs-0123456789abcdef0/access-point/fsap-0123456789abcdef0",
        "mountPath": "/mnt/skills"
      }
    }
  ]
}
```

次に、 `CAPABILITY_DIRECTORIES` を `client.py`に設定し`["/opt/bma/plugins", "/mnt/skills"]`、デプロイします。

## ステップ 6: ログとトレースを表示する
<a name="runtime-get-started-bma-observe"></a>

```
agentcore logs --since 15m
```

最初のデプロイでは、アカウントの CloudWatch トランザクション検索が有効になります。トレースは約 10 分後に表示されます。トレースを表示するには、CloudWatch コンソールを開き、**GenAI Observability** を選択します。Bedrock マネージドエージェントからライフサイクルサーバーへの各呼び出しには、1 つの`bma.invocation`スパンがあります。詳細については、[「Amazon Bedrock AgentCore エージェントのオブザーバビリティデータを表示する](observability-view.md)」を参照してください。

**トランザクション検索設定はアカウント全体に適用されます**  
トランザクション検索とそのスパンインデックス作成は、リージョンのアカウント全体に適用され、追加料金が適用される場合があります。現在の設定を維持するには、デプロイ`~/.agentcore/config.json`する前に `"disableTransactionSearch": true` を に追加します。

## ステップ 7: 更新して再デプロイする
<a name="runtime-get-started-bma-update"></a>

でランタイム設定を変更するか`agentcore/agentcore.json`、イメージのファイルを変更して、再度デプロイします。たとえば、この設定は 10 分後にアイドルセッションを停止します。値は秒単位です。

```
{
  "lifecycleConfiguration": {
    "idleRuntimeSessionTimeout": 600,
    "maxLifetime": 28800
  }
}
```

```
agentcore deploy
```

変更は新しいセッションに適用されます。

### ライフサイクルサーバーの環境変数
<a name="runtime-get-started-bma-env-vars"></a>

ランタイムのエントリ`envVars`に、 などの変数を追加します`{ "name": "DISABLE_ADOT_OBSERVABILITY", "value": "true" }`。


| 変数 | デフォルト | 説明 | 
| --- | --- | --- | 
|  `DISABLE_ADOT_OBSERVABILITY`  | 未設定 | トレースと exec-server ログをオフに`true`するには、 に設定します。ライフサイクルサーバーは、ランタイムのロググループに独自のログを書き込みます。 | 
|  `BMA_HOME_DIR`  |  `/home/app`  |  `HOME` exec-server の 。 | 
|  `BMA_STATE_DIR`  |  `BMA_HOME_DIR` の `.bma`  | セッションの接続状態`state.json`を保持する のディレクトリ。 | 
|  `BMA_CODEX_HOME`  |  `BMA_HOME_DIR` の `.codex`  |  `CODEX_HOME` exec-server の 。 | 
|  `BMA_CODEX_BINARY`  |  `/opt/bma/bin/codex`  | Codex バイナリ。 | 
|  `BMA_MAX_TURN_LEASE`  |  `300`  | 最長ターンリース、秒単位。 | 

各イメージビルドは、最新の Codex リリースをインストールします。ライフサイクルサーバーには Codex 0.154.0 以降が必要です。リリースを固定するには、 `CODEX_NON_INTERACTIVE=1` の `CODEX_RELEASE=<version>`の横に を追加します`Dockerfile`。

## ステップ 8: クリーンアップする
<a name="runtime-get-started-bma-clean-up"></a>

セッションを削除するには、そのセッションのクライアントの最終実行`--delete`に を追加します。次に、プロジェクトのリソースを削除し、デプロイしてランタイム、その実行ロール、スタックを削除します。

```
agentcore remove all
agentcore deploy
```

デプロイでは、これらのリソースは削除されません。
+ ランタイム、イメージを構築する CodeBuild プロジェクトの CloudWatch Logs ロググループ、およびビルドを開始する Lambda 関数のロググループ。
+ Amazon ECR リポジトリの AWS KMS キー。キーは 30 日間**削除保留中**状態のままになり、KMS AWS によって削除されます。
+ 最初のデプロイでアカウントとリージョンがブートストラップされた場合の`CDKToolkit`スタック。他の AWS CDK アプリケーションはこのスタックを使用できます。他のアプリが使用していない場合にのみ削除します。
+ ステップ 6 のトランザクション検索設定。
+ ステップ 3 で`client.py`作成したセッションロール。

セッションロールを削除するには、次のコマンドを実行します。

```
aws iam delete-role-policy --role-name BmaSessionRole-<region> --policy-name BmaSession
aws iam delete-role --role-name BmaSessionRole-<region>
```

ロググループを検索するには、以下のコマンドを実行します。次に、各ロググループを削除します。

```
aws logs describe-log-groups --log-group-name-prefix /aws/bedrock-agentcore/runtimes/<project-name>_<agent-name>- --query 'logGroups[].logGroupName'
aws logs describe-log-groups --log-group-name-prefix /aws/codebuild/AgentCore-<project-name>-<target-name>- --query 'logGroups[].logGroupName'
aws logs describe-log-groups --log-group-name-prefix /aws/lambda/AgentCore- --query 'logGroups[].logGroupName'
aws logs delete-log-group --log-group-name <log-group-name>
```

これらの値を置き換えます。
+  `<project-name>` - プロジェクトの名前。ステップ 1 では、 です`MyManagedAgent`。
+  `<agent-name>` - エージェントの名前。ステップ 1 では、これは でもあります`MyManagedAgent`。
+  `<target-name>` - のデプロイターゲットの名前`agentcore/aws-targets.json`。デフォルトは `default` です。CodeBuild 名では、プロジェクト名とターゲット名の各アンダースコア (`_`) がハイフン () に変わります`-`。

Lambda ロググループの名前は、次の例のように短縮されます。

```
/aws/lambda/AgentCore-MyManagedAgent--ApplicationAgentMyManage-<suffix>
```

コマンドは、 リージョン内のすべての AgentCore CLI プロジェクトの Lambda ロググループを一覧表示します。プロジェクトのロググループのみを削除します。

ゲートウェイやメモリなどの他のリソースをプロジェクトに追加した場合は、デプロイによって削除されたことを確認します。

## 関連リソース
<a name="runtime-get-started-bma-related"></a>
+  [AgentCore CLI を使用する](runtime-permissions.md#runtime-permissions-cli) 
+  [ライフサイクル設定を構成する](runtime-lifecycle-settings.md) 
+  [AgentCore ランタイムのファイルシステム設定](runtime-filesystem-configurations.md) 
+  [VPC の AgentCore を設定する](agentcore-vpc.md) 
+  [ランタイムインスタンスとキャパシティープロバイダー](runtime-instances.md) 
+  [Amazon Bedrock AgentCore エージェントのオブザーバビリティデータを表示する](observability-view.md) 