
AWS 推出官方本地 AWS API 模拟器 AWS Emulator
来源标题:AWS Finally Built Its Own AWS Emulator
AWS 发布了官方本地 AWS API 模拟器 AWS Emulator,开发者无需 AWS 账号即可在本机、开发服务器或 CI 中测试软件。该模拟器无图形界面,启动后通过环境变量把 AWS CLI 或 SDK 指向其端点即可使用,且不额外收费。AWS 明确其仅用于构建和测试,不适用于生产负载或安全测试。
以下正文由 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 用于构建和测试。不要把它用于生产负载,也不要用来测试安全性。参见 Security in AWS Emulator。 配合 AI 编程助手使用时,安装 aws-emulator skill,然后让你的 agent 来搭建模拟器。这需要 AWS CLI 2.35.0 或更高版本。参见 Getting started with an AI coding agent。 aws agent-toolkit add-skill --skill-name aws-emulator --region us-east-1 服务器模式(CLI 和任意 SDK) Linux:安装 RPM 或 Debian 包,然后运行 aws-emulator。参见 Getting started on Linux。 Windows / macOS:在一个由简短 Dockerfile 构建的容器中运行模拟器。参见 Getting started with Docker。 通过设置环境变量,让你的 SDK 指向正在运行的模拟器。参见 Pointing your AWS SDK at AWS Emulator。 把模拟器添加为 dev-dependency,在进程内运行,每个测试使用一个隔离实例。无需设置端点 URL、证书或环境变量。你的测试会把模拟器的 HTTP client 直接接入 SDK client。参见 Getting started with embedded mode,以及下文 Building from source 中关于其构建成本的内容。 要了解各服务与 AWS 的匹配程度,可以查看 releases 页面上每个版本随附的保真度评分。要判断你自己的项目是否预计能正常工作,参见 Checking whether your project works with AWS Emulator。 各个缺口记录在仓库的 issues/ 目录中。尚不能工作的 API 和行为位于 issues/things-that-do-not-work/ 下,已经修复的则移至 issues/things-that-now-work/。 如果你要修改模拟器、从代码检出运行它,或使用嵌入式模式,就需要这些内容。嵌入式模式会把模拟器编译进你的测试二进制文件,因此下面的前置条件和构建成本说明同样适用。大多数其他用户则改为安装预构建包(参见 Quick start)。从源码构建在 Linux(x86_64 和 aarch64)上受支持;在 Windows 和 macOS 上,请使用上面的 Docker 方式。 带 Cargo 的 Rust 工具链(通过 rustup 安装)。 一个 C 编译器,例如 GCC 或 clang。部分依赖会编译 C 代码。 至少 100 GB 的可用磁盘空间用于 target/。该 workspace 中每个 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),并把模拟器固定到某个 release commit,以免每次改动都重新构建。 . ├── Cargo.toml # workspace:每个服务一个成员,外加核心 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/ # 已跟踪的保真度问题 Telemetry AWS Emulator 被配置为向 AWS 收集并上报使用数据,以便了解 AWS Emulator 的使用情况。Telemetry 默认开启。AWS Emulator 在收集 telemetry 数据时严格遵循数据最小化原则,防止识别或归因到特定用户、账号或组织。其记录绝不包含你的请求或响应内容、你的代码、你的凭证或个人数据。我们不会与第三方共享 telemetry。 关于收集哪些数据以及如何处理这些数据的详细信息,参见 Telemetry in AWS Emulator。要关闭 telemetry,请使用以下选项之一。 启动模拟器时把 --telemetry 选项(简写为 -t)设为 off。该设置仅对那个模拟器进程生效。 aws-emulator --telemetry off 在容器中,在 docker run 命令的镜像名之后加上 --telemetry off。 在启动模拟器之前把 EMULATOR_TELEMETRY 设为 off。该设置对你在该 shell 中启动的每个模拟器生效。 EMULATOR_TELEMETRY 接受 on、true 或 1 来开启 telemetry,接受 off、false 或 0 来关闭。取值不区分大小写。任何其他值都会关闭 telemetry,启动提示中会显示一条警告。 export EMULATOR_TELEMETRY=off aws-emulator 使用配置文件
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。