Skip to content

Python Agent からリレーショナルデータベースへの接続

connection ジェネレーターは、Python AgentPython Relational Database プロジェクトに接続し、エージェントツール内でデータベースセッションを利用できるようにします。

このジェネレーターを使用する前に、以下を確認してください:

  1. py#agent プロジェクト
  2. py#rdb プロジェクト

このジェネレーターを実行@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
コマンドを組み立てる5

必須

必須

Agent プロジェクトをソースとして、リレーショナルデータベースプロジェクトをターゲットとして選択します。プロジェクトに複数のエージェントコンポーネントが含まれている場合は、sourceComponent を指定して明確にします。

ジェネレーターオプション5 オプション
sourceProject必須string

ソース プロジェクト

targetProject必須string

接続先のターゲット プロジェクト

sourceComponentstring

接続元のソースコンポーネント(コンポーネント名、ソースプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。

targetComponentstring

接続先のターゲットコンポーネント(コンポーネント名、ターゲットプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。

preferInstallDependenciesbooleanデフォルト: true

ジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

  • Directorypackages/my_service
    • project.json my_agent-dev からデータベースの dev ターゲットへの依存関係を追加
    • pyproject.toml データベースパッケージをワークスペース依存関係として追加
    • Directorymy_service
      • Directorymy_agent
        • Dockerfile 直接 Aurora 接続に使用される RDS CA バンドルを追加(エージェントの infraagentcore-ecr の場合のみ)

エージェントツールでのデータベースの使用

Section titled “エージェントツールでのデータベースの使用”

データベースパッケージから session_context をインポートし、エージェントツール内で使用します:

packages/my_service/my_service/my_agent/agent.py
from sqlmodel import select
from my_scope_my_db import session_context
from my_scope_my_db.models.example import ExampleModel
from strands import tool
@tool
async def list_examples() -> list:
"""List all example records."""
async with session_context() as session:
items = (await session.execute(select(ExampleModel))).scalars().all()
return [item.model_dump() for item in items]

生成されたエージェント構成は IGrantableIConnectable を実装しているため、構成に対して直接データベースへのネットワークおよび IAM アクセスを許可できます。

packages/infra/src/stacks/application-stack.ts
import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';
import { MyDatabase } from '@my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });
const myAgent = new MyAgent(this, 'MyAgent', {
networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, {
vpc,
vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS },
securityGroups: [
new SecurityGroup(this, 'MyAgentSecurityGroup', { vpc, allowAllOutbound: true }),
],
}),
});
db.allowDefaultPortFrom(myAgent);
db.grantConnect(myAgent);

allowDefaultPortFrom はセキュリティグループルールを開き、エージェントランタイムがデータベースポートに到達できるようにします。grantConnect はエージェントの実行ロールに IAM rds-db:connect 権限を付与します。

RDS Proxy を使用せずに接続する場合の SSL 要件

Section titled “RDS Proxy を使用せずに接続する場合の SSL 要件”

エージェントが(RDS Proxy を使用せずに)Aurora クラスターに直接接続する場合、接続ジェネレーターは生成されたエージェント Dockerfile を更新して、Amazon RDS CA バンドルをシステムトラストストアにインストールします:

ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crt
RUN update-ca-certificates

RDS Proxy を使用する場合、エージェントランタイムで RDS CA バンドルを設定する必要はありません。

Terminal window
pnpm nx <agent-name>-dev <project-name>

これにより、エージェントと接続されているすべてのデータベースが起動します。LOCAL_DEV=true 環境変数により、データベースクライアントは Aurora ではなくローカルの Docker データベースに接続します。