aws-samples/sample-aws-agent-registry-demo
GitHub: aws-samples/sample-aws-agent-registry-demo
AWS 官方的 Agent Registry 演示项目,展示如何构建集中式 AI Agent 资源目录并实现发布、审批与发现的全流程治理。
Stars: 2 | Forks: 0
# AWS Agent Registry 示例演示应用程序
这是一个示例项目,演示了如何使用 AWS Agent Registry 创建一个集中式目录,以便在您的组织内组织、管理和发现资源。所有资源均使用 AWS SAM 进行部署。
本演示中使用了以下三个角色:
- **Publisher** – 希望与其他团队共享其 agent、MCP server、工具或 agent skill 的开发者或团队。
- **Administrator 或 Curator** – 注册表所有者,负责接收有关新提交的通知、进行审查,并根据组织标准予以批准或拒绝。此角色也可以是注册表本身的管理员,负责管理注册表的生命周期事件(如创建、更新和删除)。
- **Consumer** – 搜索注册表以发现已批准的功能并在运行时使用它们的开发者或 agent。
在本演示中,您将扮演所有这三个角色。在实际用例中,它们通常是不同的个人/团队/AI agent。
本解决方案遵循 AWS 共担责任模型。AWS 负责“云本身的安全”(基础设施、托管服务),而您负责“云内部的安全”(IAM 配置、应用程序代码、数据验证和监控)。有关更多信息,请参阅[共担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。
## 前置条件
- 拥有可访问 Bedrock AgentCore API 的 AWS 账户
- 如果您还没有账户,请[创建 AWS 账户](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html)并登录。
- 能够通过 AWS Management Console 和 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli) 访问 AWS 账户。您使用的 [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam) 用户必须具有进行必要 AWS 服务调用和管理本文提到的 AWS 资源的权限。在为 IAM 用户授予权限时,请遵循[最小权限原则](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。
- 已安装并配置好 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。您需要 AWS CLI 2.34.60 或更高版本。
- [已安装 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- 已安装 [AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)
- 已安装 Python 3.14 或更高版本以及 Pip3
## 部署 AWS 资源
您将创建以下 AWS 资源:
- 1 个 AWS Agent Registry(通过 Custom Resource)
- 5 个 AWS Lambda 函数(custom resource、publisher、consumer、reviewer、notification)
- 5 个 IAM 角色(每个 Lambda 对应一个)
- 1 个 SNS Topic + 邮件订阅
- 1 个 EventBridge Rule(在 pending-approval 状态变更时触发)
1. 克隆仓库并导航至项目目录:
```
git clone https://github.com/aws-samples/sample-aws-agent-registry-demo.git
cd sample-aws-agent-registry-demo
```
2. 运行以下命令进行构建:
```
sam build
```
3. 运行以下命令以部署所需的 AWS 资源:
```
sam deploy --guided
```
系统将提示您输入:
| 参数 | 描述 | 是否必填 |
|-----------|-------------|----------|
| **AdminEmail** | 用于接收批准通知的电子邮件地址 | 是 |
| **RegistryName** | 注册表名称(默认:`agent-registry-demo`) | 否 |
4. 部署完成后,确认发送到您的 AdminEmail 地址的 SNS 订阅电子邮件。
5. 从堆栈输出中设置环境变量(后续所有步骤均会用到)。请替换 `your-stack-name`:
```
STACK_NAME=
export REGISTRY_ID=$(aws cloudformation describe-stacks \
--stack-name $STACK_NAME \
--query "Stacks[0].Outputs[?OutputKey=='RegistryId'].OutputValue" \
--output text)
export PUBLISHER_FUNCTION_NAME=$(aws cloudformation describe-stacks \
--stack-name $STACK_NAME \
--query "Stacks[0].Outputs[?OutputKey=='PublisherFunctionName'].OutputValue" \
--output text)
export CONSUMER_FUNCTION_NAME=$(aws cloudformation describe-stacks \
--stack-name $STACK_NAME \
--query "Stacks[0].Outputs[?OutputKey=='ConsumerFunctionName'].OutputValue" \
--output text)
export REVIEWER_FUNCTION_NAME=$(aws cloudformation describe-stacks \
--stack-name $STACK_NAME \
--query "Stacks[0].Outputs[?OutputKey=='ReviewerFunctionName'].OutputValue" \
--output text)
echo "Registry ID: $REGISTRY_ID"
echo "Publisher: $PUBLISHER_FUNCTION_NAME"
echo "Consumer: $CONSUMER_FUNCTION_NAME"
echo "Reviewer: $REVIEWER_FUNCTION_NAME"
```
## 测试解决方案
### A. Publisher 工作流
您现在扮演 **publisher** 角色。您将按照给定的架构发布 4 条示例记录:

1. 创建一个 Python 虚拟环境:
```
python3 -m venv .venv
source .venv/bin/activate
pip3 install boto3 strands-agents
```
2. 运行以下命令以发布 4 条示例记录:
```
python demo/publish_sample_records.py
```
该脚本将发布以下记录:
| # | 记录类型 | 名称 | 预期 Reviewer 得分 |
|---|------|------|------------------------|
| 1 | MCP Server | `aurora-mysql-troubleshooting-runbook` | HIGH(批准) |
| 2 | A2A Agent | `investigation-jira-agent` | HIGH(批准) |
| 3 | Agent Skill | `lambda-troubleshooting-skill` | MEDIUM(拒绝 — 缺少团队/资产 ID) |
| 4 | 自定义 | `s3-data-export-utility` | LOW(拒绝 — 描述模糊,无团队/资产 ID) |
发布后,管理员/curator(即您)将收到每条记录的电子邮件通知。
### B. Consumer 工作流
您现在是 **consumer**。

运行以下命令以查找已批准的记录。您将无法获得任何记录(`"count": 0`)。尽管 publisher 已成功将记录发布到 AWS Agent Registry,但它们尚未获得批准。Consumer 只能发现已批准的记录。这提供了治理机制。
```
aws lambda invoke \
--function-name $CONSUMER_FUNCTION_NAME \
--cli-binary-format raw-in-base64-out \
--payload '{"action": "search", "query": "runbook", "max_results": 10}' \
output.json && cat output.json
```
### C. Administrator/Curator 工作流
您现在扮演 **Administrator/Curator** 角色。

1. 运行批准建议 agent,根据定义的评估标准评估所有待处理记录:
```
python3 demo/approval_recommender_agent.py --list-pending
```
该 agent 会对每条记录进行评分(HIGH/MEDIUM/LOW),并提供反馈以推荐 APPROVE 或 REJECT。
2. 根据建议,批准或拒绝每条记录。您也可以自行判断。请将 `record-id` 替换为上一步骤输出中的记录 ID:
```
# 批准 record
aws bedrock-agentcore-control update-registry-record-status \
--registry-id $REGISTRY_ID \
--record-id \
--status APPROVED \
--status-reason "Looks good."
# 拒绝 record
aws bedrock-agentcore-control update-registry-record-status \
--registry-id $REGISTRY_ID \
--record-id \
--status REJECTED \
--status-reason "Missing details."
```
### D. Consumer 工作流 - 再探
您再次扮演 **Consumer** 角色。
请等待约 5 分钟,以便批准状态生效。
1. 要通过直接调用 consumer Lambda 函数进行测试,请运行以下命令以查找已批准的记录。
```
aws lambda invoke \
--function-name $CONSUMER_FUNCTION_NAME \
--cli-binary-format raw-in-base64-out \
--payload '{"action": "search", "query": "runbook", "max_results": 10}' \
output.json && cat output.json
```
2. 要使用 agent 进行测试,请运行以下命令:
```
python3 demo/consumer_agent.py --query "Find me Aurora MySQL troubleshooting help"
```
您现在将根据搜索找到相关的已批准记录。尝试使用不同的查询进行验证,以确保 consumer 只能找到已批准的记录。
## 清理
如果您仅为了演示目的而跟随操作,为避免产生未来费用,请运行以下命令以删除本仓库中创建的资源:
```
sam delete
deactivate #To deactivate the Python virtual environment.
```
## 安全
有关更多信息,请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。
## 许可证
本库采用 MIT-0 许可证授权。请参阅 LICENSE 文件。
标签:AI代理, AWS, AWS SAM, DPI, MCP, 示例项目, 资源注册中心, 逆向工具