> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 没有 AWS 账号也能测 agent：200+ 服务搬到本地，及格线只有 56.6%
- URL: https://www.hubwiz.com/blog/aws-emulator-local-agent-testing/
- Published: 2026-11-14T13:33:12.000Z
- Updated: 2026-11-14T13:33:12.000Z
- Description: 42,857 个测试过 24,243 个——听起来不及格，但它给了 agent 最缺的东西：一个会按 AWS 的方式报错、而且免费随便重置的回路。
- Author: admin
- Tags: 本地测试, Agent 工程, AWS, CI, 开源工具

没有 AWS 账号，不花一分钱，200 多个 AWS 服务在你的笔记本上跑。CLI 和 SDK 都指向它，**你的代码一行都不用改**。资源放在内存里，进程一停就全没了——这正是测试想要的行为。

这是 AWS 在 2026-11-12 发布的 **AWS Emulator**（本地 AWS API 仿真器）。最不寻常的地方不是"又一个 LocalStack"，而是：**它的代码是 agent 写的，连评审都是 agent 做的。**

而它的及格线也摆得很诚实：**42,857 个保真度测试，通过 24,243 个，56.6%。**

## 一、它到底是什么

一个无头的本地程序，对外提供一个 AWS API 端点，你通过环境变量把 CLI 或 SDK 指过去。资源放在内存，短命。

它的"像"不是感觉上的像，而是**错误信息逐字一致**：官方文档里那个 DynamoDB 例子——用 2 个字符的表名建表，返回的 `ValidationException` 文本和真 AWS 一模一样。

官方给的关键数字：

| 项    | 值                                                                           |
| ---- | --------------------------------------------------------------------------- |
| 规模   | 从 **438 个 AWS API 模型**生成，覆盖 **200+ 服务**；**每个服务一个 Rust crate**               |
| 运行环境 | Linux x86\_64/aarch64（RPM 或 Debian 包）；macOS/Windows 用 Docker，**内存上限 2 GiB** |
| 源码构建 | 需要 **≥100 GB 空闲磁盘** \+ Rust 工具链 + C 编译器                                     |
| 默认端点 | **HTTPS 127.0.0.1:9297**（自签证书）                                              |
| 许可   | **CC0 1.0**（vendor/ 下 Apache 2.0）                                           |
| 费用   | 免费，不需要厂商 token，不需要账号                                                        |

## 二、agent 是怎么把它写出来的

起点很朴素：给 **Kiro** 一句 prompt，**15 分钟**就出来一个能用的 Amazon SQS 仿真器。

然后 AWS 把活拆给三组 agent：

| 角色    | 干什么                                       |
| ----- | ----------------------------------------- |
| 测试作者  | 从公开的 **Smithy API 模型**推导场景，并拿真 AWS 验证每个场景 |
| 问题发现者 | 把这些测试回放到仿真器上，把失败登记成 issue                 |
| 修复者   | **一次只领一个 issue**，提交一个补丁                   |

每个补丁都要过合并闸：构建、代码评审、安全、保真度。还有几个安全 agent 专门做对抗性评审。按项目方的说法，是**数百个并发 agent、每天修掉数千个 issue**。

发布流水线跑在 AWS Developer Tools 上，**CodeCommit 才是 agent 的仓库，代码最后才同步到 GitHub**。这个细节有意思：它把"agent 产出的东西先进内部闸门"写进了流水线结构里。

## 三、四条跑起来的路

| 路径            | 怎么做                                                                           | 适合              |
| ------------- | ----------------------------------------------------------------------------- | --------------- |
| Linux 包       | 装 RPM / Debian 包，跑 aws-emulator                                               | 最快              |
| Docker        | 用 AWS 的 Dockerfile 自己 build，**限 2 GiB**                                       | macOS / Windows |
| Rust embedded | 作为 dev-dependency 引入，**每个测试一个隔离实例**                                           | Rust 项目单测       |
| coding agent  | aws agent-toolkit add-skill --skill-name aws-emulator（需要 AWS CLI **≥2.35.0**） | 让 agent 自己起环境   |

源码构建和 embedded 模式第一次都要付编译代价（同一个 100 GB 磁盘门槛）。

## 四、保真度：分清楚"哪一层像"

v1.0.322 的分数（`scores.json`，2026-11-11 评分）：

| 维度        | 通过 / 总数         | 比例                   |
| --------- | --------------- | -------------------- |
| **总体**    | 24,243 / 42,857 | **56.6%**（另有 80 个跳过） |
| 单步级（step） | 49,810 / 68,007 | 73.2%                |
| 跨服务工作流    | 2,752 / 6,569   | **41.9%**            |

分服务看，差距是数量级的：

