【问题标题】:C# .NET Core AWS Lambda Function Handler Signature for Cloudwatch EventCloudwatch 事件的 C# .NET Core AWS Lambda 函数处理程序签名
【发布时间】:2020-05-07 00:08:19
【问题描述】:

我正在尝试用 C# (.NET Core) 编写一个 Lambda 函数,该函数将在我的账户中发生 CloudWatch 事件时进行处理。我正在使用无服务器应用程序框架 (https://www.serverless.com/),并且之前已成功编写处理程序代码以响应 ApiGateway 请求/事件。对于 ApiGateway 请求处理程序,方法签名始终具有相同的两个参数:

public APIGatewayProxyResponse SampleHandler(RequestAPIGatewayProxyRequest request, ILambdaContext context)

根据文档 (https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html),第一个参数定义为“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 事件的方法签名中使用什么适当的对象类型?

【问题讨论】:

    标签: c# amazon-web-services aws-lambda


    【解决方案1】:

    Amazon.Lambda.CloudWatchEvents NuGet 包中,您可以使用CloudWatchEvent 类型。诀窍是CloudWatchEvent 是一个泛型类,具体取决于事件源。 Amazon.Lambda.CloudWatchEvents 中定义了一些事件详细信息类型,但根据您的事件类型,您可能必须创建自己的 POCO 用于具有您关心的字段的通用参数。

    【讨论】:

      【解决方案2】:

      您可以将自己想要接受的对象传递给 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\"}";
      }
      

      【讨论】:

        猜你喜欢
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 2019-02-03
        相关资源
        最近更新 更多