
靈感來自AWSLABS AWS-Server-Server-Spack-Express Library為Fastify Web框架量身定制。
不使用內部插座,可以利用Fastify的注射功能。
(如名稱所暗示的)似乎比AWS-Serverless-express和AWS-Serverless-Fastify更快
$ npm i @fastify/aws-lambda@fastify/aws-lambda可以通過以下方式通過: awsLambdaFastify(app, options)
| 財產 | 描述 | 預設值 |
|---|---|---|
| 二進制型 | 一系列二進制模擬型要處理 | [] |
| EnforceBase64 | 接收響應並返回布爾值的功能,指示響應內容是否是二進制的,應進行基礎64編碼 | undefined |
| Serializelambdaarguments | 激活HTTP標頭x-apigateway-event x-apigateway-context中Lambda事件和上下文的序列化 | false (對於<v2.0.0是true ) |
| DecoratereQuest | 使用lambda事件和上下文request.awsLambda.event裝飾快速的請求request.awsLambda.context | true |
| DecorationPropertyname | 請求裝飾的默認屬性名稱 | awsLambda |
| callbackwaitsforemptyeventloop | 請參閱:官方文檔 | undefined |
| 保留 | 保留API網關URL的舞台部分 | false |
| Pathparameteraspath | 使用定義的路徑參數作為路徑(即'proxy' ) | false |
| parsecommaseparatedSqueryparams | 用逗號分析成一個值的值。在使用有效載荷格式2.0時,用逗號影響Querystring解析器的行為 | 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文件將使用此導出。
當您像往常一樣執行快速應用程序時,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現在可以在Node.js 14 runtimes中使用Ecmascript(ES)模塊,因此,由於頂級等待功能,您可以降低與配置同時發生時的冷啟動潛伏期。
我們可以通過調用lambda處理程序功能之外的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/sec ±3.56%(76次運行)
無服務器-HTTP X 45,867 OPS/sec ±4.42%(83運行採樣)
AWS-Serverless-Fastify x 17,937 OPS/sec ±1.83%(86行採樣)
AWS-Server-Sexpress x 16,647 OPS/sec ±2.88%(87運行採樣)
最快的是@fastify/aws-lambda(decoraterequest:false), @fastify/aws-lambda
此頁面中顯示的徽標是相應組織的屬性,並且它們的分配與 @fastify/aws-lambda(MIT)相同的許可證。