以 Lambda 處理獨特性 SnapStart - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

以 Lambda 處理獨特性 SnapStart

當呼叫在 SnapStart 函數上擴展時,Lambda 會使用單一初始化快照來恢復多個執行環境。如果您的初始化程式碼會產生包含在快照中的唯一內容,則在跨執行環境中重複使用該內容時,該內容可能不是唯一的。為了在使用時保持唯一性 SnapStart,您必須在初始化後生成唯一的內容。這包括用於生成偽隨性的獨特,獨特的秘密和熵。IDs

以下是維持程式碼唯一性的建議最佳實務。Lambda 也提供開放原始碼SnapStart 掃描工具,協助檢查是否具有唯一性的程式碼。如果您在初始化階段產生唯一資料,便可使用執行階段掛鉤來還原唯一性。使用執行階段掛鉤,您可以在 Lambda 建立快照前執行特定程式碼,或在 Lambda 從快照恢復函數後立即執行特定程式碼。

避免儲存初始化期間依賴唯一性的狀態

在函數的初始化階段,請避免快取預定為唯一的資料,例如產生用於日誌記錄的唯一 ID。相反地,建議您在函數處理常式中產生唯一的資料,或使用執行階段掛鉤

範例 - 在函數處理常式中產生唯一 ID

下面的實例演示瞭如何在函數處理程序UUID中生成一個。

import java.util.UUID; public class Handler implements RequestHandler<String, String> { private static UUID uniqueSandboxId = null; @Override public String handleRequest(String event, Context context) { if (uniqueSandboxId == null) uniqueSandboxId = UUID.randomUUID(); System.out.println("Unique Sandbox Id: " + uniqueSandboxId); return "Hello, World!"; } }

使用加密安全的偽隨機數生成器()CSPRNGs

如果您的應用程式依賴於隨機性,我們建議您使用加密編譯安全的隨機數產生器 ()。CSPRNGsJava 的 Lambda 受管執行階段包含兩個內建 CSPRNGs (Open SSL 1.0.2 和java.security.SecureRandom),可自動維護隨機性。 SnapStart始終從中獲取隨機數/dev/random/dev/urandom保持隨機性的軟件。 SnapStart

AWS 從下表中指定的最小版本 SnapStart 開始,密碼編譯程式庫會自動維持隨機性。如果您將這些程式庫與 Lambda 函數搭配使用,請務必使用下列最低版本或更新版本:

程式庫 最低支援版本 (x86) 最低支援版本 (ARM)
AWS 利布加密貨幣 (AWS-LC)

1.16.0

1.30.0

AWS 利桑比加密 FIPS

2.0.13

2.0.13

如果您透過下列程式庫將先前的加密程式庫與 Lambda 函數一起封裝為傳遞相依性,請確定您使用下列最低版本或更新版本:

程式庫 最低支援版本 (x86) 最低支援版本 (ARM)
AWS SDK for Java 2.x

2.23.20

2.26.12

AWS Java 的通用運行時

0.29.8

0.29.25

Amazon Corretto 加密提供商

2.4.1

2.4.1
Amazon Corretto 加密提供商 FIPS

2.4.1

2.4.1
範例 — 爪哇. 安全性. SecureRandom

下列範例使用 java.security.SecureRandom,即使從快照還原函數,也會產生唯一的序號。

import java.security.SecureRandom; public class Handler implements RequestHandler<String, String> { private static SecureRandom rng = new SecureRandom(); @Override public String handleRequest(String event, Context context) { for (int i = 0; i < 10; i++) { System.out.println(rng.next()); } return "Hello, World!"; } }

SnapStart 掃描工具

Lambda 提供掃描工具,可協助檢查確保唯一性的程式碼。 SnapStart 掃描工具是一種開放原始碼SpotBugs外掛程式,可針對一組規則執行靜態分析。掃描工具有助於識別可能會破壞有關唯一性假設的潛在程式碼實作。如需安裝指示和掃描工具執行的檢查清單,請參閱上 GitHub的 aws-lambda-snapstart-java-rules 存放庫。

若要深入了解如何使用處理唯一性 SnapStart,請參閱 AWS Compute 部落格 AWS Lambda SnapStart上的加快啟動速度。