Вызов AWS Lambda несколькими способами

#c# #aws-lambda #aws-api-gateway

#c# #aws-lambda #aws-api-gateway

Вопрос:

Я слежу за демонстрацией и создал Lambda на C #, который вызывается через AWSSDK. Обработчик функции выглядит следующим образом:

   public async Task<bool> FunctionHandler(string fileName, ILambdaContext context)        
  

Это работает просто отлично. Теперь я хочу посмотреть, смогу ли я вызвать это с помощью API Gateway. Я понимаю, что для того, чтобы это сработало, мне нужно добавить APIGatewayProxyRequest к сигнатуре функции. Могу ли я добавить это в качестве параметра или мне нужно заменить переменную ‘fileName’?

Как это работает, когда я хочу, чтобы функция вызывалась обоими способами? Напрямую через SDK или через APIGateway? Могу ли я иметь одну функцию, которая вызывается несколькими способами?

Ответ №1:

Lambda не поддерживает перегрузку функций, а только конкретный вызов функции. Кроме того, метод main ожидает получения содержимого в первом аргументе, поэтому в вашем примере это либо APIGatewayProxyRequest , либо filename . Это может быть другой объект, основанный на происхождении триггера, например S3Event , если лямбда-функция была вызвана S3.

Вы можете определить универсальную сигнатуру метода, например, 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);

  

Благодаря этому вы сможете использовать один и тот же метод для нескольких типов триггеров.