View a markdown version of this page

Amazon Bedrock AgentCore 런타임 V2에 맞게 에이전트 최적화 - Amazon Bedrock AgentCore

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Bedrock AgentCore 런타임 V2에 맞게 에이전트 최적화

Amazon Bedrock AgentCore 런타임 V2는 스냅샷을 복원하여 에이전트를 시작합니다. 이렇게 하면 에이전트 코드의 구조가 변경됩니다. 시작 시 에이전트가 수행하는 작업은 스냅샷에 캡처되고 복원된 모든 인스턴스에서 공유됩니다. 대신 요청 핸들러에서 요청마다 달라야 하거나 만료될 수 있는 값을 생성합니다. 이 주제에서는 각 복원 후 올바르게 유지되도록 시작 작업 및 요청당 작업을 중심으로 에이전트를 구성하는 방법을 설명합니다. 플랫폼 버전 V2에 대한 개요는 플랫폼 버전을 참조하세요.

에이전트에는 두 가지 실행 컨텍스트가 있습니다.

스타트업 폴더

AgentCore 런타임이 스냅샷을 생성하기 전에 프로세스가 시작될 때 한 번 실행되는 코드입니다. AgentCore 런타임은 스냅샷에서이 코드를 캡처하고 모든 인스턴스는 결과를 상속합니다.

요청 처리

/invocations 핸들러의 코드입니다. 이 코드는 모든 인스턴스의 모든 요청에서 실행됩니다.

하나의 규칙을 사용하여 코드가 속한 위치를 결정합니다. 스냅샷 수명 동안 동일하게 유지되는 경우 시작 시 값을 계산합니다. 요청에 따라 다르거나 만료될 수 있는 경우 핸들러에서 계산합니다. AgentCore 런타임은 에이전트 버전당 스냅샷 하나를 생성하여 에이전트를 생성하거나 업데이트할 때까지 사용합니다. 따라서 스냅샷 수명은 해당 버전의 수명입니다.

시작 시 한 번 초기화

스냅샷 전에 프로세스가 시작될 때 비용이 많이 들고 재사용 가능한 작업을 수행합니다. 예를 들어 배포 번들에서 종속성을 가져오거나, 모델 가중치를 로드하거나, 정적 구성을 읽습니다. AgentCore SDK를 사용하여를 호출하기 전에 모듈 범위에서이 작업을 수행합니다app.run(). 에이전트는가 app.run() 실행될 때까지 포트 8080에서 수신 대기하지 않으므로 시작 작업이 완료될 때까지 성공할 /ping 수 없고 스냅샷을 생성할 수 없습니다. 스냅샷은 완전히 초기화된 에이전트를 구성별로 캡처하므로를 게이트할 필요가 없습니다/ping. 시작 후 120초 이내에 초기화를 완료합니다. 에이전트가 제시간에 정상 상태가 되지 않으면 런타임은 상태 확인에 실패합니다. /ping 및 /invocations 엔드포인트에 대한 자세한 내용은 AgentCore 런타임 서비스 계약 이해를 참조하세요.

import json, pathlib from bedrock_agentcore.runtime import BedrockAgentCoreApp # Runs once at import, before app.run() starts the server and before the # snapshot. Every restored instance inherits these objects. MODEL = load_model_weights() SETTINGS = json.loads((pathlib.Path(__file__).parent / "agent.json").read_text()) app = BedrockAgentCoreApp() @app.entrypoint def invoke(payload): # Per-request work runs here on every instance. ... app.run() # starts listening on 8080; the snapshot is taken after this

에이전트가 AgentCore SDK 대신 자체 HTTP 서버를 실행하는 경우 스냅샷이 완전히 초기화된 에이전트를 캡처하도록 초기화가 완료된 후에/ping만에서 정상 상태를 보고합니다.

시작 시 모든 인스턴스에 대해 동일하고 만료되지 않는 읽기 전용 데이터입니다. 핸들러에서 수명이 짧은 자격 증명과 같은 시간에 민감한 값을 처리합니다.

참고

다시 배포하지 않고는 시작 시 변경한 내용을 계산하지 마십시오. 예를 들어 AgentCore Gateway에서 가져온 도구 카탈로그는 로드 속도가 느리고 비용이 많이 들기 때문에 이상적인 시작 값처럼 보이지만 시작 시 캐싱하면 스냅샷 시점에 에이전트의 도구 인벤토리가 고정됩니다.

요청당 상태를 새로 유지

