Lambda 함수에서 NodeJS 라이브러리 사용 최적화
그렇기 때문에 Lambda 함수가 실행에 필요한 라이브러리와 종속성만 호출하는 것이 매우 중요합니다. Lambda 함수에 필요하지 않을 수 있지만 메모리에 로드되는 많은 기능이 포함된 AWS-SDK의 경우 특히 그렇습니다.
lambda_test
라는 DynamoDB 테이블에 연결하는 기본 NodeJS 함수를 사용하는 예를 살펴보겠습니다.이것은 테스트에 사용하려는 코드입니다. 전체 AWS-SDK 라이브러리가 호출되고 있지만 DynamoDB만 사용하고 있다는 점에 유의하는 것이 중요합니다.
const AWS = require('aws-sdk');
exports.handler = async (event, context) => {
const documentClient = new AWS.DynamoDB.DocumentClient();
let responseBody = "";
let statusCode = 0;
const params = {
TableName: "lambda_test"
};
try {
const data = await documentClient.scan(params).promise();
responseBody = JSON.stringify(data.Items);
statusCode = 200;
} catch (err) {
responseBody = `Unable to get data: ${err}`;
statusCode = 403;
}
const response = {
statusCode: statusCode,
headers: {
"Content-Type": "application/json"
},
body: responseBody
};
return response;
};
Lumigo 대시보드에서 테스트 호출을 확인하면 메트릭이 상당히 높지만 실행되는 것을 볼 수 있습니다.
이상적으로는 관련 DynamoDB 라이브러리만 호출하려고 합니다. 이 라이브러리만 이 스크립트의 일부로 실행하면 되기 때문입니다. 따라서 코드에서
const AWS = require(‘aws-sdk’)
를 사용하여 전체 SDK를 호출하는 대신 라이브러리의 DynamoDB 부분을 호출하고 시간과 리소스를 절약할 수 있습니다.코드 스니펫에서 두 줄만 변경하면 성능을 향상시킬 수 있습니다. 새로운 테스트 코드는 다음과 같습니다.
const AWS = require('aws-sdk/clients/dynamodb')
exports.handler = async (event, context) => {
const documentClient = new AWS;
let responseBody = "";
let statusCode = 0;
const params = {
TableName: "lambda_test"
};
try {
const data = await documentClient.scan(params).promise();
responseBody = JSON.stringify(data.Items);
statusCode = 200;
} catch (err) {
responseBody = `Unable to get data: ${err}`;
statusCode = 403;
}
const response = {
statusCode: statusCode,
headers: {
"Content-Type": "application/json"
},
body: responseBody
};
return response;
};
이제 변경 사항을 테스트하기 위해 회전을 수행하면 콜드 스타트도 개선되었음을 알 수 있습니다.
Check out some other ways to see how you can optimize your NodeJS lambda functions
Reference
이 문제에 관하여(Lambda 함수에서 NodeJS 라이브러리 사용 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lumigo/optimizing-nodejs-library-use-in-lambda-functions-3hp3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)