Lambda 함수에서 NodeJS 라이브러리 사용 최적화

Dev/Ops로서 우리는 최종 사용자를 염두에 두고 애플리케이션을 구축합니다. 빠르고 반응이 빠른 애플리케이션 경험을 보장하는 것은 애플리케이션의 성공에 필수적입니다. 서버 측 성능이 당면한 작업에 달려 있고 필요한 것보다 더 많은 리소스를 소비하지 않는지 확인하는 것도 똑같이 중요합니다.

그렇기 때문에 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

좋은 웹페이지 즐겨찾기