

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

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

本節提供如何使用、安裝和管理 AWS Serverless Application Model 命令列界面 () 疑難排解錯誤訊息的詳細資訊AWS SAM CLI。

**Topics**
+ [

## 疑難排解
](#install-sam-cli-troubleshooting)
+ [

## 錯誤訊息
](#sam-cli-troubleshoot-messages)
+ [

## 警告訊息
](#sam-cli-troubleshoot-warning)

## 疑難排解
<a name="install-sam-cli-troubleshooting"></a>

如需與 相關的疑難排解指引 AWS SAM CLI，請參閱 [對安裝錯誤進行故障診斷](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 SAM CLI能夠進行 AWS 服務呼叫。若要修正此問題，您必須設定 AWS 登入資料。如需詳細資訊，請參閱[設定 AWS 登入資料](serverless-getting-started-set-up-credentials.md)。

### 錯誤：Windows 中的 FileNotFoundError
<a name="sam-cli-troubleshoot-messages-filenotfound-win"></a>

在 Windows 上執行 命令 AWS SAM CLI時，您可能會看到下列錯誤：

```
Error: FileNotFoundError
```

可能原因： AWS SAM CLI可能會與超過 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。  
如果您使用 安裝 AWS SAM CLI pip，然後安裝另一個取決於較新版本 的套件`aws-sam-translator`，則會發生下列情況：  
+ `aws-sam-translator` 將安裝較新版本的 。
+ 目前版本的 `aws-sam-cli`和較新版本的 `aws-sam-translator`可能不相容。
+ 當您使用 時 AWS SAM CLI，會發生相依性解析程式錯誤。

**解決方案：**

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 安裝到虛擬環境中。這可確保乾淨的安裝環境，並在發生錯誤時隔離環境。如需說明，請參閱[使用 將 AWS SAM CLI 安裝到虛擬環境中 pip](manage-sam-cli-versions.md#manage-sam-cli-versions-install-virtual)。

### 錯誤：沒有這類命令「遠端」
<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 SAM CLI`sam remote invoke`命令已發行 AWS SAM CLI1.88.0 版。您可以執行 `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 將不再維護 的Homebrew安裝程式 AWS SAM ...
<a name="sam-cli-troubleshoot-warning-homebrew"></a>

使用 安裝 AWS SAM CLI 時Homebrew，您會看到下列警告訊息：

```
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 SAM CLI。  

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

**解決方案：若要繼續使用 Homebrew，請使用 社群受管安裝程式。**
+ 您可以自行決定使用 社群受管Homebrew安裝程式。如需說明，請參閱[使用 AWS SAM CLI管理 Homebrew](manage-sam-cli-versions.md#manage-sam-cli-versions-homebrew)。