
Inspirado no alfaiate da biblioteca AWSLABS AWS-SERVERLESS-EXPRESS, feito para a estrutura da Web do Fastify.
Sem uso de soquetes internos, utiliza a função de injeção do Fastify.
Parece mais rápido (como o nome implica) do que o AWS-Serverless-Express e o AWS-Serverless-Fastify
$ npm i @fastify/aws-lambda @fastify/aws-lambda pode tomar opções passando com: awsLambdaFastify(app, options)
| propriedade | descrição | valor padrão |
|---|---|---|
| Binários Binários | Matriz de mimetipos binários para lidar | [] |
| ExforceBase64 | Função que recebe a resposta e retorna um booleano indicando se o conteúdo da resposta é binário ou não e deve ser codificado base64 | undefined |
| Serializelambdaarguments | Ative a serialização do evento Lambda e o contexto no cabeçalho HTTP x-apigateway-event x-apigateway-context | false (era true para <v2.0.0) |
| decoraterequest | Decora a solicitação do Fastify com o evento Lambda e request.awsLambda.event de contexto.awslambda.event request.awsLambda.context | true |
| DecorationPropertyName | O nome da propriedade padrão para decoração de solicitação | awsLambda |
| callbackwaitsforemptyeventloop | Veja: documentação oficial | undefined |
| retomar | Mantenha a parte do palco do URL da API Gateway | false |
| PathParameterUSUSUSUSTATH | Use um PathParameter definido como caminho (ou seja, 'proxy' ) | false |
| parsecommaMaseparatedQueryparams | Parse Querystring com vírgulas em uma variedade de valores. Afeta o comportamento do analisador de perguntas com vírgulas ao usar o formato de carga útil versão 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
} Quando executados em sua função Lambda, não precisamos ouvir uma porta específica, por isso apenas exportamos o app neste caso. O arquivo lambda.js usará essa exportação.
Quando você executa seu aplicativo Fastify como sempre, ou seja, node app.js (a detecção para isso pode ser require.main === module .
O evento e o contexto Lambda originais são aprovados por solicitação do Fastify e podem ser usados assim:
app . get ( '/' , ( request , reply ) => {
const event = request . awsLambda . event
const context = request . awsLambda . context
// ...
} ) Se você não gosta, pode desativar isso definindo a opção decorateRequest como false .
Como alternativa, o evento e o contexto Lambda originais são passados por meio de cabeçalhos e podem ser usados assim, se definir a opção serializeLambdaArguments como 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' ] ) )
// ...
} ) Como o AWS Lambda agora permite o uso de módulos ECMAScript (s) em node.js 14 tempos de execução, você pode diminuir a latência de partida a frio quando usado com simultaneidade provisionada, graças à funcionalidade de nível superior.
Podemos usar isso chamando a função fastify.ready() fora da função Handler Lambda, como esta:
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#L9Aqui você pode encontrar o problema do APROVORIADO discutindo esse recurso.
@fastify/aws-lambda (decoraterequest: false) x 56.892 Ops/s ± 3,73% (79 execuções amostradas)
@fastify/aws-lambda x 56.571 OPS/s ± 3,52% (82 execuções amostradas)
@fastify/aws-lambda (seriizelambdaarguns: true) x 56.499 OPS/s ± 3,56% (76 execuções amostradas)
servidorless-http x 45.867 OPS/s ± 4,42% (83 execuções amostradas)
AWS-Serverless-Fastify X 17.937 OPS/S. ± 1,83% (86 execuções amostradas)
AWS-Serverless-Express x 16.647 OPS/S. ± 2,88% (87 execuções amostradas)
O mais rápido é @fastify/aws-lambda (decoraterequest: false), @fastify/aws-lambda
Os logotipos exibidos nesta página são propriedades das respectivas organizações e não são distribuídas sob a mesma licença que @fastify/aws-lambda (MIT).