返回资讯中心
外部精选
软件工程
#社区热议

AWS 推出官方本地 AWS API 模拟器 AWS Emulator

来源标题:AWS Finally Built Its Own AWS Emulator

AWS 发布了 AWS Emulator,可在本地模拟 AWS API,让开发者无需真实 AWS 账号即可测试软件。它适用于开发机、测试服务器和 CI 环境,仅用于构建与测试,不支持生产负载或安全测试。该模拟器不额外收费,仅在部署到 AWS 时按资源付费。

Hacker Newssuper_linear2026/11/11 · 今天18 分钟阅读

以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

AWS Emulator 是 AWS API 的本地模拟器。你可以用它来测试软件,无需调用 AWS,可在自己的机器、开发服务器或持续集成(CI)环境中运行。你不需要 AWS 账户。请求会发往模拟器,而不是 AWS。因此你操作的是模拟出来的资源,而非真实的 AWS 资源。AWS Emulator 不收取额外服务费。只有在 AWS 上部署时,你才需要为 AWS 资源付费。

模拟器是一个本地程序,提供 AWS API 端点。它没有图形界面。启动模拟器后,你需要设置环境变量,将 AWS CLI 或 AWS SDK 指向它的端点,然后像平常一样运行代码。在嵌入式模式下,你改为将模拟器的 HTTP client 传入 SDK。

AWS Emulator 用于构建和测试。不要将其用于生产工作负载或安全测试。请参阅 AWS Emulator 中的安全性。

使用 AI 编码代理 安装 aws-emulator skill,然后让你的代理设置模拟器。这需要 AWS CLI 2.35.0 或更高版本。请参阅 AI 编码代理入门。 aws agent-toolkit add-skill --skill-name aws-emulator --region us-east-1

服务器模式(CLI 和任意 SDK) Linux:安装 RPM 或 Debian 包,然后运行 aws-emulator。请参阅 Linux 入门。 Windows / macOS:在基于简短 Dockerfile 构建的容器中运行模拟器。请参阅 Docker 入门。 通过设置环境变量将 SDK 指向运行中的模拟器。请参阅将 AWS SDK 指向 AWS Emulator。 将模拟器添加为 dev-dependency 并以进程内方式运行,每个测试使用一个独立实例。无需设置端点 URL、证书或环境变量。测试直接将模拟器的 HTTP client 接入 SDK client。请参阅嵌入式模式入门,以及下方的从源码构建以了解其构建成本。

要查看各服务与 AWS 的匹配程度,请查看发布页面上每次发布随附的保真度评分。要检查你自己的项目是否预期可以正常工作,请参阅检查你的项目是否适用于 AWS Emulator。

个别差距记录在仓库的 issues/ 目录中。尚不可用的 API 和行为位于 issues/things-that-do-not-work/ 下,已修复的则移至 issues/things-that-now-work/。

如果你要修改模拟器、从检出副本运行它,或使用嵌入式模式,则需要此内容。嵌入式模式会将模拟器编译进你的测试二进制文件,因此下方的先决条件和构建成本指南同样适用于它。大多数其他用户则安装预构建包(请参阅快速开始)。从源码构建在 Linux(x86_64 和 aarch64)上受支持;在 Windows 和 macOS 上,请使用上方的 Docker 方式。 带 Cargo 的 Rust 工具链(通过 rustup 安装)。 C 编译器,例如 GCC 或 clang。部分依赖会构建 C 代码。 至少 100 GB 的可用磁盘空间用于 target/。工作区中每个 AWS 服务对应一个 crate,因此全量 debug 构建体积很大,并且会随着服务增加而增长。 多核机器。冷全量构建会编译每个服务 crate,因此首次构建需要较长时间;核心越少,耗时按比例增加。之后,修改单个服务后的重新构建会快得多。

构建并运行 cargo build -p aws-emulator-router cargo run -p aws-emulator-router

模拟器在 127.0.0.1:9297 上提供 HTTPS 服务(自签名证书)。

嵌入式模式会将模拟器编译进你的测试二进制文件,因此你项目的首次 cargo test 会同时构建模拟器的服务 crate 和你自己的代码。请为首次构建和 target/ 预留与上方从源码构建同量级的时间,之后增量构建会很快。建议:在多个项目间复用同一个 CARGO_TARGET_DIR,在 CI 中缓存 target/(或使用 sccache),并将模拟器固定到某个发布提交,以免每次更改都重新构建。

. ├── Cargo.toml # 工作区:每个服务一个成员,加上核心 crate ├── services/ │ └── service-<name>/ # 每个服务一个 CRATE │ ├── smithy-model/ # <name>.json — 驱动线协议的 Smithy 模型 │ ├── build.rs # 从模型生成服务声明 │ ├── src/ │ │ ├── service.rs # 请求路由和拒绝覆盖 │ │ ├── state.rs # 该服务的内存状态 │ │ └── ops/ # 每个操作一个文件 │ └── tests/ ├── core/ │ ├── router/ # 模拟器二进制文件:将所有服务挂载到一个端点 │ └── embedded/ # 进程内(嵌入式模式)门面 ├── vendor/ # 框架 crate — 请勿编辑(更新时会被替换) └── issues/ # 已跟踪的保真度问题

遥测 AWS Emulator 被配置为向 AWS 收集并报告使用数据,以便了解 AWS Emulator 的使用情况。遥测默认开启。AWS Emulator 在收集遥测数据时严格遵循数据最小化原则,防止识别或归属到特定用户、账户或组织。其记录绝不包含你的请求或响应内容、你的代码、你的凭证或个人数据。我们不会与第三方共享遥测数据。

有关收集哪些数据以及如何处理数据的详细信息,请参阅 AWS Emulator 中的遥测。要关闭遥测,请使用以下选项之一。 启动模拟器时将 --telemetry 选项(简写为 -t)设为 off。此设置仅适用于该模拟器进程。 aws-emulator --telemetry off 在容器中,在 docker run 命令的镜像名称后添加 --telemetry off。 在启动模拟器前将 EMULATOR_TELEMETRY 设为 off。此设置适用于你从该 shell 启动的每个模拟器。 EMULATOR_TELEMETRY 接受 on、true 或 1 来开启遥测,接受 off、false 或 0 来关闭。值不区分大小写。任何其他值都会关闭遥测,并且启动通知会显示警告。 export EMULATOR_TELEMETRY=off aws-emulator 使用配置文件

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →