
Inspiriert von der AWSLABS AWS-Serverless-Express-Bibliothek Schneiderin für das Fastify-Web-Framework.
Keine Verwendung interner Sockets, die die Injektionsfunktion von Fastify verwendet.
Scheint schneller (wie der Name schon sagt )
$ npm i @fastify/aws-lambda @Fastify/AWS-Lambda kann Optionen nutzen, indem sie übergeben mit: awsLambdaFastify(app, options)
| Eigentum | Beschreibung | Standardwert |
|---|---|---|
| BinaryMimetypen | Auswahl von binären Mimetypen zu bewältigen | [] |
| Durchsetzung 64 | Funktion, die die Antwort empfängt und einen Booleschen zurückgibt, der angibt, ob der Antwortinhalt binär ist oder nicht und sollte base64-codiert sein | undefined |
| Serializelambdaargumente | Aktivieren Sie die Serialisierung des Lambda-Ereignisses und des Kontextes im HTTP-Header x-apigateway-event x-apigateway-context | false (war für <v2.0.0 true ) |
| Dekoratequest | Dekoriert die Fastify -Anfrage mit dem Lambda -Ereignis und der request.awsLambda.event request.awsLambda.context | true |
| DecorationPropertyName | Der Standard -Eigenschaftsname für Anfragedekoration | awsLambda |
| CallbackwaitsforeMptyEventLoop | Siehe: Offizielle Dokumentation | undefined |
| Bühne der Bühne | Behalten den Bühnenteil der API -Gateway -URL | false |
| Pathparameterusedaspath | Verwenden Sie einen definierten Pathparameter als Pfad (dh 'proxy' ). | false |
| ParsecommaseParatedQueryparams | Anfragen mit Kommas in eine Reihe von Werten analysieren. Beeinflusst das Verhalten des QueryString -Parsers mit Kommas, während die Nutzlastformat Version 2.0 verwendet wird | 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
} Wenn wir in Ihrer Lambda -Funktion ausgeführt werden, müssen wir keinen bestimmten Port anhören. Daher exportieren wir die app in diesem Fall einfach. Die lambda.js -Datei verwendet diesen Export.
Wenn Sie Ihre Fastify -Anwendung wie immer ausführen, dh node app.js (die Erkennung dafür könnte require.main === module .
Das ursprüngliche Lambda -Ereignis und der Kontext werden über Fastify -Anfrage übergeben und können so verwendet werden:
app . get ( '/' , ( request , reply ) => {
const event = request . awsLambda . event
const context = request . awsLambda . context
// ...
} ) Wenn es Ihnen nicht gefällt, können Sie dies deaktivieren, indem Sie die decorateRequest -Option auf false einstellen.
Alternativ werden das ursprüngliche Lambda -Ereignis und der Kontext über Header übergeben und können so verwendet werden, wenn die Option serializeLambdaArguments auf true festgelegt wird:
app . get ( '/' , ( request , reply ) => {
const event = JSON . parse ( decodeURIComponent ( request . headers [ 'x-apigateway-event' ] ) )
const context = JSON . parse ( decodeURIComponent ( request . headers [ 'x-apigateway-context' ] ) )
// ...
} ) Da AWS Lambda nun die Verwendung von ECMAScript (ES) -Modulen in Node.js 14 Runtimes ermöglicht, können Sie die Kaltstartlatenz senken, wenn Sie mit vorgesehener Parallelität dank der obersten Aufnahmefunktionalität verwendet werden.
Wir können dies verwenden, indem wir die Funktion fastify.ready() außerhalb der Lambda -Handlerfunktion wie folgt aufrufen:
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#L9Hier finden Sie die Aufklärungsprobleme, in der diese Funktion erörtert wird.
@Fastify/AWS-Lambda (Dekoratequest: Falsch) x 56.892 OPS/Sek. ± 3,73% (79 Läufe abgetastet)
@Fastify/AWS-Lambda x 56.571 OPS/Sek. ± 3,52% (82 abgetastete Läufe)
@Fastify/AWS-Lambda (SerializElambdaargumente: TRUE) x 56.499 OPS/Sek. ± 3,56% (76 abgetastete Läufe)
Serverless-HTTP x 45.867 OPS/SEC ± 4,42% (83 Ausführungen abgetastet)
AWS-Serverless-Fastify x 17.937 OPS/Sek. ± 1,83% (86 abgetastete Läufe)
AWS-Serverless-Express x 16.647 OPS/Sek. ± 2,88% (87 abgetastete Läufe)
Schnellste ist @fastify/aws-lambda (dekoratequest: false), @fastify/aws-lambda
Die auf dieser Seite angezeigten Logos sind die Eigenschaft der jeweiligen Organisationen und werden nicht unter derselben Lizenz wie @Fastify/AWS-Lambda (MIT) verteilt.