Python Agent đến Cơ sở dữ liệu quan hệ
Trình tạo connection kết nối một Python Agent với dự án Python Relational Database, làm cho phiên cơ sở dữ liệu có sẵn bên trong các công cụ agent của bạn.
Điều kiện tiên quyết
Phần tiêu đề “Điều kiện tiên quyết”Trước khi sử dụng trình tạo này, hãy đảm bảo bạn có:
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy trình tạo
Phần tiêu đề “Chạy trình tạo”- Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
- Mở Nx Console trong VSCode
- Nhấp
Generate (UI)trong phần "Common Nx Commands" - Tìm kiếm
@aws/nx-plugin - connection - Điền các tham số bắt buộc
- Nhấp
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionBạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runChọ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 thành phần agent, hãy chỉ định sourceComponent để phân biệt.
Tùy chọn
Phần tiêu đề “Tùy chọn”| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
| sourceProject Bắt buộc | string | - | Dự án nguồn |
| targetProject Bắt buộc | string | - | 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 | boolean | true | Có 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. |
Đầu ra của trình tạo
Phần tiêu đề “Đầu ra của trình tạo”Thư mụcpackages/my_service
- project.json Thêm phụ thuộc từ
my_agent-devvào targetdevcủa cơ sở dữ liệu - pyproject.toml Thêm gói cơ sở dữ liệu làm phụ thuộc workspace
Thư mụcmy_service
Thư mụcmy_agent
- Dockerfile Thêm gói CA RDS được sử dụng cho các kết nối Aurora trực tiếp
- project.json Thêm phụ thuộc từ
Sử dụng cơ sở dữ liệu trong các công cụ Agent
Phần tiêu đề “Sử dụng cơ sở dữ liệu trong các công cụ Agent”Import session_context từ gói cơ sở dữ liệu của bạn và sử dụng nó bên trong các công cụ agent của bạn:
from sqlmodel import selectfrom my_scope.my_db import session_contextfrom my_scope.my_db.models.example import ExampleModelfrom strands import tool
@toolasync 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()]Cơ sở hạ tầng
Phần tiêu đề “Cơ sở hạ tầng”Construct agent được tạo triển khai IGrantable và IConnectable, vì vậy bạn có thể cấp quyền truy cập mạng và IAM cho cơ sở dữ liệu trực tiếp trên construct.
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 }, }),});
db.allowDefaultPortFrom(myAgent);db.grantConnect(myAgent);allowDefaultPortFrom mở quy tắc nhóm bảo mật để runtime agent có thể truy cập cổng cơ sở dữ liệu. grantConnect cấp quyền IAM rds-db:connect cho vai trò thực thi của agent.
Chạy agent bên trong cùng VPC với cơ sở dữ liệu, cấp cho nó rds-db:connect thông qua additional_iam_policy_statements, và mở đường dẫn mạng với một cặp quy tắc nhóm bảo mật:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = module.vpc.vpc_id database_subnet_ids = module.vpc.private_isolated_subnet_ids lambda_subnet_ids = module.vpc.private_subnet_ids}
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent" enable_vpc = true vpc_id = module.vpc.vpc_id subnet_ids = module.vpc.private_subnet_ids
appconfig_application_id = module.runtime_config_appconfig.application_id appconfig_application_arn = module.runtime_config_appconfig.application_arn
additional_iam_policy_statements = [ { Effect = "Allow" Action = ["rds-db:connect"] Resource = [ "arn:aws:rds-db:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.my_database.connect_resource_id}/${module.my_database.database_runtime_user}" ] } ]}
resource "aws_vpc_security_group_ingress_rule" "agent_to_database" { security_group_id = module.my_database.security_group_id referenced_security_group_id = module.my_agent.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}
resource "aws_vpc_security_group_egress_rule" "agent_to_database" { security_group_id = module.my_agent.security_group_id referenced_security_group_id = module.my_database.security_group_id from_port = module.my_database.cluster_port to_port = module.my_database.cluster_port ip_protocol = "tcp"}appconfig_application_id/appconfig_application_arn đến từ ứng dụng AppConfig cấu hình runtime được chia sẻ được khai báo một lần trong module gốc của bạn, không phải từ module cơ sở dữ liệu.
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 cụm Aurora (không có RDS Proxy), trình tạo kết nối cập nhật Dockerfile agent được tạo để cài đặt gói CA Amazon RDS vào kho lưu trữ tin cậy hệ thống:
ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crtRUN update-ca-certificatesKhi sử dụng RDS Proxy, bạn không cần cấu hình gói CA RDS trong runtime agent.
Phát triển cục bộ
Phần tiêu đề “Phát triển cục bộ”pnpm nx <agent-name>-dev <project-name>yarn nx <agent-name>-dev <project-name>npx nx <agent-name>-dev <project-name>bunx nx <agent-name>-dev <project-name>Điều này khởi động agent và tất cả các cơ sở dữ liệu được kết nối. Biến môi trường LOCAL_DEV=true khiến client cơ sở dữ liệu kết nối với cơ sở dữ liệu Docker cục bộ của nó thay vì Aurora.