本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟動及管理 Lambda SnapStart
若要使用 SnapStart,請對新的或現有的 Lambda 函數啟動 SnapStart。然後發布並調用函數版本。
主題
啟動 SnapStart (主控台)
為函數啟動 SnapStart
啟動 SnapStart (AWS CLI)
為現有函數啟動 SnapStart
-
執行 update-function-configuration
命令搭配 --snap-start 選項來更新函數組態。 aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
-
使用 publish-version
命令發佈函數版本。 aws lambda publish-version \ --function-name my-function
-
執行 get-function-configuration
命令並指定版本編號,確認已為函數版本啟動 SnapStart。以下範例命令指定第 1 版。 aws lambda get-function-configuration \ --function-name my-function:
1
如果回應顯示 OptimizationStatus 為
On
且 State 為Active
,便會啟動 SnapStart,且快照可用於指定的函數版本。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
執行 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
-
執行 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 \ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --snap-start ApplyOn=PublishedVersions -
使用 publish-version
命令來建立版本。 aws lambda publish-version \ --function-name
my-function
-
執行 get-function-configuration
命令並指定版本編號,確認已為函數版本啟動 SnapStart。以下範例命令指定第 1 版。 aws lambda get-function-configuration \ --function-name my-function:
1
如果回應顯示 OptimizationStatus 為
On
且 State 為Active
,便會啟動 SnapStart,且快照可用於指定的函數版本。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
執行 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
-
執行以下任意一項:
-
使用 CreateFunction API 動作搭配 SnapStart 參數,建立啟動 SnapStart 的新函數。
-
使用 UpdateFunctionConfiguration 動作搭配 SnapStart 參數,為現有函數啟動 SnapStart。
-
-
使用 PublishVersion 動作發佈函數版本。Lambda 會初始化程式碼、建立初始化執行環境的快照,然後快取快照以實現低延遲存取。
-
使用 GetFunctionConfiguration 動作,確認已為函數版本啟動 SnapStart。指定版本編號以確認已為該版本啟動 SnapStart。如果回應顯示 OptimizationStatus 為
On
且 State 為Active
,便會啟動 SnapStart,且快照可用於指定的函數版本。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
使用 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_ID
、AWS_SECRET_ACCESS_KEY
和 AWS_SESSION_TOKEN
)。
注意
SnapStart 啟動時,Lambda 執行時期會自動使用容器憑證 (AWS_CONTAINER_CREDENTIALS_FULL_URI
和 AWS_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 會在發生以下情況時刪除快照:
根據一般資料保護規範 (GDPR),Lambda 會移除與已刪除快照相關聯的所有資源。