啟動及管理 Lambda SnapStart - AWS Lambda

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

啟動及管理 Lambda SnapStart

若要使用 SnapStart,請對新的或現有的 Lambda 函數啟動 SnapStart。然後發布並調用函數版本。

啟動 SnapStart (主控台)

為函數啟動 SnapStart
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇函數的名稱。

  3. 選擇組態,然後選擇一般組態

  4. 一般組態窗格中,選擇編輯

  5. 編輯基本設定頁面中,為 SnapStart 選擇已發布的版本

  6. 選擇 儲存

  7. 發佈函數版本。Lambda 會初始化程式碼、建立初始化執行環境的快照,然後快取快照以實現低延遲存取。

  8. 調用函數版本

啟動 SnapStart (AWS CLI)

為現有函數啟動 SnapStart
  1. 執行 update-function-configuration 命令搭配 --snap-start 選項來更新函數組態。

    aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
  2. 使用 publish-version 命令發佈函數版本。

    aws lambda publish-version \ --function-name my-function
  3. 執行 get-function-configuration 命令並指定版本編號,確認已為函數版本啟動 SnapStart。以下範例命令指定第 1 版。

    aws lambda get-function-configuration \ --function-name my-function:1

    如果回應顯示 OptimizationStatusOnStateActive,便會啟動 SnapStart,且快照可用於指定的函數版本。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 執行 invoke 命令並指定版本來調用函數版本。以下範例調用第 1 版。

    aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:1 \ --payload '{ "name": "Bob" }' \ response.json

    如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》AWS CLI 支援的全域命令列選項

建立新函數時啟動 SnapStart
  1. 執行 create-function 命令搭配 --snap-start 選項來建立函數。針對 --role,請指定執行角色的 Amazon Resource Name (ARN)。

    aws lambda create-function \ --function-name my-function \ --runtime "java21" \ --zip-file fileb://my-function.zip \ --handler my-function.handler \ --role arn:aws:iam::111122223333:role/lambda-ex \ --snap-start ApplyOn=PublishedVersions
  2. 使用 publish-version 命令來建立版本。

    aws lambda publish-version \ --function-name my-function
  3. 執行 get-function-configuration 命令並指定版本編號,確認已為函數版本啟動 SnapStart。以下範例命令指定第 1 版。

    aws lambda get-function-configuration \ --function-name my-function:1

    如果回應顯示 OptimizationStatusOnStateActive,便會啟動 SnapStart,且快照可用於指定的函數版本。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 執行 invoke 命令並指定版本來調用函數版本。以下範例調用第 1 版。

    aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:1 \ --payload '{ "name": "Bob" }' \ response.json

    如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》AWS CLI 支援的全域命令列選項

啟動 SnapStart (API)

啟動 SnapStart
  1. 執行以下任意一項:

  2. 使用 PublishVersion 動作發佈函數版本。Lambda 會初始化程式碼、建立初始化執行環境的快照,然後快取快照以實現低延遲存取。

  3. 使用 GetFunctionConfiguration 動作,確認已為函數版本啟動 SnapStart。指定版本編號以確認已為該版本啟動 SnapStart。如果回應顯示 OptimizationStatusOnStateActive,便會啟動 SnapStart,且快照可用於指定的函數版本。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 使用 Invoke 動作調用函數版本。

Lambda SnapStart 和函數狀態

使用 SnapStart時,可能會出現下列函數狀態。

待定

Lambda 正在初始化您的程式碼,並擷取初始化執行環境的快照。在函數上操作的任何調用或其他 API 動作都會失敗。

作用中

快照建立完成,您可以調用函數。若要使用 SnapStart,您必須調用已發佈的函數版本,而不是未發佈版本 ($LATEST)。

非作用中

當 Lambda 定期重新產生函數快照以套用軟體更新時,可能會發生 Inactive 狀態。在此執行個體中,如果函數無法初始化,則函數會進入Inactive狀態。

對於使用 Java 執行期的函數,Lambda 會在 14 天後刪除快照,而不需調用。如果您在 14 天後調用函數版本,Lambda 會傳回 SnapStartNotReadyException 回應並開始初始化新快照。等待函數版本進入 Active 狀態,然後再次調用它。

失敗

Lambda 在執行初始化程式碼或建立快照時發生錯誤。

更新快照

Lambda 會為每個已發佈的函數版本建立快照。若要更新快照,請發佈新函數版本。

使用 SnapStart AWS SDKs

若要從函數進行 AWS SDK 呼叫,Lambda 會擔任函數的執行角色,以產生暫時性的登入資料集。這些憑證在函數調用期間可當成環境變數使用。您不需要直接在程式碼中提供 SDK 的憑證。根據預設,憑證提供者鏈會依序檢查您可以設定憑證的每個位置,並選擇第一個可用的位置,通常是環境變數 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)。

注意

SnapStart 啟動時,Lambda 執行時期會自動使用容器憑證 (AWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKEN),而不是存取金鑰環境變數。這樣可防止憑證在函數還原之前過期。

搭配 AWS CloudFormationAWS SAM、 和 使用 SnapStart AWS CDK

  • AWS CloudFormation:在範本中宣告 SnapStart 實體。

  • AWS Serverless Application Model (AWS SAM):宣告範本中的 SnapStart 屬性。

  • AWS Cloud Development Kit (AWS CDK):使用 SnapStartProperty 類型。

刪除快照

Lambda 會在發生以下情況時刪除快照:

  • 您刪除了函數或函數版本。

  • (僅限 Java 執行時期) 您 14 天內都沒有調用函數版本。連續 14 天都沒有呼叫之後,函數版本會轉換為 Inactive (非作用中) 狀態。如果您在 14 天後調用函數版本,Lambda 會傳回 SnapStartNotReadyException 回應並開始初始化新快照。等待函數版本進入 Active (作用中) 狀態,然後再次調用它。

根據一般資料保護規範 (GDPR),Lambda 會移除與已刪除快照相關聯的所有資源。