1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Bedrock AgentCore とは?AI エージェントを安全に本格運用する新サービス ① Rutime 編

Posted at

はじめに - AIエージェントの進化

これまで AI は、ChatGPT のようにユーザーが質問すると答えを返すという「対話型」の使い方が中心でした。
しかし最近では、AIエージェントという新しい形の AI が注目を集めています。


開発者が直面する課題

AI エージェントのプロトタイプを作ることは、オープンソースのフレームワーク(LangGraph、Strands Agents など)のおかげで比較的簡単になりました。

しかし、実際に会社で使える本格的なシステムにするには、以下のような技術的な課題がありました:

  • セキュリティ
  • セッション管理
  • メモリシステム
  • 監視機能
  • アクセス制御

これらを一から構築するには、開発者は数ヶ月の時間を費やす必要がありました。


Amazon Bedrock AgentCore の登場

AWS が Amazon Bedrock AgentCore のプレビュー版を発表しました。これは、上記の課題をすべて解決する包括的なサービス群です。

2025 年 7 月 16 日現在プレビュー版

AgentCore の 7 つの主要サービス

AgentCore は、AI エージェントの本格運用に必要な機能を 7 つのコンポーネントに分けて提供しています:

サービス 役割
Runtime AI エージェントのサーバレス実行環境
Memory 短期・長期の記憶のマネージド環境
Observability AI エージェントの動作状況を可視化・監視
Identity AI エージェントの認証認可の機能を提供
Gateway 既存 API や Lambda をエージェントを MCP サーバーに変換して提供
Browser 完全なクラウドベースのブラウザ
Code Interpreter サンドボックス環境での安全なコード記述と実行

スクリーンショット 2025-07-28 21.58.21.png


利用可能地域と料金

  • 提供地域:米国東部、米国西部、アジアパシフィック(シドニー)、欧州(フランクフルト)
  • 無料トライアル:2025 年 9 月 16 日まで
  • 本格料金:2025 年 9 月 17 日から開始

AgentCore の利点

開発者にとって

  • 開発時間の大幅短縮:インフラ構築に数ヶ月かかっていた作業が数行のコードで完了
  • 既存フレームワークとの互換性:お気に入りのオープンソースツールをそのまま使用可能
  • 段階的な機能追加:必要な機能だけを選んで追加可能

企業にとって

  • エンタープライズレベルのセキュリティ:暗号化、アクセス制御、監査機能
  • スケーラビリティ:数千のユーザーに対応可能
  • 運用監視:本番環境でのパフォーマンス監視とトラブルシューティング

① Runtime 編

まずは、触れたものから随時記事にしたいと思いますので、① Runtime 編ということで動かしながら記載していきたいと思います。

特徴

  • 最大 8 時間のワークロードに対応
  • ペイロードサイズ 100 MB までに対応
  • 人気のあるオープンソースフレームワークを利用して、AI エージェントをデプロイ
  • PoC から本番稼働までのデプロイまで数行のコードで実現
  • MCP サーバーのデプロイもサポート

全体図

スクリーンショット 2025-07-28 20.47.48.png

モデルアクセスの有効化

今回 Strands ライブラリを使います。
Strands は デフォルトで最新の Claude Sonnet 4 を使うため Amazon Bedrock コンソロールのモデルアクセスから有効化しておきましょう。

スクリーンショット 2025-07-26 23.41.42.png

パッケージのインストール

requirements.txt に次の通り記載しパッケージをインストールします。bedrock-agentcore は勿論必須ですが今回、strands-agents も利用しているため合わせてインストールしておきます。

requirements.txt
bedrock-agentcore
strands-agents
pip3 install -r requirements.txt

成果物を簡単にデプロイするために bedrock-agentcore-starter-toolkit もインストールしておきます。(CLI のようにお使いいただけます。)

pip3 install bedrock-agentcore-starter-toolkit

IAM ロールの作成

AgentCore Runtime でエージェントまたはツールを実行するためには適切なポリシーを付与した IAM ロールが必要です。

順番にコマンドを実行していきます。

