AWS SAM CLI 故障排除 - AWS Serverless Application Model

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

AWS SAM CLI 故障排除

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

故障排除

有关与的疑难解答指南 AWS SAMCLI,请参阅排查 安装错误

错误消息

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

尝试调用API网关终端节点时,您会看到以下错误:

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

这意味着您向一个无效的域发送了请求。如果您的无服务器应用程序未能成功部署,或者您的 curl 命令中有错别字,则可能会发生这种情况。使用 AWS CloudFormation 控制台或验证应用程序是否成功部署 AWS 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 文件中定义了堆栈名称值。

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

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

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

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

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

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

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

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

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

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

错误: FileNotFoundError 在 Windows 中

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

Error: FileNotFoundError

可能的原因: AWS 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 安装 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

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

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

  2. 如果您必须使用pip,我们建议您将安装 AWS SAM CLI到虚拟环境中。这样可确保干净的安装环境,并能在出现错误时提供隔离环境。有关说明,请参阅使用 pip 在虚拟环境中安装 AWS 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'.
可能的原因:您的 AWS SAM CLI 版本已过时。

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

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

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

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

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

Error: Running AWS 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

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

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

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

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

消息:身份验证令牌缺失

尝试调用API网关终端节点时,您会看到以下错误:

{"message":"Missing Authentication Token"}

这意味着您已尝试向正确的域发送请求,但URI无法识别。要修复此问题,请验证完整URL内容,然后使用正确的curl命令更新命令URL。

警告消息

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

使用 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 支持的安装方法。
解决方案:要继续使用 Homebrew,请使用社区托管的安装程序。