函數代碼
-
從核心邏輯中分離 Lambda 處理程序(入口點)。 這樣您可以創建更容易進行單元測試的函數。
-
利用執行上下文重用來提高函數性能。 確保您的代碼檢索到的外部化配置或依賴關系在初次執行后在本地存儲和引用。限制變量/對象在每次調用時的重新初始化,而是使用靜態初始化/構造函數、全局/靜態變量以及單例。保持活動狀態並重復使用上一次調用中建立的連接(HTTP、數據庫等)。
-
使用 AWS Lambda 環境變量 將操作參數傳遞到您的函數。 例如,您在寫入 Amazon S3 存儲桶時,不應對要寫入的存儲桶名稱進行硬編碼,而應將存儲桶名稱配置為環境變量。
-
控制函數部署程序包中的依賴關系。AWS Lambda 執行環境中包括若干庫,例如適用於 Node.js 和 Python 運行時的 AWS 開發工具包(完整列表位於此處:AWS Lambda 運行時)。Lambda 會定期更新這些庫,以支持最新的功能組合和安全更新。這些更新可能會使 Lambda 函數的行為發生細微變化。要完全控制您的函數所用的依賴關系,建議在部署程序包中包裝所有依賴關系。
-
將部署程序包大小精簡為只包含運行時必要的部分。 這樣會減少調用前下載和解壓縮部署程序包所需的時間。對於用 Java 或 .NET Core 編寫的函數,請不要將整個 AWS 開發工具包庫作為部署程序包的一部分上傳,而是要根據所需的模塊有選擇地挑選開發工具包中的組件(例如 DynamoDB、Amazon S3 開發工具包模塊和 Lambda 核心庫)。
-
將依賴關系
.jar文件置於單獨的 /lib 目錄中,可減少 Lambda 解壓縮部署程序包(用 Java 編寫)所需的時間。這樣比將函數的所有代碼置於具有大量.class文件的同一 jar 中要快。有關說明,請參閱 Java 中的 AWS Lambda 部署程序包。 -
將依賴關系的復雜性降至最低。 首選執行上下文啟動時可以快速加載的更簡單的框架。例如,首選更簡單的 Java 依賴關系注入 (IoC) 框架,如 Dagger 或 Guice,而不是更復雜的 Spring Framework。
-
避免在 Lambda 函數中使用遞歸代碼,因為如果使用遞歸代碼,函數便會自動調用自身,直到滿足某些任意條件為止。這可能會導致意想不到的函數調用量和升級成本。如果您意外地執行此操作,請立即將函數並發執行數限制設置為
0來限制對函數的所有調用,同時更新代碼。
利用 Lambda 函數的環境變量,您可以將設置動態傳遞到函數代碼和庫,而無需對代碼進行任何更改。環境變量是您使用 AWS Lambda 控制台、AWS Lambda CLI 或 AWS Lambda 開發工具包作為函數配置的一部分創建並修改的密鑰值對。AWS Lambda 隨后會使用相應語言所支持的標准 API(如適用於 Node.js 函數的 process.env 將這些密鑰值對提供給您的 Lambda 函數代碼。
您可以使用環境變量幫助庫了解以下信息:安裝文件的目錄、存儲輸出的位置、存儲連接和日志記錄設置等。通過僅這些設置與應用程序邏輯分隔開,您在需要基於不同設置更改相應函數行為時將無需更新您的函數代碼。
假設您希望某個 Lambda 函數在經歷從開發到部署的不同生命周期階段時做出不同的行為。例如,開發、測試和生產階段可能包含函數需要連接的數據庫,而這些數據庫需要不同的連接信息並且使用不同的表名稱。您可以創建環境變量來引用相關數據庫名稱、連接信息或表名稱,並根據相應函數正在執行的階段(例如,開發、測試和生產)設置函數的值,同時您的函數代碼將保持不變。
