以多种方式调用 AWS Lambda

Sco*_*ttG 1 c# aws-lambda aws-api-gateway

我正在关注一个演示,并使用 C# 创建了一个通过 AWSSDK 调用的 Lambda。函数处理程序如下所示:

  public async Task<bool> FunctionHandler(string fileName, ILambdaContext context)        
Run Code Online (Sandbox Code Playgroud)

这很好用。现在我想看看是否可以使用API​​网关调用它。我知道为了使其工作,我需要添加APIGatewayProxyRequest到函数签名中。我可以将其添加为参数还是必须替换变量“fileName”?

当我希望以两种方式调用该函数时,这是如何工作的?直接通过 SDK 还是通过 APIGateway?我可以让一个函数可以通过多种方式调用吗?

小智 5

Lambda不支持函数重载,只支持特定的函数调用。此外, main 方法期望接收第一个参数中的内容,因此在您的示例中它是APIGatewayProxyRequestor 。filename根据触发源,它可以是其他对象,例如S3Event,如果 Lambda 函数是由 S3 调用的。

您可以定义一个通用方法签名,例如FunctionHandler(Stream inputStream, ILambdaContext context),将参数解析inputStreamAPIGatewayProxyRequest对象。
例如:

Amazon.Lambda.Serialization.Json.JsonSerializer jsonSerializer =
new Amazon.Lambda.Serialization.Json.JsonSerializer();

APIGatewayProxyRequest request = 
jsonSerializer.Deserialize<APIGatewayProxyRequest>(inputStream);

Run Code Online (Sandbox Code Playgroud)

这样您就可以对多种触发器类型使用相同的方法。