背景
我有一个带有此签名的函数:
public string Function(MyCommand cmd, ILambdaContext context)
哪里
MyCommand
是:
public class MyCommand
{
public string Url { get; set; } = default!;
public string Email { get; set; } = default!;
}
如果我使用此主体在 AWS UI 上测试我的 lambda:
{
'Url': 'https://www.google.com/',
'Email': '[email protected]'
}
我得到了我想要的结果。我已在 cloudwatch 日志上就位登录,对于我的 lambda,我按预期看到以下内容:
Received json: {'Url': 'https://www.google.com/', 'Email': '[email protected]'}
问题
我还为我的 Lambda 设置了一个带有触发器的 SQS 队列。如果我将相同的 JSON 消息添加到该队列,我会得到以下日志输出:
Received json: {'Url': null, 'Email': null}
所以看起来我的 lambda is 已正确触发,因为它命中了我的日志代码,但值到达为空。
这可能是什么原因?
要在 Lambda 函数中处理 SQS 消息,您需要接受
SQSEvent
数据类型。尽管您仅从 SQS 发送了 MyCommand
有效负载,但当它到达 lambda 函数时,消息会转换为 SQSEvent
public string Function(SQSEvent sqsEvent, ILambdaContext context)
{
return sqsEvent.Records.First().Body;
}
附注要访问 lambda 函数中的
SQSEvent
,您需要安装以下 NuGet 包:Amazon.Lambda.SQSEvents