Pular para o conteúdo

Python Agent para Banco de Dados Relacional

O gerador connection conecta um Python Agent a um projeto de Python Relational Database, tornando a sessão do banco de dados disponível dentro das ferramentas do seu agente.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto py#agent
  2. Um projeto py#rdb

Execute este gerador@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
Monte seu comando5

Obrigatório

Obrigatório

Selecione seu projeto Agent como origem e seu projeto de banco de dados relacional como destino. Se o projeto contiver múltiplos componentes de agente, especifique sourceComponent para desambiguar.

Opções do gerador5 opções
sourceProjectObrigatóriostring

O projeto de origem

targetProjectObrigatóriostring

O projeto de destino para conectar

sourceComponentstring

O componente de origem a partir do qual conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.

targetComponentstring

O componente de destino ao qual conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.

preferInstallDependenciesbooleanPadrão: true

Se deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

  • Directorypackages/my_service
    • project.json Adiciona uma dependência de my_agent-dev no target dev do banco de dados
    • pyproject.toml Adiciona o pacote do banco de dados como uma dependência do workspace
    • Directorymy_service
      • Directorymy_agent
        • Dockerfile Adiciona o pacote CA do RDS usado para conexões diretas ao Aurora (somente quando o infra do agente é agentcore-ecr)

Importe session_context do seu pacote de banco de dados e use-o dentro das ferramentas do seu agente:

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]

O construto do agente gerado implementa IGrantable e IConnectable, então você pode conceder acesso de rede e IAM ao banco de dados diretamente no construto.

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 abre a regra do grupo de segurança para que o runtime do agente possa alcançar a porta do banco de dados. grantConnect concede permissão IAM rds-db:connect ao papel de execução do agente.

Quando o agente se conecta diretamente ao cluster Aurora (sem RDS Proxy), o gerador de conexão atualiza o Dockerfile do agente gerado para instalar o pacote CA do Amazon RDS no armazenamento de confiança do sistema:

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

Ao usar RDS Proxy, você não precisa configurar o pacote CA do RDS no runtime do agente.

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

Isso inicia o agente e todos os bancos de dados conectados. A variável de ambiente LOCAL_DEV=true faz com que o cliente do banco de dados se conecte ao seu banco de dados Docker local em vez do Aurora.