
Fastify Web Framework 용 Awslabs Aws-Serverless-Express 라이브러리 재단사에서 영감을 얻었습니다.
내부 소켓을 사용하지 않으면 Fastify의 주입 기능을 사용합니다.
AWS-Serverless-Express 및 AWS-Serverless-Fastify보다 더 빠른 것 같습니다 .
$ npm i @fastify/aws-lambda @fastify/aws-lambda는 awsLambdaFastify(app, options) 과 같이 전달하여 옵션을 취할 수 있습니다.
| 재산 | 설명 | 기본값 |
|---|---|---|
| 바이너리 메모 타이프 | 처리 할 이진 모방 유형의 배열 | [] |
| 시행 64 | 응답을 수신하고 응답 내용이 이진인지 아닌지를 나타내는 부울을 반환하는 기능 64에 인코딩해야합니다. | undefined |
| serializelambdaarguments | HTTP 헤더 x-apigateway-event x-apigateway-context 에서 Lambda 이벤트 및 컨텍스트의 직렬화 활성화 | false (<v2.0.0의 true ) |
| decorateRequest | Lambda 이벤트 및 컨텍스트 request.awsLambda.event request.awsLambda.context 로 Fastify 요청을 장식합니다. | true |
| DecorationPropertyName | 요청 장식의 기본 속성 이름 | awsLambda |
| CallbackwaitsforemptyeventLoop | 공식 문서를 참조하십시오 | undefined |
| retainstage | API 게이트웨이 URL의 단계 부분을 유지하십시오 | false |
| PathParameterusedAspath | 정의 된 PathParameter를 경로로 사용하십시오 (예 : 'proxy' ) | false |
| parsecommaseParatedQueryParams | 쉼표로 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
} Lambda 기능에서 실행되면 특정 포트를들을 필요가 없으므로이 경우 app 내보내기 만하면됩니다. lambda.js 파일은이 내보내기를 사용합니다.
항상 Fastify 응용 프로그램을 실행할 때, 즉, node app.js (이에 대한 감지가 require.main === module ) 는 일반적으로 포트를들을 수 있으므로 여전히 Fastify 기능을 로컬로 실행할 수 있습니다.
원래 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는 이제 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 ± 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 실행 샘플링)
Fastest는 @fastify/aws-lambda (decorateRequest : false), @fastify/aws-lambda입니다
이 페이지에 표시된 로고는 해당 조직의 속성이며 @Fastify/Aws-Lambda (MIT)와 동일한 라이센스로 배포되지 않습니다.