Amazon SAM CLI 故障排除 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon SAM CLI 故障排除

对使用、安装和管理 Amazon Serverless Application Model 命令行界面时出现的错误消息进行故障排除(Amazon SAMCLI)。

安装错误

Linux

Docker 错误:“无法连接到 Docker 进程守护程序。Docker 进程守护程序是否在此主机上运行?”

在某些情况下,要为 ec2-user 提供访问 Docker 进程守护程序的权限,您可能需要重新启动实例。如果您收到此错误,请尝试重启实例。

Shell 错误:“找不到命令”

如果您收到此错误,则表示 Shell 无法在路径中找到 Amazon SAM CLI 可执行文件。验证 Amazon SAM CLI 可执行文件安装目录的位置,然后验证该目录是否位于路径中。

Amazon SAMCLI错误:“/lib64/libc.so.6:找不到 `GLIBC_2.14'版本(/usr/local/ /dist/libz.so.1 要求)” aws-sam-cli

如果您收到此错误,则表示您使用的是不受支持的 Linux 版本,并且内置的 glibc 版本已过时。请尝试以下任一方法:

  • 将您的 Linux 主机升级到最新的 64 位 CentOS、Fedora、Ubuntu 或 Amazon Linux 2 发行版。

  • 按照 安装 Amazon SAM CLI 的说明进行操作。

macOS

安装失败


						 Amazon SAM CLI 安装程序的映像,其中显示安装失败消息

如果您是在为用户安装 Amazon SAM CLI,并且选择了您没有写入权限的安装目录,则可能会出现此错误。请尝试以下任一方法:

  1. 选择您具有写入权限的其他安装目录。

  2. 删除安装程序。然后重新下载并运行安装程序。

错误消息

Curl 错误:“curl:(6) 无法解析:...”

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

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

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

错误:找不到具有给定堆栈名称的确切资源信息

在包含单个 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\"}"}%

错误:无法从堆栈名称中找到资源信息

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

Error: Can't find resource information from stack name (<stack-name>) and resource id (<function-id>)
可能的原因:您在 samconfig.toml 文件中定义了堆栈名称值。

Amazon SAM CLI 会首先在 samconfig.toml 文件中查找堆栈名称。如果已指定堆栈名称,则参数将作为逻辑 ID 值传递。

解决方案:改为传递函数的逻辑 ID。

您可以将函数的逻辑 ID 作为参数而不是函数的 ARN 传递。

解决方案:从配置文件中移除堆栈名称值。

您可以从配置文件中移除堆栈名称值。这可防止 Amazon SAM CLI 将函数 ARN 作为逻辑 ID 值传递。

修改配置文件后,运行 sam build

错误:无法创建托管资源:无法找到凭证

运行 sam deploy 命令时,您遇到以下错误:

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

这意味着您尚未设置允许进行 Amazon 服务呼叫 Amazon SAMCLI的 Amazon 凭据。要解决此问题,您必须设置 Amazon 凭据。有关更多信息,请参阅设置 Amazon 凭证

错误: FileNotFoundError 在 Windows 中

Amazon SAMCLI在 Windows 中运行命令时,你可能会看到以下错误:

Error: FileNotFoundError

可能的原因: Amazon SAMCLI可能会与超过 Windows 最大路径限制的文件路径交互。

解决方案:要解决此问题,必须启用新的长路径行为。为此,请参阅微软 Windows 应用程序开发文档中的 “在 Windows 10、版本 1607 及更高版本中启用长路径”。

错误:pip 的依赖项解析程序...

错误示例文本

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 安装 Amazon SAM CLI,然后安装另一个依赖于较新版本 aws-sam-translator 的软件包,则会出现以下情况:

  • 将会安装较新版本的 aws-sam-translator

  • 当前版本的 aws-sam-cli 和较新版本的 aws-sam-translator 可能不兼容。

  • 使用时 Amazon SAMCLI,将出现依赖关系解析器错误。

解决方案:
  1. 使用 Amazon SAM CLI 本机软件包安装程序。

    1. 使用 pip 卸载 Amazon SAM CLI。有关说明,请参阅卸载 Amazon SAM CLI

    2. 使用本机软件包安装程序安装 Amazon SAM CLI。有关说明,请参阅安装 Amazon SAM CLI

    3. 必要时,使用本机软件包安装程序升级 Amazon SAM CLI。有关说明,请参阅升级 Amazon SAM CLI

  2. 如果您必须使用 pip,我们建议您将 Amazon SAM CLI 安装到虚拟环境中。这样可确保干净的安装环境,并能在出现错误时提供隔离环境。有关说明,请参阅使用 pip 在虚拟环境中安装 Amazon SAM CLI

错误:没有‘remote’这样的命令

运行 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'.
可能的原因:您的 Amazon SAM CLI 版本已过时。

该 Amazon SAMCLIsam remote invoke命令是在 1.88.0 Amazon SAMCLI 版本中发布的。可以运行 sam --version 命令查看版本。

解决方案:将 Amazon SAM CLI 升级到最新版本。

有关说明,请参阅升级 Amazon SAM CLI

错误:需要在本地运行 Amazon SAM 项目Docker。您安装了吗?

运行 sam local start-api 命令时,您遇到以下错误:

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

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

错误:未满足安全限制

运行 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 来回应此提示,即表明您不同意继续部署。

要解决此问题,您具有以下选项:

  • 在经授权的情况下配置应用程序。有关配置授权的更多信息,请参阅 控制 API Gateway API 访问权限

  • 如果您打算在未经授权的情况下拥有可公开访问的 API 端点,请重新开始部署并用 Y 来回答此问题,以表明您同意部署。

消息:身份验证令牌缺失

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

{"message":"Missing Authentication Token"}

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

警告消息

警告:... Amazon 将不再为 Amazon SAM ... 维护Homebrew安装程序

使用 Homebrew 安装 Amazon SAM CLI 时,您看到以下警告消息:

Warning: ... Amazon will no longer maintain the Homebrew installer for Amazon SAM (aws/tap/aws-sam-cli). 
				For AWS supported installations, use the first party installers ...
潜在原因: Amazon 不再维持Homebrew支撑。

从 2023 年 9 月起, Amazon 将不再维护的Homebrew安装程序 Amazon SAMCLI。

解决方案:使用 Amazon 支持的安装方法。
解决方案:要继续使用 Homebrew,请使用社区托管的安装程序。