#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);
Благодаря этому вы сможете использовать один и тот же метод для нескольких типов триггеров.