Cloudwatch事件的C#.NET核心AWS Lambda函数处理程序签名

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(),第一个参数定义为“

我正在尝试用C#(.NETCore)编写一个Lambda函数,该函数将在我的帐户中发生CloudWatch事件时处理。我使用的是无服务器应用程序框架(),以前成功地编写了处理程序代码来响应ApiGateway请求/事件。对于ApiGateway请求处理程序,方法签名始终具有相同的两个参数:

公共APIGatewayProxyResponse SampleHandler(请求ApigatewayProxyRequest请求,ILambdaContext上下文)

根据docs(),第一个参数定义为“inputType”,通常特定于触发函数的事件,第二个参数是通用Lambda函数上下文信息。目前,我未能找到Cloudwatch事件的相应对象类型

我的无服务器应用程序框架YAML文件包含以下事件:

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上下文)
{
//做点什么
返回“{\”状态\“:\”确定\“}”;
}