在云原生开发流程中,本地集成测试一直是工程师面临的挑战。当你的应用依赖 AWS SQS 队列服务时,如何在 CI/CD 流水线或本地开发环境中快速验证队列操作逻辑,而不必每次都调用真实的云端资源?Hiraeth 作为一个新兴的本地 AWS 模拟器,提供了轻量且高效的解决方案。
项目定位与核心理念
Hiraeth 是由开发者 SethPyle376 开源的本地 AWS 模拟器,专注于快速集成测试场景。与功能全面的 LocalStack 不同,Hiraeth 的首个发布版本聚焦于 SQS(Simple Queue Service)的行为仿真,采用 Rust 语言实现,底层使用 SQLite 存储状态数据。这种设计使得它极其轻量,启动速度快,且状态可持久化,便于调试和问题复现。
项目明确声明其适用于本地开发和测试环境,而非作为生产环境的 AWS 替代品。这一清晰的边界有助于工程师在正确场景下使用工具,避免将本地模拟器的行为与真实 AWS 服务混为一谈。
架构设计与关键技术
SigV4 认证支持
Hiraeth 实现了 AWS SigV4 签名认证,这是与许多轻量级模拟器的关键区别。真实 AWS SDK 发出的请求携带签名信息,Hiraeth 能够正确解析和验证这些签名。默认的测试凭证为:AWS_ACCESS_KEY_ID=test、AWS_SECRET_ACCESS_KEY=test、AWS_DEFAULT_REGION=us-east-1。这意味着开发者可以直接使用标准 AWS CLI 或各语言 SDK,将端点指向本地地址即可执行操作,无需修改应用代码。
SQLite 状态存储
与 LocalStack 的内存存储或 ElasticMQ 的文件存储不同,Hiraeth 采用 SQLite 作为持久化层。这一选择带来了几个实际优势:数据在容器重启后仍然保留,支持 SQL 查询直接检查队列状态,便于编写复杂的测试断言逻辑。容器默认将数据卷挂载为hiraeth-data,开发者在使用 Docker Compose 时无需额外配置即可实现数据持久化。
双端口架构
Hiraeth 采用双端口设计:AWS 兼容端点监听4566端口,Web 管理 UI 监听4567端口。Web UI 提供了队列浏览、消息检查、属性查看、队列清空和删除等调试功能。需要注意的是,Web UI 当前不启用 SigV4 认证,仅绑定本地接口,确保不会意外暴露测试状态。
SQS API 支持现状
截至当前版本,Hiraeth 对 SQS 核心 API 的支持程度不一。已支持的 API 包括:CreateQueue、DeleteQueue、ListQueues、SendMessage、ReceiveMessage、DeleteMessage以及批量操作版本。GetQueueAttributes、SetQueueAttributes、TagQueue、UntagQueue、PurgeQueue等队列管理 API 也已实现。
部分 API 处于 Partial 状态,表示已实现基础功能但 AWS 边缘行为尚未完全对齐。ReceiveMessage支持最大消息数、可见性超时、等待轮询、消息属性和AWSTraceHeader,但 FIFO 排序语义尚未完整。SendMessage支持消息体、延迟、消息属性、系统属性和 FIFO 元数据存储,但完整的 FIFO 去重语义还未实现。
未实现的 API 包括:AddPermission、RemovePermission(IAM 相关)、ListDeadLetterSourceQueues、StartMessageMoveTask等与死信队列和消息迁移相关的功能。项目文档明确指出,IAM 和队列策略执行暂未实现,错误响应仅保证常见路径的 SDK 兼容性。
快速启动参数
使用 Docker Compose 启动 Hiraeth 的推荐配置如下:
docker compose up --build
环境变量控制项包括:HIRAETH_HOST(默认0.0.0.0)和HIRAETH_PORT(默认4566)控制 AWS 端点;HIRAETH_DATABASE_URL指定 SQLite 路径(默认sqlite://data/db.sqlite);HIRAETH_WEB_ENABLED、HIRAETH_WEB_HOST、HIRAETH_WEB_PORT分别控制 Web UI 的开关和监听地址。
使用 AWS CLI 进行基本操作的示例:
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
aws --endpoint-url http://localhost:4566 sqs create-queue --queue-name local-orders
aws --endpoint-url http://localhost:4566 sqs list-queues
aws --endpoint-url http://localhost:4566 sqs send-message \
--queue-url http://localhost:4566/000000000000/local-orders \
--message-body "hello from hiraeth"
与现有方案的对比
在本地 AWS 模拟器领域,LocalStack 提供了最广泛的服务覆盖,适合需要多 AWS 服务协同测试的场景;ElasticMQ 则是轻量级的 SQS 兼容方案,适合仅需队列功能的简单需求。Hiraeth 的差异化定位在于:Rust 实现带来的性能优势、SQLite 持久化便于状态检查、以及对 SigV4 签名的原生支持。如果你需要一个专注 SQS、状态可查询、且与真实 SDK 请求格式兼容的轻量模拟器,Hiraeth 是值得尝试的选择。
资料来源:Hiraeth GitHub 仓库