Documentation
¶
Overview ¶
Package awsease 提供对 HTTP / AWS Lambda / AWS SQS 的统一、便捷封装。
心智模型只有一行:「Invoke(ctx, url, payload) -> (body, err)」。
- url 是 backend://target 字符串,scheme 决定后端(http/https/lambda/sqs); 特性参数(Lambda 异步、SQS 属性/FIFO)以 query 参数写在 url 里;HTTP 后端无特性参数。
- payload 与返回值都只是有效数据本身,默认原样透传,库不包任何信封。 唯一例外是 lambda tunnel 模式(lambda://<fn>/<path>):对端是 lambda 框架 reqresp 模式的函数时,路径必须 in-band,库代为包/拆 reqresp 传输信封 ——信封内仍是裸业务数据(service 应用信封由对端引擎自行包拆,客户端不感知)。
- 一切失败(传输失败、HTTP 非 2xx、Lambda 函数内部错误、tunnel in-band 错误) 都通过 err 表达,不返回多余信息。
主入口是包级 Invoke;需要注入配置(AWS config、mock、超时、本地重定向)时 用 New(opts...) 构造 Client 再调 Client.Invoke。
Index ¶
Constants ¶
const Version = "1.0.0"
Version 是当前模块语义化版本号。
Variables ¶
var ( // ErrBadTarget 表示地址为空 / 缺 scheme / lambda 函数名非法 / SQS 消息体非 UTF-8 等 // —— 调用方一侧的地址/入参问题,重试同样的调用必然同样失败。 ErrBadTarget = errors.New("awsease: invalid target") // ErrUnknownScheme 表示 scheme 不是 http/https/lambda/sqs。 ErrUnknownScheme = errors.New("awsease: unknown scheme") // ErrBadResponse 表示 tunnel 模式下对端响应不是合法的 reqresp 信封 // —— 对端一侧的问题(函数不是 reqresp 模式、或响应被截断/损坏),与地址合法性无关。 ErrBadResponse = errors.New("awsease: invalid tunnel response") )
Functions ¶
func Invoke ¶ added in v0.4.0
Invoke 用包级默认客户端执行一次调用(默认超时、默认 AWS 凭证链,惰性初始化、并发安全)。 需要细控基础设施时用 New(opts...).Invoke。
url 形如 backend://target[?特性参数]:
http/https:整串即请求 URL(含 query,原样透传);方法恒为 POST,无特性参数。
lambda://<fn>[?async=true|1]:fn 是函数名或 ARN;async=true(或 1)即发即忘(返回 body 为 nil)。
lambda://<fn>/<path>[?async=true|1]:tunnel 模式——对端是 lambda 框架 reqresp
模式的函数:裸业务 payload 包进 {"path":"/<path>","payload":"<base64>"}
传输信封,响应拆信封并把 in-band 错误(Response.error,含框架 404 与
service 层错误)翻译成 err。service 应用信封由对端引擎自行包拆,客户端不感知。
sqs://<queue|queue-url>[?group=g&dedup=d&attr.k=v]:group/dedup 是 FIFO 字段,
attr.<key>=<value> 映射为 String 类型 MessageAttributes(可多个)。发送成功返回 body 为 nil。
错误约定:err 非 nil 即本次调用失败(地址非法、传输失败、HTTP 非 2xx、Lambda 函数内部错误、 tunnel in-band 错误、tunnel 响应非信封 ErrBadResponse),此时 body 恒为 nil; err 为 nil 时 body 是后端返回的有效数据(HTTP 响应体 / Lambda 返回 payload; tunnel 模式下为拆完信封的业务数据)。
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 是唯一门面,并发安全(含 SQS QueueUrl 缓存的内部加锁)。零值不可用,必须经 New 构造。
type LambdaAPI ¶ added in v0.4.0
type LambdaAPI interface {
Invoke(ctx context.Context, in *awslambda.InvokeInput, optFns ...func(*awslambda.Options)) (*awslambda.InvokeOutput, error)
}
LambdaAPI 是 doLambda 依赖的最小 Lambda 客户端接口(签名即 aws-sdk-go-v2 原生形状,便于 mock)。
type Option ¶ added in v0.4.0
type Option func(*config)
Option 配置 Client(构造期、基础设施级,构造一次)。
func WithAWSConfig ¶ added in v0.4.0
WithAWSConfig 注入已加载的 aws.Config,共享给 lambda + sqs(生产最常用,一次加载)。
func WithAWSEndpoint ¶ added in v0.4.0
WithAWSEndpoint 为 lambda/sqs 设置 base endpoint(指向 LocalStack 等自建端点)。
func WithHTTPClient ¶ added in v0.4.0
WithHTTPClient 替换底层 *http.Client(transport / 代理 / mTLS / 连接池)。 注意:超时请用 context 或 WithTimeout,注入的 http.Client.Timeout 应留零,避免与 context 超时打架。
func WithLambdaAPI ¶ added in v0.4.0
WithLambdaAPI 注入 Lambda 客户端实现(测试 mock)。
func WithLocalRedirect ¶ added in v0.4.0
WithLocalRedirect 把所有 lambda://、sqs:// 调用改写为对 base 的 HTTP mock 请求(本地切换,可选): lambda://<fn> -> {base}/lambda/<fn>,lambda://<fn>/<path> -> {base}/lambda/<fn>/<path> (请求体即真实 InvokeInput.Payload:tunnel 模式下是信封字节,同步响应同样拆信封), sqs://<q> -> {base}/sqs/<q>,特性参数原样转为重定向 URL 的 query 供 mock 观察。 返回值与校验语义和真实后端对齐(sqs/异步成功返回 nil body、sqs 仍校验 UTF-8), 本地联调验证过的行为切回真实 AWS 不变。
func WithSQSAPI ¶ added in v0.4.0
WithSQSAPI 注入 SQS 客户端实现(测试 mock)。
func WithTimeout ¶ added in v0.4.0
WithTimeout 设置每次调用的默认超时(内部以 context.WithTimeout 套在传入 ctx 上)。默认 30s。 传 0 或负值表示禁用库级超时、完全交给调用方的 ctx(如 Lambda 同步最长可跑 15 分钟的场景)。
type SQSAPI ¶ added in v0.4.0
type SQSAPI interface {
SendMessage(ctx context.Context, in *awssqs.SendMessageInput, optFns ...func(*awssqs.Options)) (*awssqs.SendMessageOutput, error)
GetQueueUrl(ctx context.Context, in *awssqs.GetQueueUrlInput, optFns ...func(*awssqs.Options)) (*awssqs.GetQueueUrlOutput, error)
}
SQSAPI 是 doSQS 依赖的最小 SQS 客户端接口(签名即 aws-sdk-go-v2 原生形状,便于 mock)。
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
aws-ease-mock
command
Command aws-ease-mock 是一个最小的本地 HTTP mock,用于配合 awsease.WithLocalRedirect 联调。
|
Command aws-ease-mock 是一个最小的本地 HTTP mock,用于配合 awsease.WithLocalRedirect 联调。 |
|
examples
|
|
|
http
command
Command http 演示用 aws-ease 调普通 HTTP 后端。
|
Command http 演示用 aws-ease 调普通 HTTP 后端。 |
|
lambda
command
Command lambda 演示用 aws-ease 调 AWS Lambda。
|
Command lambda 演示用 aws-ease 调 AWS Lambda。 |
|
localdev
command
Command localdev 演示本地开发:用 WithLocalRedirect 把 lambda:// 与 sqs:// 打到一个 进程内的 HTTP mock,业务地址串一字不改、完全不碰真实 AWS。
|
Command localdev 演示本地开发:用 WithLocalRedirect 把 lambda:// 与 sqs:// 打到一个 进程内的 HTTP mock,业务地址串一字不改、完全不碰真实 AWS。 |
|
sqs
command
Command sqs 演示用 aws-ease 推送 SQS 消息。
|
Command sqs 演示用 aws-ease 推送 SQS 消息。 |
|
internal
|
|
|
mock
Package mock 提供 aws-ease 本地联调用的 HTTP mock handler,配合 awsease.WithLocalRedirect 使用。
|
Package mock 提供 aws-ease 本地联调用的 HTTP mock handler,配合 awsease.WithLocalRedirect 使用。 |
|
Package tests 是 aws-ease 的黑盒测试套件:只通过公开 API(Invoke + Option) 验证行为,不依赖任何非导出符号。
|
Package tests 是 aws-ease 的黑盒测试套件:只通过公开 API(Invoke + Option) 验证行为,不依赖任何非导出符号。 |