View a markdown version of this page

Python の直接コードデプロイ - Amazon Bedrock AgentCore

Python の直接コードデプロイ

直接コードデプロイを使用すると、エージェントコードとその依存関係を .zip ファイルアーカイブにパッケージ化するだけで、Python ベースのエージェントを Amazon Bedrock AgentCore Runtime に持ち込むことができます。エージェントは引き続き AgentCore ランタイム要件に従う必要があります。エントリポイントの .py ファイルがあり、Amazon Bedrock AgentCore Python SDK @app.entrypoint注釈を使用するか、POST および /ping GET /invocations サーバーエンドポイントを実装します。

前提条件

開始する前に、以下があることを確認してください。

ステップ 1: プロジェクトをセットアップし、依存関係をインストールする

次のコマンドを使用してプロジェクトを初期化します。

uv init agentcore_runtime_direct_deploy --python 3.13 cd agentcore_runtime_direct_deploy

コアパッケージを追加します。

uv add bedrock-agentcore strands-agents

AgentCore CLI をインストールします (以下の手順で必要)。

npm install -g @aws/agentcore

パッケージの説明:

  • bedrock-agentcore - AI エージェントを構築するための Amazon Bedrock AgentCore SDK

  • ストランドエージェント - ストランドエージェント SDK

  • @aws/agentcore - AgentCore CLI

必要に応じて、 uv add aws-opentelemetry-distro を実行して Amazon Bedrock AgentCore オブザーバビリティトレースを有効にします。

Uv は、依存関係を持つpyproject.tomlファイル、依存関係クロージャを持つuv.lockファイル、.venvディレクトリを自動的に作成します。

ステップ 2: エージェントプロジェクトを作成する

agentcore create コマンドを使用して、選択したフレームワークでスケルトンエージェントプロジェクトを設定します。

agentcore create

コマンドは、次のプロンプトを表示します。

  • フレームワークを選択する (このチュートリアルでは Strands エージェントを選択する)

  • プロジェクト名を指定する

  • テンプレートを選択する (基本または本番)

  • モデルプロバイダーとその他のオプションを選択する

このコマンドは以下を生成します。

  • 選択したフレームワークを持つエージェントコード

  • 必要な依存関係を持つpyproject.tomlファイル

  • agentcore/agentcore.json 設定ファイル

  • 本番稼働用テンプレートが選択されている場合のコードとしてのインフラストラクチャ (IaC) ファイル

ステップ 3: ローカルでテストする

開始する前に、ポート 8080 が空いていることを確認してください。一般的な問題と解決策「使用中のポート 8080 (ローカルのみ)」を参照してください。

ターミナルウィンドウを開き、次のコマンドを使用してエージェントを起動します。

agentcore dev --no-browser

別のターミナルウィンドウを開き、次のコマンドを入力します。

curl -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{"prompt": "Hello!"}'

成功: のようなレスポンスが表示されます{"result": "Hello! I’m here to help…​"}。エージェントを実行しているターミナルウィンドウで、 と入力Ctrl+Cしてエージェントを停止します。

ステップ 4: エージェントのオブザーバビリティを有効にする

Amazon Bedrock AgentCore オブザーバビリティは、AgentCore ランタイムでホストするエージェントをトレース、デバッグ、モニタリングするのに役立ちます。まず、「Amazon Bedrock AgentCore ランタイムオブザーバビリティを有効にする」の手順に従って CloudWatch トランザクション検索を有効にします。エージェントを監視するには、「Amazon Bedrock AgentCore エージェントのオブザーバビリティデータを表示する」を参照してください。

ステップ 5: AgentCore ランタイムにデプロイして呼び出す

次のいずれかの方法を使用してエージェントをデプロイします。

