
แรงบันดาลใจจาก AWSLABS AWS-Serverless-Express Library Tailor ที่สร้างขึ้นสำหรับ Fastify Web Framework
ไม่มีการใช้ซ็อกเก็ตภายในใช้ประโยชน์จากฟังก์ชั่นการฉีดของ Fastify
ดูเหมือนเร็วกว่า (ตามชื่อหมายถึง) กว่า AWS-Serverless-Express และ AWS-Serverless-Fastify
$ npm i @fastify/aws-lambda @fastify/aws-lambda สามารถใช้ตัวเลือกได้โดยผ่านพวกเขาด้วย: awsLambdaFastify(app, options)
| คุณสมบัติ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| BinaryMimetypes | อาร์เรย์ของ binary mimetypes เพื่อจัดการ | [] |
| enforceBase64 | ฟังก์ชั่นที่ได้รับการตอบสนองและส่งคืนบูลีนที่ระบุว่าเนื้อหาการตอบกลับเป็นไบนารีหรือไม่และควรเข้ารหัส base64 | undefined |
| serializelambdaarguments | เปิดใช้งานการทำให้เป็นอนุกรมของเหตุการณ์และบริบทของแลมบ์ดาในส่วนหัว HTTP x-apigateway-event x-apigateway-context | false (เป็น true สำหรับ <v2.0.0) |
| Decoraterequest | ตกแต่งคำขอ Fastify ด้วยกิจกรรม Lambda และ request.awsLambda.event request.awsLambda.context | true |
| DecorationPropertyName | ชื่อคุณสมบัติเริ่มต้นสำหรับการตกแต่งคำขอ | awsLambda |
| การโทรกลับ | ดู: เอกสารอย่างเป็นทางการ | undefined |
| เก็บรักษาไว้ | รักษาส่วนหนึ่งของ URL Gateway API Gateway | false |
| Pathparameterusedaspath | ใช้ pathparameter ที่กำหนดเป็นเส้นทาง (เช่น 'proxy' ) | false |
| parsemommaseparatedQueryParams | Parse Querystring ด้วยเครื่องหมายจุลภาคเป็นอาร์เรย์ของค่า ส่งผลกระทบต่อพฤติกรรมของตัวแยกวิเคราะห์ 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 ของคุณเช่นเคยเช่น node app.js (การตรวจจับสำหรับสิ่งนี้อาจ require.main === module ) โดยปกติคุณสามารถฟังพอร์ตของคุณได้ดังนั้นคุณยังสามารถเรียกใช้ฟังก์ชั่น Fastify ได้
เหตุการณ์และบริบทของแลมบ์ดาดั้งเดิมผ่านการร้องขอ Fastify และสามารถใช้เช่นนี้ได้:
app . get ( '/' , ( request , reply ) => {
const event = request . awsLambda . event
const context = request . awsLambda . context
// ...
} ) หากคุณไม่ชอบคุณสามารถปิดการใช้งานสิ่งนี้ได้โดยการตั้งค่าตัวเลือก decorateRequest เป็น false
อีกทางเลือกหนึ่งเหตุการณ์และบริบทของแลมบ์ดาดั้งเดิมจะถูกส่งผ่านส่วนหัวและสามารถใช้เช่นนี้ได้หากการตั้งค่าตัวเลือก 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 Runtimes คุณสามารถลดเวลาแฝงเริ่มต้นเย็นเมื่อใช้กับการทำงานพร้อมกันด้วยการทำงานด้วยการรอคอยระดับบนสุด
เราสามารถใช้สิ่งนี้ได้โดยเรียกฟังก์ชั่น 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: จริง) 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)