
AWSLABS AWS-Server-Express Libraryテーラーに触発され、Fustify Webフレームワーク向けに作成されました。
内部ソケットを使用せず、Fustifyの注入機能を使用します。
AWS-Server-ExpressやAWS-Serverless-fastifyよりも速く(名前が示唆しているように)
$ npm i @fastify/aws-lambda@fastify/aws-lambdaは、 awsLambdaFastify(app, options)でそれらを渡すことでオプションを取ることができます
| 財産 | 説明 | デフォルト値 |
|---|---|---|
| バイナリマイメティプ | 処理するバイナリマイメティプの配列 | [] |
| EnforceBase64 | 応答を受信し、応答コンテンツがバイナリであるかどうかを示すブール値を返す関数、およびbase64エンコードする必要があります | undefined |
| Serializelambdaarguments | HTTPヘッダーx-apigateway-event x-apigateway-contextでLambdaイベントとコンテキストのシリアル化をアクティブ化する | false (<v2.0.0の場合はtrueでした) |
| 飾り付け | Lambdaイベントとコンテキストrequest.awsLambda.eventでFastifyリクエストを飾る.awslambda.event request.awsLambda.context | true |
| DecorationPropertyname | リクエスト装飾のデフォルトのプロパティ名 | awsLambda |
| callbackwaitsforemptyeventloop | 参照:公式文書 | undefined |
| 保持ステージ | APIゲートウェイURLのステージ部分を保持します | false |
| PathParameterUsedAspath | 定義されたpathparameterをパスとして使用します(すなわち'proxy' ) | false |
| parsecommaseparatedqueryparams | コンマでクエリストリングを一連の値に解析します。ペイロードフォーマットバージョン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ファイルはこのエクスポートを使用します。
wastifyアプリケーションを常に実行する場合、つまりnode app.js (これの検出はrequire.main === module )は通常、ポートを聴くことができます。
元のLambdaイベントとコンテキストは、Fustifyリクエストで渡され、次のように使用できます。
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ランタイムでECMAScript(ES)モジュールを使用できるようになるようになりました。
このように、ラムダハンドラー関数の外側で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ここでは、この機能を議論するApproriateの問題を見つけることができます。
@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回の実行サンプリング)
serverless-http x 45,867 ops/sec ±4.42%(83回の実行がサンプリングされています)
AWS-Serverless-fastify x 17,937 ops/sec ±1.83%(86回の実行がサンプリング)
AWS-SERVERS-EXPRESS X 16,647 OPS/SEC ±2.88%(87回のランがサンプリング)
最速は@fastify/aws-lambda(decoraterequest:false)、 @fastify/aws-lambdaです
このページに表示されるロゴは、それぞれの組織のプロパティであり、 @Fastify/AWS-Lambda(MIT)と同じライセンスの下で配布されていません。