[英]How to include only one class from aws-sdk in Lambda
為了改善 AWS Lambda 中的冷啟動延遲,我嘗試只為每個 Lambda 函數包含必要的類。 我怎樣才能只包含 SDK 的 DynamoDB 部分,而不是包含整個 SDK?
// Current method:
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB();
// Desired method:
var AWSdynamodb = require('aws-dynamodb-sdk');
簡短的回答是:您不需要這樣做。
適用於 JavaScript 的 AWS 開發工具包使用動態要求來加載服務。 換句話說,定義了類,但API 數據僅在您實例化服務對象時加載,因此在整個包周圍沒有 CPU 開銷。
唯一可能的成本來自磁盤空間使用(和下載時間),但請注意,Lambda 已經在其末尾捆綁了aws-sdk
包,因此沒有下載時間,並且您實際上使用更少的磁盤空間通過使用從 Lambda 獲得的 SDK 包比使用定制的東西好。
我不認為這是可能的。 npm 注冊表只有 aws-sdk。 https://www.npmjs.com/package/aws-sdk
dynamodb 可能還有其他 npm 包,但我建議只使用 aws 團隊提供的 sdk。
確保在處理程序之外實例化 SDK。
這個例子很好,會導致1s左右的冷啟動時間
const AWS = require("aws-sdk");
const SNS = new AWS.SNS({apiVersion: '2010-03-31'});
exports.handler = function(event, context) {
//do stuff
};
這個例子不好,會導致5s左右的冷啟動時間
exports.handler = function(event, context) {
const AWS = require("aws-sdk");
const SNS = new AWS.SNS({apiVersion: '2010-03-31'});
//do stuff
};
https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html
利用執行上下文重用來提高函數的性能。 在函數處理程序之外初始化 SDK 客戶端和數據庫連接,並在 /tmp 目錄中本地緩存靜態資產。 由您的函數的同一實例處理的后續調用可以重用這些資源。 這節省了執行時間和成本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.