| 服务                 | 保真度                  |
| ------------------ | -------------------- |
| AWS KMS            | **93.9%**（291/310）   |
| Amazon SQS         | 89.8%                |
| Amazon S3          | 79.1%                |
| DynamoDB           | 77.3%                |
| SNS                | 73.9%                |
| Lambda             | 46.4%                |
| EC2                | 41.5%                |
| **CloudFormation** | **15.8%**（414/2,612） |

官方自己说了口径：**控制平面 API 最像；数据平面、CloudFormation、Terraform、CDK 的支持因服务而异**。没实现的操作返回 **HTTP 501 NotImplemented**（不是假装成功——这一点很重要）。测试套件公开在 `aws-emulator-evaluation-suite` 里，**连失败的一起放**。

### 4.1 agent 的常见工具面，落到这个保真度上够不够

| 你要测的东西         | 依赖服务           | 保真度   | 够不够                              |
| -------------- | -------------- | ----- | -------------------------------- |
| 对象存储读写、预签名 URL | S3             | 79.1% | 够，但版本控制/事件通知的细节要实测               |
| 表格读写、条件写、分页    | DynamoDB       | 77.3% | 够做冒烟；事务与 GSI 建议单项验证              |
| 队列、去重、FIFO     | SQS            | 89.8% | **最稳的一个**，可当第一个用例                |
| 发布/订阅扇出        | SNS            | 73.9% | 够                                |
| 加密、KMS 别名      | KMS            | 93.9% | 够，适合用来做冒烟基准                      |
| 函数调用链          | Lambda         | 46.4% | 只测控制面（创建/配置/权限），**别指望运行时行为**     |
| 虚机、安全组、网络      | EC2            | 41.5% | **不够**，涉及网络拓扑的场景别用               |
| 整套基础设施声明       | CloudFormation | 15.8% | **不要用**（Terraform / CDK 同样因服务而异） |

### 4.2 决定用不用它之前，先回答五个问题

1. 我要验的是**控制面**还是数据面？—— 控制面才像。
2. 测试路径涉及 **IAM 权限语义**吗？—— 涉及就不行，它不求值策略。
3. 需要**多区域/多账号**吗？—— 单区单账号，隔离是假象。
4. 我的 agent 会不会读到**上一个测试残留的内存状态**？—— 它会，所以每个用例一个实例，或至少用 `--idle-timeout`。
5. 我的 CI 能接受 **2 GiB** 的容器上限吗？—— 不能就说明 agent 在内存里堆了太多东西，这本身就是个信号。

## 五、和 LocalStack / Moto / Floci 比

| 项          | AWS Emulator         | LocalStack                                              | Moto              | Floci      |
| ---------- | -------------------- | ------------------------------------------------------- | ----------------- | ---------- |
| 许可         | CC0 1.0              | 商业分档                                                    | Apache-2.0        | MIT        |
| 价格         | 免费                   | Hobby $0（非商用）/ Base $39 / Ultimate $89 每 license 每月（年付） | 免费                | 免费         |
| 覆盖         | 200+ 服务 / 438 API 模型 | 30+ / 55+ / 110+（按档）                                    | README 未披露        | README 未汇总 |
| 需要厂商 token | 否                    | 是                                                       | 否                 | 未披露        |
| 默认端点       | HTTPS 127.0.0.1:9297 | 4566                                                    | 5000              | 4566       |
| 进程内测试模式    | Rust dev-dependency  | 未披露                                                     | Python @mock\_aws | 未披露        |
| 公开保真度分数    | **有，每版发布**           | 无                                                       | 无                 | 无          |

最后一行才是真正的差别：**只有它把"自己像不像"当成发布产物。**

## 六、五条不能用的场景（AWS 自己列的）

1. **不评估 IAM。** 身份策略和资源策略不按 AWS 的方式求值——**别拿它做安全测试**；
2. **只有 1 个区域、1 个账号。** 它接受任意 ID，但不按 ID 隔离资源；
3. **只在 us-west-2 验证过**，全局服务在 us-east-1 检查；
4. **内存态、短命。** 没针对长跑和压测验证过，记得用 `--idle-timeout` 收尾；
5. **遥测默认开着。**

## 七、自己复核保真度：别只看结论

这篇最有用的部分不是 56.6%，而是它可被复核：

- 每个版本都发一个 **`scores.json`**，里面是逐测试的结果；
- 评估套件公开，**包括失败的用例**；
- 官方把“总体 / 单步 / 跳服务工作流”三个维度分开报，因为它们的含义完全不同：**56.6% 的“总体”里，单步能到 73.2%，而跳服务工作流只有 41.9%**——你要测的恰恰经常是后者。

（另外还有 **80 个被跳过的测试**。跳过不等于通过，自己取数时记得看一眼这一栏。）

## 八、接进 CI 的四条纪律

