接收lambda InvokeInput的lambda的方法签名是什么?

时间:2018-09-10 16:06:16

标签: go aws-lambda

我想让我的两个lambda相互交流。 Lambda A使用InvokeInput,传递有效负载,如此处的示例所示:

https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/go/example_code/lambda/aws-go-sdk-lambda-example-run-function.go

但是,该示例未显示接收端,即LambdaB。我试图访问Payload,所以我尝试了带有方法签名的处理程序:

func Handler(ctx context.Context, lambdaInput messages.InvokeRequest) (api.Response, error)

以及

func Handler(ctx context.Context, lambdaInput lambda.InvokeInput) (api.Response, error)

在前者上调用lambdaInput.Payload时,尽管将其作为有效载荷发送,但仍返回[]

我找不到与此有关的文档,有人知道我应该使用的正确签名吗?

1 个答案:

答案 0 :(得分:1)

来自AWS文档:https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model-handler-types.html

  

以下列出了有效的处理程序签名。 TIn和TOut表示与encoding / json标准库兼容的类型。有关更多信息,请参见func Unmarshal以了解如何反序列化这些类型。

func ()
func () error
func (TIn), error
func () (TOut, error)
func (context.Context) error
func (context.Context, TIn) error
func (context.Context) (TOut, error)
func (context.Context, TIn) (TOut, error)

因此,这取决于有效负载中的内容。 AWS会尝试反序列化您的数据,并将其与函数中的TIn参数匹配。已经存在一些表示AWS Event类型的类型,但是在您的情况下,您应该编写自己的结构。检查链接以获取一些示例。