Salta ai contenuti

Python Agent a Database Relazionale

Il generatore connection collega un Python Agent a un progetto Python Relational Database, rendendo la sessione del database disponibile all’interno dei tool del tuo agent.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto py#agent
  2. Un progetto py#rdb
  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

    Seleziona il tuo progetto Agent come sorgente e il tuo progetto database relazionale come destinazione. Se il progetto contiene più componenti agent, specifica sourceComponent per disambiguare.

    ParametroTipoPredefinitoDescrizione
    sourceProject Obbligatoriostring-Il progetto sorgente
    targetProject Obbligatoriostring-Il progetto di destinazione a cui connettersi
    sourceComponent string-Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
    targetComponent string-Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.
    preferInstallDependencies booleantrueSe preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.
    • Directorypackages/my_service
      • project.json Aggiunge una dipendenza da my_agent-dev al target dev del database
      • pyproject.toml Aggiunge il pacchetto del database come dipendenza del workspace
      • Directorymy_service
        • Directorymy_agent
          • Dockerfile Aggiunge il bundle CA RDS utilizzato per le connessioni dirette ad Aurora

    Importa session_context dal tuo pacchetto del database e utilizzalo all’interno dei tool del tuo agent:

    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()]

    Il costrutto agent generato implementa IGrantable e IConnectable, quindi puoi concedere l’accesso di rete e IAM al database direttamente sul costrutto.

    packages/infra/src/stacks/application-stack.ts
    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 apre la regola del security group in modo che il runtime dell’agent possa raggiungere la porta del database. grantConnect concede il permesso IAM rds-db:connect al ruolo di esecuzione dell’agent.

    Quando l’agent si connette direttamente al cluster Aurora (senza RDS Proxy), il generatore di connessione aggiorna il Dockerfile dell’agent generato per installare il bundle CA Amazon RDS nel trust store di 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

    Quando si utilizza RDS Proxy, non è necessario configurare il bundle CA RDS nel runtime dell’agent.

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

    Questo avvia l’agent e tutti i database connessi. La variabile d’ambiente LOCAL_DEV=true fa sì che il client del database si connetta al suo database Docker locale invece che ad Aurora.