1. **一个测试一个实例。** 资源在内存里、不去数据——共用实例会让上一条用例的副作用污染下一条，而且这种失败复盘起来极贵。Rust 的 embedded 模式本来就是“每个测试一个隔离实例”的设计。
2. **一定要设 `--idle-timeout`。** 它短命是特性，不自动退出就是 CI 里的僵尸进程。
3. **把 501 当断言。** `NotImplemented` 是诚实的信号：它告诉你“这个操作还没有”，比静默返回空数组好得多。把它写进测试，能在升级版本时自动告诉你“刚才不管你、现在管了”。
4. **遥测默认开着。** 容器里如果不想要任何出网行为，记得显式关掉。

## 九、它解决的是 agent 最缺的那一环

写 agent 的人都有过这个场面：本地没有云，测试要么 mock 得过于干净（永远返回 success），要么连上真 AWS（慢、贵、脏、还不敢乱删）。

**mock 的问题是"太顺"**——agent 的 bug 恰恰出在错误路径上：限流、404、参数校验、幂等重放。一个会返回 `ValidationException`、会 501、会按服务不同而"半真半假"的假云，比一个永远成功的 mock 有价值得多。

### 什么场景值得用

| 场景           | 为什么合适                          |
| ------------ | ------------------------------ |
| agent 的工具链冒烟 | 让工具调用打到 9297，验证 schema、重试、错误处理 |
| CI 里的集成测试    | 无账号、无网络、随便重置，跑完就扔              |
| 提示词/工具契约调优   | 501 是最好的提示：告诉你"这个操作还没有"        |
| 教学与演示        | 不用给学员发 AWS 账号                  |

### 什么时候别用

- **权限与安全测试**：不评估 IAM，测出来的"通过"没有意义；
- **多账号/多区域架构**：单区单账号，隔离假象；
- **IaC 链路**：CloudFormation 15.8%，Terraform/CDK 因服务而异，别把它当 IaC 验证环境；
- **性能与长跑**：内存态、短命，官方没为压测背过书。

### 我们自己的用法（三条）

1. **冒烟只挑高保真的那几个服务**：KMS 93.9%、SQS 89.8%、S3 79.1%、DynamoDB 77.3%——这四个覆盖了大多数 agent 的工具面；
2. **把"这个操作用 501"当断言写进测试**：它是"未实现"的诚实信号，比静默成功好一百倍；
3. **CI 里放 Docker 路线，2 GiB 上限当预算**：超了就说明 agent 在内存里堆了太多状态，这本身是个信号。

顺带一个观察：这个项目和它周边的发布节奏，正好说明了 2026 年下半年的一件事——**"让 agent 干活"已经不稀奇，稀奇的是给 agent 装上闸门**（合并闸、保真度评分、公开失败测试）。这和我们 11-03 那篇[《AI 写的代码越多，审查越像盖章》](https://www.hubwiz.com/blog/critical-thinking-when-agents-do-the-work/) 说的是同一件事的两面。

## 十、三步动作

1. **今天**：用 Docker 起一个，把 `AWS_ENDPOINT_URL` 指到 `https://127.0.0.1:9297`，跑你 agent 最常用的 3 个工具调用；
2. **本周**：把这 3 个调用的错误路径（参数校验失败、404、幂等重放）补成用例——这是 mock 永远测不出来的部分；
3. **下次评审**：把"哪些操作返回 501"列成清单，决定是绕开还是等它实现。

本文由 Software 2.0 编译整理，转载请注明出处。

**Sources**

- 原文：Asif Razzaq《AWS Releases AWS Emulator: A Local Copy of 200+ AWS Services Built by AI Agents》，MarkTechPost，2026-11-12 [https://www.marktechpost.com/2026/11/12/aws-emulator-local-aws-api-emulator-ai-agents/](https://www.marktechpost.com/2026/11/12/aws-emulator-local-aws-api-emulator-ai-agents/?ref=hubwiz.com)
- 代码与分数：[https://github.com/aws/aws-emulator](https://github.com/aws/aws-emulator?ref=hubwiz.com)、评估集 `aws-emulator-evaluation-suite`（含失败用例）

**同主题阅读**

- [Agent 老是散架？该修的是 harness，不是提示词](https://www.hubwiz.com/blog/harness-engineering-agent-guide-lunar/)
- [AI SRE 现在能做什么：查故障更快，但没人敢让它动生产](https://www.hubwiz.com/blog/ai-sre-investigation-agent-oncall/)
- [断网写代码：9B 本地模型 + OpenCode 离线改掉一个 bug](https://www.hubwiz.com/blog/offline-coding-agent-qwen-opencode-himalayas/)

参考支柱：[AI 基建 / 评测 / 安全](https://www.hubwiz.com/blog/ai-infra-stack/)、[本地 & 自托管 LLM](https://www.hubwiz.com/blog/local-llm-stack/)。