trust-policy.json の作成
trust-policy.json
cat > trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AssumeRolePolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "accountId"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:bedrock-agentcore:region:accountId:*"
            }
       }
    }
  ]
}
EOF
permissions-policy.json の作成
cat > permissions-policy.json << 'EOF'
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRImageAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:region:accountId:repository/*"
            ]        
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogStreams",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:region:accountId:log-group:/aws/bedrock-agentcore/runtimes/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "arn:aws:logs:region:accountId:log-group:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:region:accountId:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*"
            ]
        },
        {
            "Sid": "ECRTokenAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
        "Effect": "Allow", 
        "Action": [ 
            "xray:PutTraceSegments", 
            "xray:PutTelemetryRecords", 
            "xray:GetSamplingRules", 
            "xray:GetSamplingTargets"
            ],
         "Resource": [ "*" ] 
         },
         {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "bedrock-agentcore"
                }
            }
        },
        {
            "Sid": "GetAgentAccessToken",
            "Effect": "Allow",
            "Action": [
                "bedrock-agentcore:GetWorkloadAccessToken",
                "bedrock-agentcore:GetWorkloadAccessTokenForJWT",
                "bedrock-agentcore:GetWorkloadAccessTokenForUserId"
            ],
            "Resource": [
              "arn:aws:bedrock-agentcore:region:accountId:workload-identity-directory/default",
              "arn:aws:bedrock-agentcore:region:accountId:workload-identity-directory/default/workload-identity/agentName_*"
            ]
        },
         {"Sid": "BedrockModelInvocation", 
         "Effect": "Allow", 
         "Action": [ 
                "bedrock:InvokeModel", 
                "bedrock:InvokeModelWithResponseStream"
              ], 
        "Resource": [
            "arn:aws:bedrock:*::foundation-model/*",
            "arn:aws:bedrock:region:accountId:*"
        ]
        }
    ]
}
EOF
IAM ロール・IAM ポリシーの作成とアタッチ
# 実際の値に置換
sed -i '' -e 's/region/us-west-2/g' -e 's/accountId/123456789012/g' -e 's/agentName/my_agent/g' trust-policy.json
sed -i '' -e 's/region/us-west-2/g' -e 's/accountId/123456789012/g' -e 's/agentName/my_agent/g' permissions-policy.json

# ロール作成
aws iam create-role \
    --role-name BedrockAgentCoreExecutionRole \
    --assume-role-policy-document file://trust-policy.json

aws iam put-role-policy \
    --role-name BedrockAgentCoreExecutionRole \
    --policy-name BedrockAgentCoreExecutionPolicy \
    --policy-document file://permissions-policy.json

Agent の準備

既存のエージェントを Amazon Bedrock AgentCore 対応サービスに変換するには、わずか 3つのステップ で行えます。

my_bedrock_agentcore_runtime.py
# 1. runtime をインポートする
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent

# 2. BedrockAgentCoreApp のインスタンスを作成
agent = Agent()
app = BedrockAgentCoreApp()

# 3. `@app.entrypoint` デコレータを追加
@app.entrypoint
def invoke(payload):
    """Process user input and return a response"""
    user_message = payload.get("prompt", "Hello")
    response = agent(user_message)
    return str(response) 

if __name__ == "__main__":
    app.run()

BedrockAgentCoreApp を使用すると裏ではざっくり言うと、

  • HTTP サーバーの作成
  • 必要なエンドポイントの実装
  • データ形式の管理
  • エラーハンドリング

のような処理が自動的に実行されます。

ローカルで実行し、起動することを確認しておきます。

$ python my_bedrock_agentcore_runtime.py

INFO:     Started server process [19751]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

Agent の導入

次の通りファイルを準備します。とはいっても、my_bedrock_agentcore_runtime.pyrequirements.txt は作成済みですの空の __init__.py を作成しておきます。

my_bedrock_agentcore/
├── my_bedrock_agentcore_runtime.py 
├── requirements.txt
└── __init__.py

agentcore configure コマンドを実行してエージェントをセットアップします。この時に前の手順で作成した IAM ロールを指定します。

ACCOUNT_ID="123456789012"

agentcore configure --entrypoint my_bedrock_agentcore_runtime.py -er arn:aws:iam::${ACCOUNT_ID}:role/BedrockAgentCoreExecutionRole

実行が完了すると、2 つのファイルファ出来上がります。

.bedrock_agentcore.yaml
.bedrock_agentcore.yaml
default_agent: my_bedrock_agentcore_runtime
agents:
  my_bedrock_agentcore_runtime:
    name: my_bedrock_agentcore_runtime
    entrypoint: my_bedrock_agentcore_runtime.py
    platform: linux/arm64
    container_runtime: docker
    aws:
      execution_role: arn:aws:iam::123456789012:role/BedrockAgentCoreExecutionRole
      execution_role_auto_create: true
      account: '123456789012'
      region: us-west-2
      ecr_repository: 123456789012.dkr.ecr.us-west-2.amazonaws.com/bedrock-agentcore-my_bedrock_agentcore_runtime
      ecr_auto_create: false
      network_configuration:
        network_mode: PUBLIC
      protocol_configuration:
        server_protocol: HTTP
      observability:
        enabled: true
    bedrock_agentcore:
      agent_id: my_bedrock_agentcore_runtime-rjGDHOAvjw
      agent_arn: arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my_bedrock_agentcore_runtime-rjGDHOAvjw
      agent_session_id: 86771a0b-c901-4ba4-9a17-9350739d1bf2
    codebuild:
      project_name: null
      execution_role: null
      source_bucket: null
    authorizer_configuration: null
    oauth_configuration: null
.dockerignore
# Build artifacts
build/
dist/
*.egg-info/
*.egg

# Python cache
__pycache__/
__pycache__*
*.py[cod]
*$py.class
*.so
.Python

# Virtual environments
.venv/
.env
venv/
env/
ENV/

# Testing
.pytest_cache/
.coverage
.coverage*
htmlcov/
.tox/
*.cover
.hypothesis/
.mypy_cache/
.ruff_cache/

# Development
*.log
*.bak
*.swp
*.swo
*~
.DS_Store

# IDEs
.vscode/
.idea/

# Version control
.git/
.gitignore
.gitattributes

# Documentation
docs/
*.md
!README.md

# CI/CD
.github/
.gitlab-ci.yml
.travis.yml

# Project specific
tests/

# Bedrock AgentCore specific - keep config but exclude runtime files
.bedrock_agentcore.yaml
.dockerignore

# Keep wheelhouse for offline installations
# wheelhouse/

agentcore launch -l コマンドでローカルで起動することを確認しておきます。

$ agentcore launch -l

Launching Bedrock AgentCore (local mode)...

Launching Bedrock AgentCore agent 'my_bedrock_agentcore_runtime' locally
✓ Docker image built: bedrock_agentcore-my_bedrock_agentcore_runtime:latest
✓ Ready to run locally
Starting server at http://localhost:8080
Press Ctrl+C to stop

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

では、agentcore launch コマンドで AWS にエージェントをデプロイしていきます。

agentcore launch

AWS にエージェントのデプロイが完了すると次の通り表示されました。後で AWS コンソールから作成されたリソースを確認してみますので一旦ここではエージェントが作成されたことだけ確認できれば OK です。

スクリーンショット 2025-07-28 19.45.48.png

agentcore invoke コマンドでエージェントの呼び出しをテストしておきます。

agentcore invoke '{"prompt": "Hello"}'

次の通りレスポンスが返されました。

スクリーンショット 2025-07-28 19.52.53.png

Agent の呼び出し

boto3 (bedrock-agentcore.invoke_agent_runtime)を使用してエージェントを呼び出してみます。

test_my_bedrock_agentcore_runtime.py
import boto3
import json

client = boto3.client('bedrock-agentcore', region_name="us-west-2")

input_payload = {
    "prompt": "how are you?"
}

try:
    response = client.invoke_agent_runtime(
        agentRuntimeArn="arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my_bedrock_agentcore_runtime-rjGDHOAvjw",
        qualifier="DEFAULT",
        payload=json.dumps(input_payload) 
    )
    
    print("Response metadata:", response['ResponseMetadata'])
    print("Runtime session ID:", response['runtimeSessionId'])
    
    streaming_body = response['response']
    response_data = streaming_body.read()
    
    response_text = response_data.decode('utf-8')
    print("Response content:", response_text)
    
except Exception as e:
    print(f"Error: {e}")

レスポンスの結果は以下の通りです。

スクリーンショット 2025-07-28 20.29.09.png

作成されたリソース

作成されたリソースを AWS コンソロールから確認してみます。

Amazon Bedrock AgentCore > Agent Runtime
スクリーンショット 2025-07-29 19.56.26.png

Amazon ECR > プライベートレジストリ > リポジトリ
スクリーンショット 2025-07-29 20.00.07.png

bedrock-agentcore-starter-toolkit を使わないパターン

本記事では、bedrock-agentcore-starter-toolkit を使うパターンで紹介してきましたが、以下のコンテナイメージを用意すれば、bedrock-agentcore-starter-toolkit を使わずにどんなフレームワークや言語でも、AWS の信頼性の高いインフラ上にデプロイ可能。

  • コンテナ要件
    • ホスト: 0.0.0.0
    • ポート: 8080
    • プラットフォーム: ARM64
  • パス要件
    • /invocations エージェントインタラクション用
    • /ping ヘルスチェック用

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?