AWS 终于推出了自己的 AWS Emulator
AWS Finally Built Its Own AWS Emulator
AWS 终于推出了官方的本地模拟器 AWS Emulator,让开发者无需 AWS 账号即可在本地测试软件。这个工具通过模拟 AWS APIs,让请求直接指向本地环境而非云端,从而彻底消除了测试阶段的额外服务费用。它支持多种运行模式:可以通过 Docker 或包管理器在服务器模式下运行,也能作为 Rust 测试的嵌入式组件直接集成到代码中。虽然它专为开发和测试设计,不适用于生产环境或安全测试,但这一举措极大简化了 CI/CD 流程和开发者的本地调试体验。
你不需要 AWS 账号,你的请求会发送给模拟器而不是 AWS,因此你操作的是模拟资源而非真实的 AWS 资源。
HN 评论区
219- CharlieDigital
对是否采用持怀疑态度,因为尚不清楚这仅仅是一次演练,还是他们打算正式推出并持续维护的产品。
Floci[0] 对我而言一直很棒。同时也使用 Testcontainers[1]。
额外加分项:它也支持 GCP 和 Azure(不过目前仅在有限场景下使用过)。
- scriptsmith
来自安全页面 [0]
> 请勿使用模拟器测试以下内容:
> - IAM 策略和权限边界
> - 基于资源的策略,例如存储桶策略
> - AWS KMS 密钥策略
> - 跨 AWS 账户或跨 AWS 区域的访问
> - 任何其他安全控制
> 模拟器中的某些服务会评估您在模拟器中创建的 IAM 用户和角色的 IAM 策略,但评估方式与 AWS 不同。模拟器绝不会拒绝使用其自身密钥签名的请求。它不检查 AWS KMS 密钥策略或 Amazon S3 存储桶策略。它也不支持跨账户或跨区域的调用。因此,被 AWS 拒绝的请求可能在模拟器中成功,而 AWS 允许的请求可能会失败。
这很遗憾,因为我原本希望官方 AWS 产品在这方面能比 ministack 和 localstack 做得更好,后者至少能解决部分问题。我想这是因为智能体(agents)仅基于公开 API 接口构建,所以很难实现这部分功能。但他们本应尝试让智能体读取 AWS 现有的策略引擎。或者,也许这是为了防止有人轻易地将 aws-emulator 作为 AWSaaS 运行?
[0] https://docs.aws.amazon.com/emulator/latest/userguide/securi...
- wg0
尽管可以随意评论,但如果没有 AI 和智能体,考虑到 AWS 拥有如此庞大的服务数量,没人会想到去构建这个东西。从人力角度讲,虽然可行,但成本极高。我不是说以前没发生过,但 fakecloud 和 localstack 之类的工具呢?那道护城河已经消失了。
说实话,我对此感到震惊。这竟然成了新常态:智能体在用一种最难上手的语言编写代码。而且说实话,这代码丑得刺眼。我知道这很主观,但这确实是一门对人类极不友好的语言。
- morelandjs
同为亚马逊员工。想说的是,我很感激你们构建了它,如果执行得当并得到妥善维护,它将具有巨大的价值。
智能体驱动的开发(Agentic development)的核心在于尽可能封闭系统,然后模拟或仿真任何无法封闭的输入或依赖。到了那一步,就让 Claude 在系统中自由探索并完成任务。
这不可避免地会遇到基础设施相关问题,而任何能帮助模拟这些接口的工具都将极具价值。谢谢你们!
- Waterluvian
如果我理解正确的话,这意味着我可以将整个 CDK 项目指向模拟器,从而测试 `cdk deploy`?
我很好奇其“内部”行为的模拟程度到底有多真实。虽然已经有一段时间了(自从我的堆栈运行正常后,我就懒得再去动它……),但我记得在设置和清理过程中(即使是透过 Terraform),偶尔会发生一些奇怪且不一致的情况,导致如果操作顺序错误(但看似有效)时会出现漫长的超时。
- MiroslavPokorny
> 目标目录 target/ 至少需要 100 GB 的免费磁盘空间。工作空间中每个 AWS 服务都有一个 crate,因此所有服务的调试构建版本体积很大,并且随着服务的增加而增长。
100GB!???!
- super_linear
与此帖子相关的链接:https://www.aboutamazon.com/news/aws/how-autonomous-ai-agent...
- Shakahs
AWS 已经用他们创建的规范语言 Smithy 对其所有服务进行了建模。他们的 API 客户端均由 Smithy 生成,而模拟器似乎也是基于 Smithy 规范构建,并针对真实 API 进行了全面的集成测试。使用规范可以确保他们覆盖每个端点的每种变体和可选字段,这与 Floci 和 Ministack 不同,后者仅实现了更常用的部分。