C#. NET Core AWS Подпись обработчика лямбда-функции для события Cloudwatch - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь написать лямбда-функцию в C# (. NET Core), которая будет обрабатывать, когда в моей учетной записи происходит событие CloudWatch. Я использую платформу бессерверных приложений (https://www.serverless.com/) и ранее успешно писал код обработчика для ответа на запросы / события ApiGateway. Для обработчиков запросов ApiGateway сигнатура методов всегда имела одни и те же два параметра:

publi c APIGatewayProxyResponse SampleHandler (RequestAPIGatewayProxyRequest request, ILambdaContext context)

Per the docs (https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html), первый параметр определяется как "inputType" и обычно c указывается для события, которое вызывает отключение функции, а второй параметр - это общая c контекстная информация лямбда-функции. В настоящее время мне не удалось найти соответствующий тип объекта для события 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?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Из пакета Amazon.Lambda.CloudWatchEvents NuGet вы можете использовать тип CloudWatchEvent. Хитрость в том, что CloudWatchEvent - это общий c класс, зависящий от источника события. В Amazon.Lambda.CloudWatchEvents определены некоторые типы подробностей событий, но в зависимости от типа вашего события вам может потребоваться создать собственный POCO, который будет использоваться для параметра generi c, в котором есть нужные вам поля.

0 голосов
/ 05 августа 2020

Вы можете просто передать свой собственный объект, который хотите принять, в подпись 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\"}";
}
...