

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

# 使用 偵錯無伺服器應用程式 AWS SAM
<a name="debug-application"></a>

測試應用程式之後，您就可以偵錯發現的任何問題。使用 AWS SAM 命令列界面 (CLI)，您可以在本機測試和偵錯無伺服器應用程式，然後再將其上傳至 AWS 雲端。偵錯您的應用程式可識別並修正應用程式中的問題或錯誤。

您可以使用 AWS SAM 執行逐步偵錯，這是一種一次執行程式碼一行或指令的方法。當您在 內以偵錯模式本機叫用 Lambda 函數時 AWS SAM CLI，您可以將偵錯工具連接至該函數。使用除錯器，您可以逐步逐行瀏覽程式碼、查看不同變數的值，以及修正問題的方式與任何其他應用程式相同。您可以在進行封裝和部署應用程式的步驟之前，驗證應用程式的行為是否如預期、偵錯錯誤並修正任何問題。

**注意**  
如果您的應用程式包含一或多個層，當您在本機執行和偵錯應用程式時，會下載層套件並在本機主機上快取。如需詳細資訊，請參閱[如何在本機快取層](serverless-sam-cli-layers.md#local-testing-with-layers)。

**Topics**
+ [

# 使用 本機偵錯函數 AWS SAM
](serverless-sam-cli-using-debugging.md)
+ [

# 使用 偵錯時傳遞多個執行時間引數 AWS SAM
](serverless-sam-cli-using-debugging-additional-arguments.md)
+ [

# 使用 CloudFormation Linter 驗證您的 AWS SAM 應用程式
](validate-cfn-lint.md)

# 使用 本機偵錯函數 AWS SAM
<a name="serverless-sam-cli-using-debugging"></a>

您可以使用 AWS SAM 搭配各種 AWS 工具組和偵錯工具，在本機測試和偵錯無伺服器應用程式。Lambda 函數的逐步偵錯可讓您在本機環境中一次識別和修正應用程式中的問題一行或指令。

執行本機逐步偵錯的一些方法包括設定中斷點、檢查變數，以及一次一行執行函數程式碼。本機逐步偵錯可讓您在雲端找到可能遇到的問題並進行故障診斷，藉此加強回饋迴圈。

您可以使用 AWS Toolkits 進行偵錯，也可以 AWS SAM 在偵錯模式下執行。如需詳細資訊，請參閱本節中的主題。

## 使用 AWS 工具組
<a name="serverless-sam-cli-using-aws-toolkits"></a>

AWS 工具組是整合的開發環境 (IDE) 外掛程式，可讓您一次一行執行許多常見的偵錯任務，例如設定中斷點、檢查變數和執行函數程式碼。 AWS 工具組可讓您更輕鬆地開發、偵錯和部署使用 建置的無伺服器應用程式 AWS SAM。它們提供建置、測試、偵錯、部署和叫用整合至 IDE 的 Lambda 函數的體驗。

如需可與 搭配使用之 AWS Toolkit 的詳細資訊 AWS SAM，請參閱下列內容：
+ [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/)
+ [AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/)
+ [AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)

有各種 AWS Toolkit 可與不同的 IDEs 和執行時間組合搭配使用。下表列出支援 AWS SAM 應用程式逐步偵錯的常見 IDE/執行時間組合：


| IDE | 執行時期 | AWS 工具組 | 步驟式偵錯的指示 | 
| --- | --- | --- | --- | 
| Visual Studio 程式碼 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Toolkit for Visual Studio Code | AWS Toolkit for Visual Studio Code 《 使用者指南》中的[使用 AWS 無伺服器應用程式](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps.html)  | 
| AWS Cloud9 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Cloud9，啟用 AWS Toolkit1 |  *AWS Cloud9 《 使用者指南*》中的[使用 AWS Toolkit 使用無 AWS 伺服器應用程式](https://docs.aws.amazon.com/cloud9/latest/user-guide/serverless-apps-toolkit.html)。  | 
| WebStorm | Node.js | AWS Toolkit for JetBrains2 |  在 中[執行 （叫用） 或偵錯本機函數](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html) *AWS Toolkit for JetBrains*  | 
| PyCharm | Python | AWS Toolkit for JetBrains2 |  在 中[執行 （叫用） 或偵錯本機函數](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html) *AWS Toolkit for JetBrains*  | 
| Rider | .NET | AWS Toolkit for JetBrains2 |  在 中[執行 （叫用） 或偵錯本機函數](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html) *AWS Toolkit for JetBrains*  | 
| IntelliJ | Java | AWS Toolkit for JetBrains2 |  在 中[執行 （叫用） 或偵錯本機函數](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html) *AWS Toolkit for JetBrains*  | 
| GoLand | Go | AWS Toolkit for JetBrains2 |  在 中[執行 （叫用） 或偵錯本機函數](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html) *AWS Toolkit for JetBrains*  | 

**備註**：

1. 若要使用 AWS Cloud9 逐步偵錯 AWS SAM 應用程式，必須啟用 AWS Toolkit。如需詳細資訊，請參閱*AWS Cloud9 《 使用者指南*》中的[啟用 AWS 工具組](https://docs.aws.amazon.com/cloud9/latest/user-guide/toolkit-welcome.html#access-toolkit)。

1. 若要使用 AWS Toolkit for JetBrains 逐步偵錯 AWS SAM 應用程式，您必須先依照在 中安裝 中的指示[進行安裝 AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html)和設定*AWS Toolkit for JetBrains*。

## 在偵錯模式下於 AWS SAM 本機執行
<a name="serverless-sam-cli-running-locally"></a>

除了與 AWS Toolkits 整合之外，您也可以 AWS SAM 在偵錯模式下執行 ，以連接到第三方偵錯工具，例如 [ptvsd](https://pypi.org/project/ptvsd/) 或 [delve](https://github.com/go-delve/delve)。

若要 AWS SAM 在偵錯模式下執行，請使用 命令[sam local invoke](sam-cli-command-reference-sam-local-invoke.md)或 [sam local start-api](sam-cli-command-reference-sam-local-start-api.md)搭配 `--debug-port`或 `-d`選項。

例如：

```
# Invoke a function locally in debug mode on port 5858
sam local invoke -d 5858 <function logical id>

# Start local API Gateway in debug mode on port 5858
sam local start-api -d 5858
```

**注意**  
如果您使用的是 `sam local start-api`，本機 API Gateway 執行個體會公開所有 Lambda 函數。不過，由於您可以指定單一偵錯連接埠，因此一次只能偵錯一個函數。您需要在 AWS SAM CLI繫結至連接埠之前呼叫 API，以允許偵錯工具連線。

# 使用 偵錯時傳遞多個執行時間引數 AWS SAM
<a name="serverless-sam-cli-using-debugging-additional-arguments"></a>

您可以選擇將其他執行時間引數傳遞給 AWS SAM ，以更有效地檢查問題和疑難排解變數。這樣做可為偵錯程序提供額外的控制和彈性，這可協助您自訂執行期組態和環境。

若要在偵錯函數時傳遞其他執行期引數，請使用環境變數 `DEBUGGER_ARGS`。這會將引數字串直接傳遞至 AWS SAM CLI用來啟動函數的執行命令。

例如，如果您想要在 Python 函數的執行時間載入 iKPdb 之類的偵錯工具，您可以將以下內容傳遞為 `DEBUGGER_ARGS: -m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0`。這會在執行時間使用您指定的其他引數載入 iKPdb。

在這種情況下，您的完整 AWS SAM CLI命令將是：

```
DEBUGGER_ARGS="-m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0" echo {} | sam local invoke -d 5858 myFunction
```

您可以將除錯器引數傳遞至所有執行時間的函數。

# 使用 CloudFormation Linter 驗證您的 AWS SAM 應用程式
<a name="validate-cfn-lint"></a>

 AWS CloudFormation Linter (cfn-lint) 是一種開放原始碼工具，可用來對 CloudFormation 範本執行詳細的驗證。Cfn-lint 包含由 CloudFormation 資源規格引導的規則。使用 cfn-lint 將您的資源與這些規則進行比較，以接收有關錯誤、警告或資訊建議的詳細訊息。或者，建立自己的自訂規則進行驗證。若要進一步了解 cfn-lint，請參閱 *CloudFormation GitHub 儲存庫*中的 [cfn-lint](https://github.com/aws-cloudformation/cfn-lint)。

 您可以使用 cfn-lint 透過 AWS SAM 命令列界面 AWS Serverless Application Model (AWS SAM) 驗證您的 (AWS SAM CLI) 範本，方法是**sam validate**使用 **--lint**選項執行 。

```
sam validate --lint
```

 若要自訂 cfn-lint 行為，例如建立自訂規則或指定驗證選項，您可以定義組態檔案。若要進一步了解，請參閱 *cfn-lint CloudFormation GitHub 儲存庫*中的[組態檔案](https://github.com/aws-cloudformation/cfn-lint#config-file)。當您執行 時**sam validate --lint**，將會套用組態檔案中定義的 cfn-lint 行為。

## 範例
<a name="validate-cfn-lint-examples"></a>

### 在 AWS SAM 範本上執行 cfn-lint 驗證
<a name="validate-cfn-lint-examples-example1"></a>

```
sam validate --lint --template myTemplate.yaml
```

## 進一步了解
<a name="validate-cfn-lint-learn"></a>

 欲進一步了解 **sam validate** 命令，請參閱 [sam validate](sam-cli-command-reference-sam-validate.md)。