
مستوحاة من مكتبة AWSLABS AWS-Serverless-Express التي تم تصنيعها لإطار الويب Fastify.
لا يوجد استخدام للمآخذ الداخلية ، يستخدم وظيفة حقن Fastify.
يبدو أسرع (كما يوحي الاسم) من AWS-serfless-express و AWS-serverless-fastify
$ npm i @fastify/aws-lambda @fastify/aws-lambda يمكن أن يأخذ الخيارات عن طريق تمريرها بـ: awsLambdaFastify(app, options)
| ملكية | وصف | القيمة الافتراضية |
|---|---|---|
| BinaryMimetypes | مجموعة من المحاكاة الثنائية للتعامل معها | [] |
| EnforceBase64 | الوظيفة التي تتلقى الاستجابة وتُرجع منطقية تشير إلى ما إذا كان محتوى الاستجابة ثنائيًا أم لا ، ويجب ترميزه 64 | undefined |
| Serializelambdaarguments | قم بتنشيط تسلسل حدث Lambda والسياق في HTTP Header x-apigateway-event x-apigateway-context | false (كان true لـ <v2.0.0) |
| DecorateRequest | يزين طلب Fastify مع حدث Lambda و Context request.awsLambda.event request.awsLambda.context | true |
| DecorationPropertyName | اسم الخاصية الافتراضية لتزيين الطلب | awsLambda |
| callbackwaitsforemptyeventloop | انظر: الوثائق الرسمية | undefined |
| الاحتفاظ | احتفظ الجزء المسرحي من عنوان URL بوابة API | false |
| pathparameterusedaspath | استخدم مقياس pathparameter المحدد كمسار (أي 'proxy' ) | false |
| parsecommaseparatedqueryparams | تحليل Querystring مع الفواصل في مجموعة من القيم. يؤثر على سلوك محلل QueryString مع الفواصل أثناء استخدام Payload Format الإصدار 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
} عند تنفيذها في وظيفة Lambda ، لا نحتاج إلى الاستماع إلى منفذ معين ، لذلك نقوم فقط بتصدير app في هذه الحالة. سيستخدم ملف lambda.js هذا التصدير.
عندما تقوم بتنفيذ تطبيق Fastify الخاص بك كما هو الحال دائمًا ، فإن IE node app.js (قد يكون الكشف عن ذلك require.main === module .
يتم تمرير حدث Lambda الأصليين والسياق عبر طلب Fastify ويمكن استخدامه مثل هذا:
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 ، يمكنك خفض زمن انتقال البدء البارد عند استخدامه مع التزامن المتقدم بفضل وظيفة الانتظار العليا.
يمكننا استخدام هذا عن طريق استدعاء وظيفة fastify.ready() خارج وظيفة معالج Lambda ، مثل هذا:
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 Runsed)
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).