AgentCore CLI
  1. エージェントを AgentCore ランタイムにデプロイするには、次のステップが必要です。詳細については、AgentCore CLI の開始方法」を参照してください。Uv が利用可能な場合、AgentCore CLI は直接コードデプロイを推奨します。それ以外の場合は、デフォルトでコンテナデプロイタイプになります。

    を使用してエージェントを設定したら、 deploy コマンドを使用して zip agentcore create デプロイパッケージを作成し、指定したバケットにアップロードして、エージェントをデプロイします。

    agentcore deploy

    エージェントに joke を伝えるよう促しましょう。

    agentcore invoke "Tell me a joke"

    最初のデプロイでは依存関係のインストールに時間がかかりますが、エージェントに対するそれ以降の更新では、圧縮された依存関係を再利用することで最適化されます。

    設定管理

    agentcore add コマンドを使用するか、設定ファイルを直接編集することで、エージェントagentcore/agentcore.json設定を変更できます。

    設定ファイルを使用すると、VPC 設定、実行ロール、セッションタイムアウト、OAuth オーソライザー設定などのデプロイパラメータを更新できます。

Interactive
  1. agentcore を実行して TUI を開き、 のデプロイを選択します。デプロイ画面には、プロジェクトの検証、CloudFormation の合成、 AWS リソースのプロビジョニングを行う際のリアルタイムの進行状況が表示されます。

    CloudFormation スタックの更新を示す AgentCore デプロイの進行状況

    デプロイが完了したら、 agentcore invoke を使用してエージェントをテストします。

