

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS SAM CLI 故障排除
<a name="sam-cli-troubleshooting"></a>

本节详细介绍了在使用、安装和管理 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 时如何对错误消息进行故障排除。

**Topics**
+ [问题排查](#install-sam-cli-troubleshooting)
+ [错误消息](#sam-cli-troubleshoot-messages)
+ [警告消息](#sam-cli-troubleshoot-warning)

## 问题排查
<a name="install-sam-cli-troubleshooting"></a>

有关与的疑难解答指南 AWS SAMCLI，请参阅[排查 安装错误](install-sam-cli.md#sam-cli-troubleshoot-install)。

## 错误消息
<a name="sam-cli-troubleshoot-messages"></a>

### Curl 错误：“curl：(6) 无法解析：...”
<a name="sam-cli-troubleshoot-messages-curl"></a>

尝试调用 API Gateway 端点时，您遇到以下错误：

```
curl: (6) Could not resolve: endpointdomain (Domain name not found)
```

这意味着您向一个无效的域发送了请求。如果您的无服务器应用程序未能成功部署，或者您的 **curl** 命令中有错别字，则可能会发生这种情况。使用 CloudFormation 控制台或验证应用程序是否成功部署 AWS CLI，并验证您的**curl**命令是否正确。

### 错误：找不到具有给定堆栈名称的确切资源信息
<a name="sam-cli-troubleshoot-messages-exact-resource"></a>

在包含单个 Lambda 函数资源的应用程序中运行 `sam remote invoke` 命令时，您遇到以下错误：

```
Error: Can't find exact resource information with given <stack-name>. Please provide full resource ARN or --stack-name to resolve the ambiguity.
```

**可能的原因：您没有提供 `--stack-name` 选项。**  
如果没有提供函数 ARN 作为参数，则 `sam remote invoke` 命令要求提供 `--stack-name` 选项。

**解决方案：提供 `--stack-name` 选项。**  
以下是示例：  

```
$ sam remote invoke --stack-name sam-app

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 40593abb-e1ad-4d99-87bd-ac032e364e82 Version: $LATEST
END RequestId: 40593abb-e1ad-4d99-87bd-ac032e364e82
REPORT RequestId: 40593abb-e1ad-4d99-87bd-ac032e364e82  Duration: 11.31 ms      Billed Duration: 12 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 171.71 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

### 错误：无法从堆栈名称中找到资源信息
<a name="sam-cli-troubleshoot-messages-stack-name"></a>

运行 `sam remote invoke` 命令并将 Lambda 函数 ARN 作为参数传递时，您遇到以下错误：

```
Error: Can't find resource information from stack name (<stack-name>) and resource id (<function-id>)
```

**可能的原因：您在 `samconfig.toml` 文件中定义了堆栈名称值。**  
 AWS SAM CLI 会首先在 `samconfig.toml` 文件中查找堆栈名称。如果已指定堆栈名称，则参数将作为逻辑 ID 值传递。

**解决方案：改为传递函数的逻辑 ID。**  
您可以将函数的逻辑 ID 作为参数而不是函数的 ARN 传递。

**解决方案：从配置文件中移除堆栈名称值。**  
您可以从配置文件中移除堆栈名称值。这可防止 AWS SAM CLI 将函数 ARN 作为逻辑 ID 值传递。  
修改配置文件后，运行 `sam build`。

### 错误：无法创建托管资源：无法找到凭证
<a name="sam-cli-troubleshoot-messages-credentials"></a>

运行 **sam deploy** 命令时，您遇到以下错误：

```
Error: Failed to create managed resources: Unable to locate credentials
```

这意味着您尚未设置允许进行 AWS 服务呼叫 AWS SAMCLI的 AWS 凭据。要解决此问题，您必须设置 AWS 凭据。有关更多信息，请参阅 [设置 AWS 凭证](serverless-getting-started-set-up-credentials.md)。

### 错误： FileNotFoundError 在 Windows 中
<a name="sam-cli-troubleshoot-messages-filenotfound-win"></a>

在 Windows 的 AWS SAMCLI 中运行命令时，您可能会遇到以下错误：

```
Error: FileNotFoundError
```

可能的原因： AWS SAMCLI可能会与超过 Windows 最大路径限制的文件路径进行交互。

解决方案：若要解决此问题，必须启用新的长路径行为。若要执行该操作，请参阅 *Microsoft Windows 应用程序开发文档*中的[在 Windows 10 版本 1607 及更高版本中启用长路径](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#enable-long-paths-in-windows-10-version-1607-and-later)。

### 错误：pip 的依赖项解析程序...
<a name="sam-cli-troubleshoot-messages-pip"></a>

*错误示例文本*：

```
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. 
aws-sam-cli 1.58.0 requires aws-sam-translator==1.51.0, but you have aws-sam-translator 1.58.0 which is incompatible. 
aws-sam-cli 1.58.0 requires typing-extensions==3.10.0.0, but you have typing-extensions 4.4.0 which is incompatible.
```

**可能的原因：如果您使用 pip 安装软件包，软件包之间的依赖项可能会发生冲突。**  
`aws-sam-cli` 软件包的每个版本都依赖于 `aws-sam-translator` 软件包的版本。例如，`aws-sam-cli` v1.58.0 可能依赖于 `aws-sam-translator` v1.51.0。  
如果您使用 pip 安装 AWS SAM CLI，然后安装另一个依赖于较新版本 `aws-sam-translator` 的软件包，则会出现以下情况：  
+ 将会安装较新版本的 `aws-sam-translator`。
+ 当前版本的 `aws-sam-cli` 和较新版本的 `aws-sam-translator` 可能不兼容。
+ 使用时 AWS SAMCLI，将出现依赖关系解析器错误。

**解决方案：**

1. 使用 AWS SAM CLI 本机软件包安装程序。

   1. 使用 pip 卸载 AWS SAM CLI。有关说明，请参阅[卸载 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

   1. 使用本机软件包安装程序安装 AWS SAM CLI。有关说明，请参阅[安装 AWS SAM CLI](install-sam-cli.md)。

   1. 必要时，使用本机软件包安装程序升级 AWS SAM CLI。有关说明，请参阅[升级 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade)。

1. 如果您必须使用 pip，我们建议您将 AWS SAM CLI 安装到虚拟环境中。这样可确保干净的安装环境，并能在出现错误时提供隔离环境。有关说明，请参阅[使用 pip 在虚拟环境中安装 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-install-virtual)。

### 错误：没有‘remote’这样的命令
<a name="sam-cli-troubleshoot-messages-command-remote"></a>

运行 `sam remote invoke` 命令时，您遇到以下错误：

```
$ sam remote invoke ...
2023-06-20 08:15:07 Command remote not available
Usage: sam [OPTIONS] COMMAND [ARGS]...
Try 'sam -h' for help.

Error: No such command 'remote'.
```

**可能的原因：您的 AWS SAM CLI 版本已过时。**  
该 AWS SAMCLI`sam remote invoke`命令是在 1.88.0 AWS SAMCLI 版本中发布的。可以运行 `sam --version` 命令查看版本。

**解决方案：将 AWS SAM CLI 升级到最新版本。**  
有关说明，请参阅[升级 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade)。

### 错误：需要在本地运行 AWS SAM 项目Docker。您安装了吗？
<a name="sam-cli-troubleshoot-messages-docker"></a>

运行 **sam local start-api** 命令时，您遇到以下错误：

```
Error: Running AWS SAM projects locally requires Docker. Have you got it installed?
```

这意味着您未正确安装 Docker。需要有 Docker 才能在本地测试应用程序。要解决此问题，请按照有关在开发主机上安装 Docker 的说明操作。有关更多信息，请参阅 [安装 Docker](install-docker.md)。

### 错误：未满足安全限制
<a name="sam-cli-troubleshoot-messages-security-constraints"></a>

运行 **sam deploy --guided** 时，系统用问题 `Function may not have authorization defined, Is this okay? [y/N]` 向您发出提示。如果您用 **N**（默认选项）来回应此提示，将会出现以下错误：

```
Error: Security Constraints Not Satisfied
```

此提示告知您，您即将部署的应用程序可能在未经授权的情况下配置了可公开访问的 Amazon API Gateway API。用 **N** 来回应此提示，即表明您不同意继续部署。

要解决此问题，您具有以下选项：
+ 在经授权的情况下配置应用程序。有关配置授权的更多信息，请参阅 [使用您的 AWS SAM 模板控制 API 访问权限](serverless-controlling-access-to-apis.md)。
+ 如果您打算在未经授权的情况下拥有可公开访问的 API 端点，请重新开始部署并用 **Y** 来回答此问题，以表明您同意部署。

### 消息：身份验证令牌缺失
<a name="sam-cli-troubleshoot-messages-auth-token"></a>

尝试调用 API Gateway 端点时，您遇到以下错误：

```
{"message":"Missing Authentication Token"}
```

这意味着您向正确的域发送了请求，但系统无法识别 URI。要解决此问题，请验证完整的 URL，然后使用正确的 URL 更新 **curl** 命令。

## 警告消息
<a name="sam-cli-troubleshoot-warning"></a>

### 警告：... AWS 将不再为 AWS SAM ... 维护Homebrew安装程序
<a name="sam-cli-troubleshoot-warning-homebrew"></a>

使用 Homebrew 安装 AWS SAM CLI 时，您看到以下警告消息：

```
Warning: ... AWS will no longer maintain the Homebrew installer for AWS SAM (aws/tap/aws-sam-cli). 
				For AWS supported installations, use the first party installers ...
```

**潜在原因： AWS 不再维持Homebrew支撑。**  
从 2023 年 9 月起， AWS 将不再维护的Homebrew安装程序 AWS SAMCLI。  

**解决方案：使用 AWS 支持的安装方法。**
+ 您可以在上找到 AWS 支持的安装方法[安装 AWS SAM CLI](install-sam-cli.md)。

**解决方案：要继续使用 Homebrew，请使用社区托管的安装程序。**
+ 您可以自行决定使用社区托管的 Homebrew 安装程序。有关说明，请参阅[使用 Homebrew 管理 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-homebrew)。