簡體   English   中英

如何在 Lambda 中只包含來自 aws-sdk 的一個類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM