Bỏ qua để đến nội dung

Python Agent đến Cơ sở dữ liệu Quan hệ

Generator connection kết nối một Python Agent với một dự án Python Relational Database, làm cho database session có sẵn bên trong các agent tools của bạn.

Trước khi sử dụng generator này, hãy đảm bảo bạn có:

  1. Một dự án py#agent
  2. Một dự án py#rdb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Bạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Chọn dự án Agent của bạn làm nguồn và dự án cơ sở dữ liệu quan hệ của bạn làm đích. Nếu dự án chứa nhiều agent components, hãy chỉ định sourceComponent để phân biệt.

Tham sốKiểuMặc địnhMô tả
sourceProject Bắt buộcstring-Dự án nguồn
targetProject Bắt buộcstring-Dự án đích để kết nối tới
sourceComponent string-Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
targetComponent string-Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.
preferInstallDependencies booleantrueCó nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.
  • Thư mụcpackages/my_service
    • project.json Thêm một dependency từ my_agent-dev vào target dev của database
    • pyproject.toml Thêm database package như một workspace dependency
    • Thư mụcmy_service
      • Thư mụcmy_agent
        • Dockerfile Thêm RDS CA bundle được sử dụng cho các kết nối Aurora trực tiếp

Import session_context từ database package của bạn và sử dụng nó bên trong các agent tools của bạn:

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:
return [item.model_dump() for item in (await session.execute(select(ExampleModel))).all()]

Agent construct được tạo ra triển khai IGrantableIConnectable, vì vậy bạn có thể cấp quyền truy cập mạng và IAM cho database trực tiếp trên construct.

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 mở quy tắc security group để agent runtime có thể truy cập cổng database. grantConnect cấp quyền IAM rds-db:connect cho execution role của agent.

Yêu cầu SSL khi Kết nối Không có RDS Proxy

Phần tiêu đề “Yêu cầu SSL khi Kết nối Không có RDS Proxy”

Khi agent kết nối trực tiếp với Aurora cluster (không có RDS Proxy), connection generator cập nhật Dockerfile của agent được tạo ra để cài đặt Amazon RDS CA bundle vào system trust store:

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

Khi sử dụng RDS Proxy, bạn không cần cấu hình RDS CA bundle trong agent runtime.

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

Điều này khởi động agent và tất cả các databases được kết nối. Biến môi trường LOCAL_DEV=true khiến database client kết nối với local Docker database thay vì Aurora.