AWS SQS 与其链接的 Lambda 之间的映射问题

问题描述 投票:0回答:1

背景

我有一个带有此签名的函数:

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 已正确触发,因为它命中了我的日志代码,但值到达为空。

这可能是什么原因?

c# amazon-web-services .net-core aws-lambda message-queue
1个回答
0
投票

要在 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

© www.soinside.com 2019 - 2024. All rights reserved.