我正在跟踪一个演示,并已创建了通过AWSSDK调用的C#Lambda。函数处理程序如下所示:
public async Task<bool> FunctionHandler(string fileName, ILambdaContext context)
这很好用。现在,我想看看是否可以使用API Gateway调用它。我知道为了使它起作用,我需要在函数签名中添加APIGatewayProxyRequest
。我可以将其添加为参数,还是必须替换变量'fileName'?
当我想同时调用函数时,该如何工作?直接通过SDK还是通过APIGateway?我可以使用一种可以通过多种方式调用的功能吗?
答案 0 :(得分:2)
Lambda不支持函数重载,而仅支持特定的函数调用。此外,main方法希望在第一个参数中接收内容,因此在您的示例中为APIGatewayProxyRequest
或filename
。如果Lambda函数是由S3调用的,则它可以是其他对象,基于触发器的来源,例如S3Event
。
您可以定义一个通用方法签名,例如FunctionHandler(Stream inputStream, ILambdaContext context)
,该签名将参数inputStream
解析为APIGatewayProxyRequest
对象。
例如:
Amazon.Lambda.Serialization.Json.JsonSerializer jsonSerializer =
new Amazon.Lambda.Serialization.Json.JsonSerializer();
APIGatewayProxyRequest request =
jsonSerializer.Deserialize<APIGatewayProxyRequest>(inputStream);
通过这种方式,您可以对几种触发器类型使用相同的方法。