Custom zip + boto3
  1. AgentCore Runtime と互換性のあるホイールをダウンロードするには、uv pip --python-platformオプションを使用します。AgentCore ランタイムは arm64 命令セットアーキテクチャのみをサポートします。次のコマンドを実行します。--python 3.x を、使用している Python ランタイムのバージョンに置き換えます。

    uv pip install \ --python-platform aarch64-manylinux2014 \ --python-version 3.13 \ --target=deployment_package \ --only-binary=:all: \ -r pyproject.toml

    プロジェクトルートにインストールされたライブラリを含む .zip ファイルを作成します。

    cd deployment_package zip -r ../deployment_package.zip .

    パッケージ内の main.py ファイルやその他のファイルを .zip ファイルのルートに追加します。

    cd .. zip deployment_package.zip main.py

    .zip デプロイパッケージを作成したら、それを使用して新しい AgentCore ランタイムを作成したり、既存のものを更新したりできます。AgentCore Runtime API、AgentCore Runtime コンソール、および コマンドラインインターフェイスを使用して、.zip AWS パッケージをデプロイできます。AgentCore CLI は、上記のステップに従って .zip を作成します。

    注記

    。 AgentCore Runtime の .zip デプロイパッケージの最大サイズは、250 MB (圧縮) と 750 MB (解凍) です。この制限は、アップロードするすべてのファイルの合計サイズに適用されることに注意してください。AgentCore ランタイムには、デプロイパッケージ内のファイルを読み取るためのアクセス許可が必要です。Linux アクセス許可の 8 進表記では、AgentCore Runtime には、非実行可能ファイル (rw-r—r--) には 644 個のアクセス許可が必要であり、ディレクトリと実行可能ファイルには 755 個のアクセス許可 (rwxr-xr-x) が必要です。Linux と MacOS で、デプロイパッケージ内のファイルやディレクトリのファイルアクセス権限を変更するには、chmod コマンドを使用します。たとえば、実行可能でないファイルに正しいアクセス許可を付与するには、次のコマンド chmod 644 <filepath> を実行します。Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「Set, View, Change, or Remove Permissions on an Object」を参照してください。+ .。 AgentCore Runtime にデプロイパッケージ内のディレクトリにアクセスするために必要なアクセス許可を付与しない場合、AgentCore Runtime はそれらのディレクトリのアクセス許可を 755 (rwxr-xr-x) に設定します。

    Linux arm64 依存関係を含む ZIP アーカイブは、エージェントランタイムを作成する前提条件として S3 にアップロードする必要があります。次のコードでは、指定された S3 バケットがすでに存在している必要があります。boto3 を使用して バケットを作成するには、こちらの AWS ドキュメントに従ってください。boto3 コードに従うと、.zip ファイルアーカイブが s3 にアップロードされ、Amazon Bedrock AgentCore ランタイムが作成されます。

    import boto3 account_id = "your aws account id" agent_name = "strands_10_23" s3_client = boto3.client('s3', region_name='us-west-2') print("Uploading deployment.zip to S3...") s3_client.upload_file( 'deployment_package.zip', # archive on file system f"bedrock-agentcore-code-{account_id}-us-west-2", # bucket name f"{agent_name}/deployment_package.zip", # prefix ExtraArgs={'ExpectedBucketOwner': account_id} # ownership check ) print("Upload completed successfully!") print(f"S3 Location: s3://bedrock-agentcore-code-{account_id}-us-west-2/{agent_name}/deployment_package.zip") agentcore_client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') response = agentcore_client.create_agent_runtime( agentRuntimeName=agent_name, agentRuntimeArtifact={ 'codeConfiguration': { 'code': { 's3': { 'bucket': f"bedrock-agentcore-code-{account_id}-us-west-2", 'prefix': f"{agent_name}/deployment_package.zip" } }, 'runtime': 'PYTHON_3_13', 'entryPoint': ['opentelemetry-instrument', 'main.py'] } # if not adding otel dependency, remove opentelemetry-instrument from entrypoint array }, networkConfiguration={"networkMode": "PUBLIC"}, roleArn=f"arn:aws:iam::{account_id}:role/AmazonBedrockAgentCoreSDKRuntime-us-west-2", lifecycleConfiguration={ 'idleRuntimeSessionTimeout': 300, # 5 min, configurable 'maxLifetime': 1800 # 30 minutes, configurable }, ) print(f"Agent Runtime created successfully!") print(f"Agent Runtime ARN: {response['agentRuntimeArn']}") print(f"Status: {response['status']}")

    プログラムによるエージェントの呼び出しの詳細については、「プログラムによるエージェントの呼び出し」を参照してください。

console
  1. マネージドランタイムサポートを備えた Amazon Bedrock AgentCore コンソールを使用してエージェントをデプロイできます。コンソールには、ZIP ファイルをアップロードし、エージェント設定を構成するための直感的なインターフェイスが用意されています。

    コンソールを使用してデプロイするには、まず上記のカスタム zip + boto3 タブの手順に従ってデプロイパッケージを作成します。

    コンソールを使用してエージェントを作成する

    エージェントを作成するには:

  2. エージェントホームページから、ホストエージェントを選択します。

  3. ソースの選択を選択します。

    • S3 ソース - S3 バケットからのアップロード

    • ローカルアップロード - コンピュータから ZIP ファイルをアップロードする

    • テンプレート - 構築済みのエージェントテンプレートを使用する

  4. エージェント設定を構成します。

    • エージェント名

    • ランタイムバージョン (Python 3.13 を推奨)

    • エントリポイント (例: main.py )

    • 実行ロール (新規作成または既存使用)

  5. デプロイするエージェントの作成を選択する

    エンドポイントの作成

    エンドポイントの作成を選択して、エージェントの新しいエンドポイントを作成します。エンドポイント名と関連するバージョンが事前に入力されます。

    テストエンドポイント

    エンドポイントを選択し、テストエンドポイントを選択して、テスト用のプレイグラウンド/サンドボックスに移動します。

    実行ロールの要件

    エージェントには、適切なアクセス許可を持つ実行ロールが必要です。実行ロールとアクセス許可の詳細については、AgentCore ランタイムアクセス許可」を参照してください。実行ロールには、基本的な Amazon Bedrock AgentCore ランタイムアクセス許可、デプロイパッケージの S3 アクセス許可、およびオブザーバビリティのための CloudWatch Logs アクセス許可を含める必要があります。

ステップ 6: セッションを停止、更新、またはクリーンアップする

次のいずれかの方法を使用して、ランタイムセッションを停止、エージェントを更新、またはクリーンアップします。

AgentCore CLI
  1. 以前にデプロイされた AgentCore ランタイムを更新するには、以下を実行します。

    agentcore deploy

    設定可能な IdleRuntimeSessionTimeout (デフォルトは 15 分) 前に実行中のセッションを停止し、潜在的なランアウェイコストを節約するには、StopRuntimeSession API オペレーションを使用します。AgentCore CLI は現在、セッションの直接停止をサポートしていません。

    AgentCore ランタイムに関連するすべてのリソースを削除するには、まずすべてのリソースを削除し、次にデプロイして AWS リソースを破棄します。

    agentcore remove all agentcore deploy
boto3
  1. boto3 コードに従うと、AgentCore ランタイムが更新されます。

    import boto3 account_id = "your aws account id" agent_name = "strands_10_23" s3_client = boto3.client('s3', region_name='us-west-2') print("Uploading deployment.zip to S3...") s3_client.upload_file( 'deployment_package.zip', # archive on file system f"bedrock-agentcore-code-{account_id}-us-west-2", # bucket name f"{agent_name}/deployment_package.zip", # prefix ExtraArgs={'ExpectedBucketOwner': account_id} # ownership check ) print("Upload completed successfully!") print(f"S3 Location: s3://bedrock-agentcore-code-{account_id}-us-west-2/{agent_name}/deployment_package.zip") bedrock_agentcore_client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') response = bedrock_agentcore_client.update_agent_runtime( agentRuntimeId='<your-agent-id>', agentRuntimeArtifact={ 'codeConfiguration': { 'code': { 's3': { 'bucket': f"bedrock-agentcore-code-{account_id}-us-west-2", 'prefix': f"{agent_name}/deployment_package.zip" } }, 'runtime': 'PYTHON_3_13', 'entryPoint': ['opentelemetry-instrument', 'main.py'] } # if not adding otel dependency, remove opentelemetry-instrument from entrypoint array }, networkConfiguration={"networkMode": "PUBLIC"}, roleArn=f"arn:aws:iam::{account_id}:role/AmazonBedrockAgentCoreSDKRuntime-us-west-2" ) print(f"Agent Runtime updated successfully!") print(f"Agent Runtime ARN: {response['agentRuntimeArn']}") print(f"Status: {response['status']}")

    設定可能な IdleRuntimeSessionTimeout (デフォルトは 15 分) より前に実行中のセッションを停止し、潜在的なランアウェイコストを節約するには、次の boto3 コードを使用します。

    import boto3 agent_core_client = boto3.client('bedrock-agentcore', region_name='us-west-2') response = agent_core_client.stop_runtime_session( agentRuntimeArn='arn:aws:bedrock-agentcore:us-west-2:account-id:runtime/agent-name-suffix', runtimeSessionId='your-session-id', qualifier="DEFAULT" )

    boto3 コードに従うと、Amazon Bedrock AgentCore ランタイムと .zip アーカイブファイルが s3 で削除されます。

    import boto3 account_id = "your aws account id" agent_name = "strands_10_23" bedrock_agentcore_client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') print("Deleting Agent from Amazon Bedrock AgentCore Runtime!") response = bedrock_agentcore_client.delete_agent_runtime( agentRuntimeId='<agent-id>' ) print(f"Agent Runtime delete successfully!") print(f"Status: {response['status']}") s3_client = boto3.client('s3', region_name='us-west-2') print("Deleting deployment archive from S3...") s3_client.delete_object( Bucket=f"bedrock-agentcore-code-{account_id}-us-west-2", Key=f"{agent_name}/deployment_package.zip", ExpectedBucketOwner=account_id ) print("Archive deleted successfully from S3!")
console
  1. ====== エージェントを更新する

    エージェントの詳細ページで、ホスティングの更新を選択して、更新されたコードまたは設定で新しいバージョンを作成します。

    エンドポイントの更新

    Endpoints テーブルからエンドポイントを選択し、Edit を選択して説明または関連バージョンを更新します。

    エンドポイントを削除する

    エンドポイントを選択し、「削除」を選択します。削除を確認するには、「削除」と入力する必要があります。

    エージェントを削除する

    エージェントリストまたは詳細ページから、エージェントを選択し、削除を選択してエージェントと関連するすべてのリソースを削除します。

直接コードデプロイのための Python 固有の概念

Amazon Bedrock AgentCore ランタイムで直接コードデプロイを使用する場合の Python 固有の概念について説明します。

トピック

    コードで import ステートメントを使用すると、Python ランタイムはモジュールまたはパッケージが見つかるまで検索パス内のディレクトリを検索します。デフォルトでは、ランタイムが検索する最初の場所は、.zip デプロイパッケージが解凍およびマウントされるディレクトリです (/var/task)。

    次のコードスニペットを追加することで、AgentCore Runtime エージェントの完全な検索パスを確認できます。

    import sys search_path = sys.path print(search_path)

    .zip パッケージ内の個別のフォルダに依存関係を追加することもできます。たとえば、Boto3 SDK のバージョンを common という .zip パッケージのフォルダに追加できます。.zip パッケージを解凍してマウントすると、このフォルダは /var/task ディレクトリ内に配置されます。コード内の .zip デプロイパッケージ内のフォルダの依存関係を使用するには、import from ステートメントを使用します。たとえば、.zip パッケージ内の common という名前のフォルダにある Boto3 のバージョンを使用するには、次のステートメントを使用します。

    from common import boto3

    エージェントのデプロイパッケージに pycache フォルダを含めないことをお勧めします。アーキテクチャやオペレーティングシステムが異なるビルドマシンでコンパイルされた Python バイトコードは、AgentCore ランタイム実行環境と互換性がない可能性があります。

    関数で、純粋な Python パッケージとモジュールのみを使用する場合は、uv pip install コマンドを使用して任意のローカルビルドマシンに依存関係をインストールし、.zip ファイルを作成できます。NumPy や Pandas を含む多くの一般的な Python ライブラリは純粋な Python ではなく、C または C で記述されたコードが含まれています。C/C コードを含むライブラリをデプロイパッケージに追加するときは、パッケージを正しく構築して AgentCore ランタイム実行環境と互換性を持たせる必要があります。

    Python パッケージインデックス ( PyPI ) で利用可能なほとんどのパッケージは、「wheels」 (.whl ファイル) として利用できます。.whl ファイルは、特定のオペレーティングシステムと命令セットアーキテクチャ用にプリコンパイルされたバイナリ、およびビルド済みディストリビューションを含む ZIP ファイルの一種です。デプロイパッケージを Amazon Bedrock AgentCore AgentCore Runtime と互換性を持たせるには、Linux オペレーティングシステム用のホイールと arm64 命令セットアーキテクチャをインストールします。

    一部のパッケージには、ソースディストリビューションとしてしか利用できないものもあります。これらのパッケージでは、C/C++ コンポーネントを自分でコンパイルして構築する必要があります。

    必要なパッケージで利用できるディストリビューションを確認するには、以下を実行します。

    1. Python Package インデックスのメインページでパッケージの名前を検索します。

    2. 使用するパッケージのバージョンを選択します。

    3. [ファイルをダウンロード] を選択します。

    パッケージをソースディストリビューションとしてしか入手できない場合は、C/C++ ライブラリを自分で構築する必要があります。パッケージを Amazon Bedrock AgentCore AgentCore Runtime 実行環境と互換性を持たせるには、arm64 命令セットを持つ同じ Amazon Linux オペレーティングシステムを使用する環境でパッケージを構築する必要があります。これは、Amazon Elastic Compute Cloud (Amazon EC2) の Linux インスタンス内でパッケージを構築することで実現できます。

    Amazon EC2 Linux インスタンスを起動して接続する方法の詳細については、「Amazon EC2 ユーザーガイド」の「Amazon EC2 の開始方法」を参照してください。