
Вдохновленный Awslabs Aws-Serverless-Express Tailor, созданный для Fastify Web Framework.
Без использования внутренних розетков используется функция инъекции FASTIFY.
Кажется быстрее (как следует из названия), чем AWS-Serverless-Express и AWS-Serverless-Fastify
$ npm i @fastify/aws-lambda @Fastify/AWS-Lambda может принимать варианты, передавая их с помощью: awsLambdaFastify(app, options)
| свойство | описание | значение по умолчанию |
|---|---|---|
| бинарные миметипы | Массив бинарных миметипов для обработки | [] |
| Seercipbase64 | Функция, которая получает ответ и возвращает логический, указывающий, является ли содержимое ответа двоичным или нет и должно быть основано на базе64-кодировании | undefined |
| Serializelambdaarguments | Активируйте сериализацию события и контекста Lambda в HTTP Header x-apigateway-event x-apigateway-context | false (было true для <v2.0.0) |
| DecorateRequest | Украшает запрос на фазутики с помощью лямбда request.awsLambda.event request.awsLambda.context и контекста. | true |
| DecorationPropertyName | Имя свойства по умолчанию для украшения запроса | awsLambda |
| CallbackWaitsForeMptyEventloop | См.: Официальная документация | undefined |
| удержание | Сохранить сценическую часть URL API Gateway | false |
| PathparameteruseSpath | Используйте определенный путь в качестве пути (то есть 'proxy' ) | false |
| parsecommaseparatedqueryparams | Парсе -запрос с запятыми в массив ценностей. Влияет на поведение анализатора Querystring с запятыми при использовании формата полезной нагрузки версии 2.0 | true |
const awsLambdaFastify = require ( '@fastify/aws-lambda' )
const app = require ( './app' )
const proxy = awsLambdaFastify ( app )
// or
// const proxy = awsLambdaFastify(app, { binaryMimeTypes: ['application/octet-stream'], serializeLambdaArguments: false /* default is true */ })
exports . handler = proxy
// or
// exports.handler = (event, context, callback) => proxy(event, context, callback)
// or
// exports.handler = (event, context) => proxy(event, context)
// or
// exports.handler = async (event, context) => proxy(event, context) const fastify = require ( 'fastify' )
const app = fastify ( )
app . get ( '/' , ( request , reply ) => reply . send ( { hello : 'world' } ) )
if ( require . main === module ) {
// called directly i.e. "node app"
app . listen ( { port : 3000 } , ( err ) => {
if ( err ) console . error ( err )
console . log ( 'server listening on 3000' )
} )
} else {
// required as a module => executed on aws lambda
module . exports = app
} При выполнении в вашей функции лямбда нам не нужно слушать конкретный порт, поэтому мы просто экспортируем app в этом случае. Файл lambda.js будет использовать этот экспорт.
Когда вы выполняете свое приложение FASTIFY, как всегда, IE node app.js (обнаружение для этого может быть require.main === module ) , вы обычно можете прослушать свой порт, чтобы вы все равно могли выполнять свою функцию фастификации локально.
Оригинальное событие Lambda и контекст передаются с помощью запроса на фазутики и могут использоваться так:
app . get ( '/' , ( request , reply ) => {
const event = request . awsLambda . event
const context = request . awsLambda . context
// ...
} ) Если вам это не нравится, вы можете отключить это, установив опцию decorateRequest на false .
В качестве альтернативы исходное событие Lambda и контекст передаются через заголовки и могут использоваться подобным образом, при установке опции serializeLambdaArguments на true :
app . get ( '/' , ( request , reply ) => {
const event = JSON . parse ( decodeURIComponent ( request . headers [ 'x-apigateway-event' ] ) )
const context = JSON . parse ( decodeURIComponent ( request . headers [ 'x-apigateway-context' ] ) )
// ...
} ) Поскольку AWS Lambda теперь позволяет использовать модули Ecmascript (ES) в node.js 14 Times, вы можете снизить задержку холодного запуска при использовании с подготовленным параллелизмом благодаря функциональности ожидания верхнего уровня.
Мы можем использовать это, вызывая функцию fastify.ready() за пределами функции лямбда -обработчика, например, это:
import awsLambdaFastify from '@fastify/aws-lambda'
import app from './app.js'
export const handler = awsLambdaFastify ( app )
await app . ready ( ) // needs to be placed after awsLambdaFastify call because of the decoration: https://github.com/fastify/aws-lambda-fastify/blob/master/index.js#L9Здесь вы можете найти релевантную проблему, обсуждающую эту функцию.
@FASTIFY/AWS-LAMBDA (DecorateRequest: False) x 56 892 Ops/Sec ± 3,73% (79 прогонов сданы)
@Fastify/AWS-Lambda x 56 571 OPS/SEC ± 3,52% (82 прогона отображаются)
@FASTIFY/AWS-LAMBDA (SerializelAmbdaarguments: True) x 56 499 Ops/Sec ± 3,56% (76 прогонов сданы)
Serverless-HTTP x 45 867 OPS/SEC ± 4,42% (83 прогона отображаются)
AWS-Serverless-Fastify x 17 937 OPS/SEC ± 1,83% (86 пробежек)
AWS-Serverless-Express X 16 647 OPS/SEC ± 2,88% (87 пробежек)
Самый быстрый-это @Fastify/AWS-Lambda (DecorateRequest: False), @Fastify/Aws-Lambda
Логотипы, отображаемые на этой странице, являются свойством соответствующих организаций, и они не распределены по той же лицензии, что и @Fastify/AWS-Lambda (MIT).