

# 排查 Lambda 函数的 SnapStart 错误
<a name="snapstart-troubleshooting"></a>

本页内容旨在解决使用 Lambda SnapStart 时出现的常见问题，包括快照创建错误、超时错误和内部服务错误。

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

**错误：**调用 Invoke20150331 操作时出现错误 (SnapStartNotReadyException)：Lambda 正在初始化函数。只要函数状态变为 ACTIVE，即可加以调用。

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

在尝试调用处于 `Inactive` [状态](snapstart-activate.md#snapstart-function-states)的函数版本时，即会发生此错误。如果 14 天未调用函数版本或者 Lambda 定期回收执行环境，函数版本将变为 `Inactive`。

### 解决方案
<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` 阶段超时。

### 解决方案
<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 服务自身的内部错误，而非函数或代码的问题。这些错误通常间歇性发生。

### 解决方案
<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 Parameter Store 和 AWS Secrets Manager 扩展](with-secrets-manager.md)时会发生此错误。

### 解决方案
<a name="snapstart-401-unauthorized-resolution"></a>

AWS Systems Manager Parameter Store 和 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 响应。如果您将另一个 DNS 缓存与 SnapStart 结合使用，则函数从快照恢复时可能会出现连接超时。

### 解决方案
<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>

**错误：**AWS Lambda 无法调用 SnapStart 函数。如果此错误仍然存在，请检查函数的 CloudWatch 日志，看是否存在初始化错误。

### 解决方案
<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 错误。

### 解决方案
<a name="snapstart-creation-latency-resolution"></a>

至少等待 15 分钟让函数版本初始化，然后再调用函数。