콘텐츠로 이동

Python Agent에서 관계형 데이터베이스로

connection 생성기는 Python AgentPython 관계형 데이터베이스 프로젝트에 연결하여 에이전트 도구 내에서 데이터베이스 세션을 사용할 수 있도록 합니다.

이 생성기를 사용하기 전에 다음이 필요합니다:

  1. py#agent 프로젝트
  2. py#rdb 프로젝트
  1. 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
  2. VSCode에서 Nx 콘솔 열기
  3. 클릭 Generate (UI) "Common Nx Commands" 섹션에서
  4. 검색 @aws/nx-plugin - connection
  5. 필수 매개변수 입력
    • 클릭 Generate

    Agent 프로젝트를 소스로, 관계형 데이터베이스 프로젝트를 타겟으로 선택합니다. 프로젝트에 여러 에이전트 컴포넌트가 포함된 경우 sourceComponent를 지정하여 명확히 구분합니다.

    매개변수타입기본값설명
    sourceProject 필수string-소스 프로젝트
    targetProject 필수string-연결할 대상 프로젝트
    sourceComponent string-연결을 시작할 소스 컴포넌트 (컴포넌트 이름, 소스 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 소스로 명시적으로 선택하려면 '.'을 사용하세요.
    targetComponent string-연결할 대상 컴포넌트 (컴포넌트 이름, 대상 프로젝트 루트 기준 상대 경로, 또는 generator id). 프로젝트를 대상으로 명시적으로 선택하려면 '.'을 사용하세요.
    preferInstallDependencies booleantrue생성기 실행 후 의존성 설치를 선호할지 여부입니다. 여러 생성기를 일괄 처리할 때 설치를 연기하려면 false로 설정하세요 (후속 생성기가 Nx 프로젝트 그래프를 계산할 수 있도록 필요한 경우 설치는 여전히 실행됩니다); 마지막에 한 번만 설치합니다.
    • 디렉터리packages/my_service
      • project.json my_agent-dev에서 데이터베이스의 dev 타겟에 대한 종속성 추가
      • pyproject.toml 데이터베이스 패키지를 워크스페이스 종속성으로 추가
      • 디렉터리my_service
        • 디렉터리my_agent
          • Dockerfile 직접 Aurora 연결에 사용되는 RDS CA 번들 추가

    에이전트 도구에서 데이터베이스 사용

    섹션 제목: “에이전트 도구에서 데이터베이스 사용”

    데이터베이스 패키지에서 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:
    return [item.model_dump() for item in (await session.execute(select(ExampleModel))).all()]

    생성된 에이전트 구성은 IGrantableIConnectable을 구현하므로 구성에서 직접 데이터베이스에 대한 네트워크 및 IAM 액세스 권한을 부여할 수 있습니다.

    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은 에이전트 런타임이 데이터베이스 포트에 도달할 수 있도록 보안 그룹 규칙을 엽니다. grantConnect는 에이전트의 실행 역할에 IAM rds-db:connect 권한을 부여합니다.

    RDS Proxy 없이 연결할 때의 SSL 요구 사항

    섹션 제목: “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 데이터베이스에 연결하도록 합니다.