AgentCore Gateway đến Agent
Generator connection có thể đăng ký một agent (có thể là TypeScript hoặc Python) như một AgentCore Runtime target của một AgentCore Gateway được tạo với protocol: http.
Sau khi kết nối, Gateway sẽ proxy các yêu cầu cho agent dưới đường dẫn <gatewayUrl>/<targetName>/invocations, ký lưu lượng truy cập đi ra đến runtime bằng IAM SigV4. Điều này cung cấp cho các agent của bạn một điểm vào duy nhất được quản lý — và vì người gọi chỉ cần truy cập Gateway, bản thân các agent runtime có thể được triển khai bên trong VPC phía sau nó.
Điều kiện tiên quyết
Phần tiêu đề “Điều kiện tiên quyết”Trước khi sử dụng generator này, hãy đảm bảo bạn có:
- Một dự án
agentcore-gatewayđược tạo vớiprotocol: http - Một agent component (
ts#agenthoặcpy#agent) được tạo vớiinfra: agentcore. Cảauth: iam(Gateway gọi nó bằng role của chính nó) hoặcauth: cognito(Gateway chuyển tiếp JWT của người gọi — xem Chuyển tiếp danh tính người gọi đến runtime) đều hoạt động.
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy Generator
Phần tiêu đề “Chạy Generator”- Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
- Mở Nx Console trong VSCode
- Nhấp
Generate (UI)trong phần "Common Nx Commands" - Tìm kiếm
@aws/nx-plugin - connection - Điền các tham số bắt buộc
- Nhấp
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionBạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runChọn dự án Gateway làm nguồn và dự án agent làm đích. Nếu dự án agent chứa nhiều component, hãy chỉ định targetComponent để phân biệt.
Tùy chọn
Phần tiêu đề “Tùy chọn”| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
| sourceProject Bắt buộc | string | - | Dự án nguồn |
| targetProject Bắt buộc | string | - | Dự án đích để kết nối tới |
| sourceComponent | string | - | Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn. |
| targetComponent | string | - | Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích. |
| preferInstallDependencies | boolean | true | Có nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối. |
Kết quả của Generator
Phần tiêu đề “Kết quả của Generator”Generator kết nối các dự án hiện có với nhau thay vì tạo ra các tệp nguồn mới. Các tệp sau được sửa đổi:
Thư mụcpackages/<gateway>
- project.json target
devcủa Gateway có thêm dependency vào<agent>-devcủa agent - local-dev.ts
ATTACHED_AGENTSđược cập nhật để local gateway proxy đến agent
- project.json target
Thêm agent target vào stack của bạn
Phần tiêu đề “Thêm agent target vào stack của bạn”Generator không thể tự động kết nối agent target vào cơ sở hạ tầng của bạn vì nó không biết stack hoặc module nào khởi tạo Gateway. Hãy tự thêm một lệnh gọi gateway.addAgent(agent).
Trong stack nơi bạn khởi tạo Gateway, hãy đăng ký agent như một target:
const myAgent = new MyAgent(this, 'MyAgent');const myGateway = new MyGateway(this, 'MyGateway');
// Register the agent as a runtime target of the Gateway. The target name// defaults to the agent's `agentName` (its class name in kebab-case,// e.g. `MyAgent` -> `my-agent`), and forms the target's invocation path:// <gatewayUrl>/my-agent/invocationsmyGateway.addAgent(myAgent);Để ghi đè tên target mặc định, hãy truyền gatewayTargetName:
myGateway.addAgent(myAgent, { gatewayTargetName: 'my-target' });Construct cấp quyền invoke cho execution role của Gateway đến agent runtime và cấu hình target với credential provider GATEWAY_IAM_ROLE, do đó Gateway ký các lệnh gọi đi ra bằng role của chính nó.
Trong tệp Terraform nơi bạn khởi tạo Gateway, hãy kết nối agent target vào:
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent" # ...}
module "my_gateway" { source = "../../common/terraform/src/app/gateways/my-gateway"
# The Gateway signs outbound calls to the runtime with its own role and # validates access at target creation, so it needs invoke access first. additional_iam_policy_statements = [ { Effect = "Allow" Action = [ "bedrock-agentcore:InvokeAgentRuntime", "bedrock-agentcore:InvokeAgentRuntimeWithWebSocketStream", # A2A targets additionally serve their agent card via the gateway "bedrock-agentcore:GetAgentCard", ] Resource = [ module.my_agent.agent_core_runtime_arn, "${module.my_agent.agent_core_runtime_arn}/*", ] } ]}
# Register the agent as a runtime target of the Gateway. The target name# forms the invocation path: <gatewayUrl>/my-agent/invocationsresource "aws_bedrockagentcore_gateway_target" "my_agent" { gateway_identifier = module.my_gateway.gateway_id name = "my-agent" # AgentCore fills in a description when none is set, which the provider # reports as an inconsistent result after apply — so always set one. description = "Agent runtime target my-agent"
target_configuration { http { agentcore_runtime { arn = module.my_agent.agent_core_runtime_arn } } }
credential_provider_configuration { gateway_iam_role {} }}Gọi agent thông qua Gateway
Phần tiêu đề “Gọi agent thông qua Gateway”Các yêu cầu đến <gatewayUrl origin>/<targetName>/invocations được chuyển tiếp đến agent runtime mà không có chuyển đổi giao thức, do đó người gọi sử dụng cùng hình thức yêu cầu như khi họ gọi trực tiếp đến runtime — SSE streams (AG-UI), JSON streaming (Python HTTP) và A2A JSON-RPC đều proxy qua. Người gọi xác thực với Gateway (IAM SigV4 hoặc Cognito JWT tùy thuộc vào auth của Gateway) thay vì với agent.
Để kết nối một website với các agent của Gateway, hãy sử dụng connection generator.
Chuyển tiếp danh tính người gọi đến runtime
Phần tiêu đề “Chuyển tiếp danh tính người gọi đến runtime”Theo mặc định, Gateway ký các lệnh gọi đi ra bằng IAM role của chính nó (credential provider GATEWAY_IAM_ROLE), do đó runtime thấy danh tính của Gateway, không phải của người gọi. Nếu thay vào đó bạn muốn agent ủy quyền dựa trên người gọi — ví dụ để đọc các claim sub hoặc scope của người dùng — hãy đặt một agent Cognito phía sau một Gateway Cognito. Gateway sau đó sẽ chuyển tiếp JWT của người gọi đến runtime mà không thay đổi (credential provider JWT_PASSTHROUGH), và runtime xác thực lại nó.
Tạo cả hai đầu với auth: cognito và kết nối chúng như trên:
- một agent (
ts#agenthoặcpy#agent) được tạo vớiauth: cognito, và - một Gateway được tạo với
auth: cognitođứng trước cùng Cognito user pool.
Mọi thứ khác đều tự động — gateway.addAgent(agent) (CDK) và module runtime Terraform được tạo sẽ xử lý việc kết nối cho bạn dựa trên auth của agent:
- target được tạo với credential provider
JWT_PASSTHROUGH(thay vìGATEWAY_IAM_ROLE), và - runtime cho phép header
Authorizationđể token được chuyển tiếp đến được mã agent của bạn. Không có allowlist này, AgentCore xác thực token nhưng loại bỏ header trước khi đến container của bạn.
Người gọi invoke Gateway với Authorization: Bearer <jwt> (không có SigV4), và agent đọc các claim từ header Authorization — bỏ qua xác thực chữ ký, vì inbound authorizer của runtime đã xác minh token:
import jwt # PyJWT
@app.post('/invocations')async def invoke(input: InvokeInput, request: Request): token = request.headers['authorization'].removeprefix('Bearer ') claims = jwt.decode(token, options={'verify_signature': False}) # authorize on claims['sub'], claims['scope'], ...Phát triển cục bộ
Phần tiêu đề “Phát triển cục bộ”Chạy Gateway cục bộ với:
pnpm nx dev <gateway-name>yarn nx dev <gateway-name>npx nx dev <gateway-name>bunx nx dev <gateway-name>khởi động một local gateway cùng với mọi agent được gắn kết trên cổng cục bộ được chỉ định của nó. Local gateway proxy các đường dẫn /<targetName>/... đến server cục bộ của mỗi agent, khớp với định tuyến dựa trên đường dẫn của Gateway đã triển khai.