스냅샷은 한 번 캡처되고 복원된 모든 인스턴스에서 공유되므로 시작 시 에이전트가 생성하는 모든 값은 인스턴스 간에 동일하며 스냅샷 시점에 고정됩니다. 스냅샷이 핸들러에 포함할 수 없는 값을 /invocations 처리합니다. 다음 표에서는 시작 시 대신 핸들러에서 계산할 값을 설명합니다.

목적 핸들러에서 수행 이유

무작위 값, 식별자 또는 토큰 생성

각 요청에서 secrets, 또는 os.urandom()uuid.uuid4()를 호출합니다.

os.urandom()는 복원 후 호출할 때마다 새 엔트로피만 반환합니다. 시작 시 읽은 값은 스냅샷에 복사되며 모든 인스턴스에서 동일하지만 엔트로피 소스는 읽을 때 양호했습니다. random 마찬가지로 모듈은 시작 시 시드되므로 복원된 인스턴스는 동일한 시퀀스를 반복합니다.

현재 시간 읽기

각 요청에 대해 계산

시작 시 캡처된 타임스탬프는 스냅샷 시점에 고정됩니다.

경과 시간 측정

핸들러에서 참조 타임스탬프 가져오기

time.monotonic()는 복원을 진행하지 않으므로 시작 참조에서 측정된 지속 시간이 잘못된 것으로 보이지 않습니다.

자격 증명 또는 토큰 사용

만료 시 새로 고침

시작 시 로드된 자격 증명은 인스턴스가 시작되기 전에 만료될 수 있습니다.

인스턴스 또는 작업자 식별

요청당 ID 생성, 호스트에서 파생하지 않음

복원된 모든 인스턴스는 동일한 호스트 이름(localhost)과 PID(1)를 보고하므로 ID로를 사용하면 플릿 전체에서 지표, 로그 스트림 및 잠금 소유자가 축소됩니다.

시작 시 재사용 가능한 클라이언트를 구축하고 각 호출에서 요청당 값을 계산합니다.

import os, time # Build reusable clients at startup, before the snapshot. Exercise them here too # (for example, with a warm-up call) so the setup the client caches — endpoint and # credential resolution, connection pool — is captured in the snapshot. client = build_client() warm_up(client) @app.entrypoint def invoke(payload): creds = get_credentials() # refreshed when expired, not read at startup request_id = os.urandom(16).hex() # unique per request now = time.time() # current time, not snapshot time # Handle the request.

스냅샷 보호 암호화 라이브러리 사용

AgentCore 런타임이 스냅샷에서 인스턴스를 복원할 때 시작 시 임의 상태를 캐싱한 암호화 라이브러리는 인스턴스 간에 해당 상태를 재사용할 수 있습니다. 암호화 라이브러리는 복원 후 재시도되는 스냅샷 보호(스냅세이프) 빌드를 사용해야 합니다.

직접 코드 배포

서비스 관리형 기본 이미지에는 이미 암호화 라이브러리의 스냅샷 보호 빌드가 포함되어 있으므로 이에 대한 조치를 취할 필요가 없습니다.

Bring-your-own 암호화 라이브러리

예를 들어 컨테이너 에이전트에서 자체 암호화 라이브러리를 가져오는 경우 스냅샷 보호 빌드를 사용하여 복원 후 복구되도록 합니다. Amazon Linux 2023에서는를 사용합니다openssl-snapsafe-libs.

네트워킹

시작 시 클라이언트를 구축하고 투명한 재연결 예상

시작 시 여는 소켓은 복원되지 않지만 클라이언트 라이브러리가 캐시하는 설정인 서비스 모델 구문 분석, 엔드포인트 확인, 자격 증명 확인 및 연결 풀은 복원됩니다. 시작 시 클라이언트를 구성하고 연습하고 복원 후 첫 번째 호출을 예상하여 연결을 투명하게 다시 설정합니다.

호스트 이름 또는 PID를 고유한 인스턴스 식별자로 사용하지 마십시오.

복원된 모든 인스턴스는 동일한 스냅샷에서 시작하고 동일한 호스트 이름과 프로세스 ID를 보고합니다. 각 요청에서 고유 식별자를 생성합니다.

고정 소스 포트에 바인딩 방지

복원 후 스냅샷 시간에 보류된 연결이 다시 설정되고 고정 소스 포트가 인스턴스 내에서 해당 대체 포트와 충돌할 수 있습니다. 복원된 인스턴스는 자체 네트워크 네임스페이스가 있는 별도의 microVMs이므로 충돌이 인스턴스 내에서 발생하고 인스턴스 간에 충돌이 발생하지 않습니다.