콘텐츠로 이동

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

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

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

  1. py#agent 프로젝트
  2. py#rdb 프로젝트
Terminal window
pnpm nx g @aws/nx-plugin:connection
어떤 파일이 변경될지 확인하기 위해 드라이 런을 수행할 수도 있습니다
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

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 번들 추가

Agent 도구에서 데이터베이스 사용

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

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

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

섹션 제목: “RDS Proxy 없이 연결할 때의 SSL 요구 사항”

에이전트가 Aurora 클러스터에 직접 연결할 때(RDS Proxy 없이), 연결 생성기는 생성된 에이전트 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 데이터베이스에 연결하도록 합니다.