

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

# 對 Lambda 函數的 SnapStart 錯誤進行故障診斷
<a name="snapstart-troubleshooting"></a>

此頁面說明如何解決使用 Lambda SnapStart 時發生的常見問題，包括快照建立錯誤、逾時錯誤和內部服務錯誤。

## SnapStartNotReadyException
<a name="snapstartnotreadyexception"></a>

**錯誤：**呼叫 Invoke20150331 操作時發生錯誤 (SnapStartNotReadyException)：Lambda 正在初始化函數。一旦函數狀態變為「作用中」，即可進行調用。

### 常見原因
<a name="snapstartnotreadyexception-cause"></a>

當嘗試調用處於`Inactive`[狀態](snapstart-activate.md#snapstart-function-states)的函數版本時，便會發生此錯誤。函數版本若超過 14 天未被調用，或在 Lambda 定期回收執行環境時，該函數版本的狀態會變為 `Inactive`

### Resolution
<a name="snapstartnotreadyexception-resolution"></a>

等待函數版本進入 `Active` 狀態，然後再次調用它。

## SnapStartTimeoutException
<a name="snapstart-invocation-failure"></a>

**問題：**當嘗試調用 SnapStart 函數版本時遇到 `SnapStartTimeoutException` 錯誤。

### 常見原因
<a name="snapstart-invocation-failure-cause"></a>

在[還原](lambda-runtime-environment.md#runtimes-lifecycle-restore)階段，Lambda 會還原 Java 執行時期，並執行任何還原後[執行時期勾點](snapstart-runtime-hooks.md)。如果還原後執行時期勾點執行超過 10 秒，且`Restore`階段逾時，則當您嘗試調用函數時便會出現錯誤。網路連線和憑證問題也可能導致 `Restore` 階段逾時。

### Resolution
<a name="snapstart-invocation-failure-resolution"></a>

檢查函數的 CloudWatch 日誌，看看[還原](lambda-runtime-environment.md#runtimes-lifecycle-restore)階段是否發生了逾時錯誤。確定所有還原後勾點在 10 秒內完成。

**Example CloudWatch 日誌**  

```
{ "cause": "Lambda couldn't restore the snapshot within the timeout limit. (Service: Lambda, Status Code: 408, Request ID: 11a222c3-410f-427c-ab22-931d6bcbf4f2)", "error": "Lambda.SnapStartTimeoutException"}
```

## 500 內部服務錯誤
<a name="snapstart-500-error"></a>

**錯誤：**由於已達到並行快照建立限制，Lambda 無法建立新的快照。

### 常見原因
<a name="snapstart-500-error-cause"></a>

500 錯誤是 Lambda 服務本身的內部錯誤，而不是函數或程式碼的問題。這些錯誤通常是間歇性的。

### Resolution
<a name="snapstart-500-error-resolution"></a>

嘗試再次發布函數版本。

## 401 (未經授權)
<a name="snapstart-401-unauthorized"></a>

**錯誤：**錯誤的工作階段字符或標頭金鑰

### 常見原因
<a name="snapstart-401-unauthorized-cause"></a>

搭配 Lambda SnapStart 使用[AWS Systems Manager 參數存放區和 AWS Secrets Manager 延伸](with-secrets-manager.md)時，會發生此錯誤。

### Resolution
<a name="snapstart-401-unauthorized-resolution"></a>

 AWS Systems Manager 參數存放區和 AWS Secrets Manager 擴充功能與 SnapStart 不相容。延伸項目會產生登入資料，以便在函數初始化 AWS Secrets Manager 期間與 通訊，這會導致登入資料錯誤在與 SnapStart 搭配使用時過期。

## UnknownHostException (Java)
<a name="snapstart-dns-caching"></a>

**錯誤：**無法執行 HTTP 請求：`abc.us-east-1.amazonaws.com` 的憑證不符合任何主體別名。

### 常見原因
<a name="snapstart-dns-caching-cause"></a>

Lambda 函數已快取 DNS 回應。如果您透過 SnapStart 使用其他 DNS 快取，則當函數從快照恢復，可能會發生連線逾時的情況。

### Resolution
<a name="snapstart-dns-caching-resolution"></a>

為防止 Java 11 執行時期出現 `UnknownHostException` 失敗，建議將 `networkaddress.cache.negative.ttl` 設定為 0。在 Java 17 和更新版本的執行時期中，則不需要此步驟。您可以使用 `AWS_LAMBDA_JAVA_NETWORKADDRESS_CACHE_NEGATIVE_TTL=0` 環境變數為 Lambda 函數設定此屬性。

## 快照建立失敗
<a name="snapstart-creation-failure"></a>

**Error：** AWS Lambda 無法叫用您的 SnapStart 函數。如果此錯誤持續存在，請檢查函數的 CloudWatch 日誌，看看是否存在初始化錯誤。

### Resolution
<a name="snapstart-creation-failure-resolution"></a>

檢閱函數的 Amazon CloudWatch 日誌，了解檢查點前的[執行時期勾點](snapstart-runtime-hooks.md)逾時。您也可以嘗試發布新的函數版本，這麼做有時可以解決問題。

## 快照建立延遲
<a name="snapstart-creation-latency"></a>

**問題：**發布新的函數版本時，函數會長時間處於`Pending`[狀態](snapstart-activate.md#snapstart-function-states)。

### 常見原因
<a name="snapstart-creation-latency-cause"></a>

Lambda 建立快照時，初始化程式碼最多可能會執行 15 分鐘。時間限制為 130 秒或[設定的函數逾時](configuration-timeout.md) (最長 900 秒)，以較長者為準。

如果函數[已連接至 VPC](configuration-vpc.md#configuration-vpc-attaching)，Lambda 可能還需要在函數的狀態轉變成`Active`之前建立網路介面。如果您嘗試在函數處於`Pending`狀態時調用函數版本，則可能會遇到 409 `ResourceConflictException` 錯誤。如果使用 Amazon API Gateway 端點調用函數，則可能會在 API Gateway 中遇到 500 錯誤。

### Resolution
<a name="snapstart-creation-latency-resolution"></a>

請至少等待 15 分鐘，讓函數版本完成初始化，然後再調用它。