Cloudwatch事件的C#.NET核心AWS Lambda函数处理程序签名
我正在尝试用C#(.NETCore)编写一个Lambda函数,该函数将在我的帐户中发生CloudWatch事件时处理。我使用的是无服务器应用程序框架(),以前成功地编写了处理程序代码来响应ApiGateway请求/事件。对于ApiGateway请求处理程序,方法签名始终具有相同的两个参数: 公共APIGatewayProxyResponse SampleHandler(请求ApigatewayProxyRequest请求,ILambdaContext上下文) 根据docs(),第一个参数定义为“inputType”,通常特定于触发函数的事件,第二个参数是通用Lambda函数上下文信息。目前,我未能找到Cloudwatch事件的相应对象类型 我的无服务器应用程序框架YAML文件包含以下事件:Cloudwatch事件的C#.NET核心AWS Lambda函数处理程序签名,c#,amazon-web-services,aws-lambda,C#,Amazon Web Services,Aws Lambda,我正在尝试用C#(.NETCore)编写一个Lambda函数,该函数将在我的帐户中发生CloudWatch事件时处理。我使用的是无服务器应用程序框架(),以前成功地编写了处理程序代码来响应ApiGateway请求/事件。对于ApiGateway请求处理程序,方法签名始终具有相同的两个参数: 公共APIGatewayProxyResponse SampleHandler(请求ApigatewayProxyRequest请求,ILambdaContext上下文) 根据docs(),第一个参数定义为“
functions:
NewRevision:
handler: CsharpHandlers::AwsDotnetCsharp.Handlers::NewDataExchangeSubscriptionRevision
memorySize: 1024 # optional, in MB, default is 1024
timeout: 20 # optional, in seconds, default is 6
events:
- cloudwatchEvent:
event:
source:
- 'aws.dataexchange'
detail-type:
- 'Revision Published To Data Set'
我的问题是,有人知道应该在CloudWatch事件的方法签名中使用什么适当的对象类型吗?从
Amazon.Lambda.CloudWatchEvents
NuGet包中,您可以使用CloudWatchEvent
类型。技巧在于CloudWatchEvent
是一个通用类,具体取决于事件源。Amazon.Lambda.CloudWatchEvents
中定义了一些事件详细信息类型,但根据您的事件类型,您可能必须创建一个自己的POCO,用于包含您关心的字段的通用参数。从Amazon.Lambda.CloudWatchEvents
NuGet包中,您可以使用CloudWatchEvent
类型。技巧在于CloudWatchEvent
是一个通用类,具体取决于事件源。Amazon.Lambda.CloudWatchEvents
中定义了一些事件详细信息类型,但根据您的事件类型,您可能必须创建一个自己的POCO,用于包含您关心的字段的通用参数。您只需将您自己想要接受的对象传递到FunctionHandler签名中即可:
Cloudwatch事件输入:{“RegionId”:“EMEA”}
接受对象的我的代码:
public class Payload
{
public string RegionId { get; set; }
}
private static async Task Main(string[] args)
{
Func<Payload, ILambdaContext, Task<string>> func = FunctionHandler;
using (var handlerWrapper = HandlerWrapper.GetHandlerWrapper(func, new JsonSerializer()))
using (var bootstrap = new LambdaBootstrap(handlerWrapper))
{
await bootstrap.RunAsync();
}
}
}
public async static Task<string> FunctionHandler(Payload payload, ILambdaContext context)
{
// Do something
return "{\"status\":\"Ok\"}";
}
公共类有效负载
{
公共字符串RegionId{get;set;}
}
专用静态异步任务主(字符串[]args)
{
Func Func=函数处理程序;
使用(var handlerWrapper=handlerWrapper.GetHandlerWrapper(func,new JsonSerializer())
使用(var bootstrap=newlambdabootstrap(handlerWrapper))
{
等待bootstrap.RunAsync();
}
}
}
公共异步静态任务FunctionHandler(有效负载、ILambdaContext上下文)
{
//做点什么
返回“{\”状态\“:\”确定\“}”;
}
您可以将自己想要接受的对象传递到FunctionHandler签名中:
Cloudwatch事件输入:{“RegionId”:“EMEA”}
接受对象的我的代码:
public class Payload
{
public string RegionId { get; set; }
}
private static async Task Main(string[] args)
{
Func<Payload, ILambdaContext, Task<string>> func = FunctionHandler;
using (var handlerWrapper = HandlerWrapper.GetHandlerWrapper(func, new JsonSerializer()))
using (var bootstrap = new LambdaBootstrap(handlerWrapper))
{
await bootstrap.RunAsync();
}
}
}
public async static Task<string> FunctionHandler(Payload payload, ILambdaContext context)
{
// Do something
return "{\"status\":\"Ok\"}";
}
公共类有效负载
{
公共字符串RegionId{get;set;}
}
专用静态异步任务主(字符串[]args)
{
Func Func=函数处理程序;
使用(var handlerWrapper=handlerWrapper.GetHandlerWrapper(func,new JsonSerializer())
使用(var bootstrap=newlambdabootstrap(handlerWrapper))
{
等待bootstrap.RunAsync();
}
}
}
公共异步静态任务FunctionHandler(有效负载、ILambdaContext上下文)
{
//做点什么
返回“{\”状态\“:\”确定\“}”;
}