

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

# 執行並除錯本機 Amazon API Gateway 資源
<a name="debug-apigateway"></a>

您可以使用 執行 的 VS 程式碼啟動組態`template.yaml`，以執行或偵錯 中指定的 AWS SAM API Gateway `type=aws-sam` 本機資源`invokeTarget.target=api`。

**注意**  
API Gateway 支援 REST 和 HTTP 這兩種類型的 API。不過，具有 的 API Gateway 功能 AWS Toolkit for Visual Studio Code 僅支援 REST APIs。有時 HTTP API 可稱為「API Gateway V2 API」。

**如何執行並除錯本機 API Gateway 資源**

1.  選擇以下其中一種方法來建立 AWS SAM API Gateway 資源的啟動組態：
   + **選項 1：**造訪 AWS SAM 專案中的處理常式原始碼 (.js、.cs 或 .py 檔案），將滑鼠游標移至 Lambda 處理常式上，然後選擇**新增偵錯組態** CodeLens。然後，在功能表中，選擇標示為 **API 事件**的項目。
   + **選項 2：**使用以下語法編輯`launch.json`和建立新的啟動組態。

     ```
     {
       "type": "aws-sam",
       "request": "direct-invoke",
       "name": "myConfig",
       "invokeTarget": {
         "target": "api",
         "templatePath": "n12/template.yaml",
         "logicalId": "HelloWorldFunction"
       },
       "api": {
         "path": "/hello",
         "httpMethod": "post",
         "payload": {
           "json": {}
         }
       }, 
       "sam": {},
       "aws": {}
     }
     ```

1. 在 VS Code **Run** 面板中，選擇啟動組態 (`myConfig`在上述範例中命名）。

1. (選用) 在 Lambda 專案程式碼中新增中斷點。

1.  輸入 **F5** 或在**執行**面板中選擇**播放**。

1. 在輸出窗格中檢視結果。

## 組態
<a name="apigateway-configuration"></a>

如果您使用 `invokeTarget.target` 屬性值 `api`，Toolkit 會變更啟動組態驗證和行為，以便支援 `api` 欄位。

 

```
{
  "type": "aws-sam",
  "request": "direct-invoke",
  "name": "myConfig",
  "invokeTarget": {
    "target": "api",
    "templatePath": "n12/template.yaml",
    "logicalId": "HelloWorldFunction"
  },
  "api": {
    "path": "/hello",
    "httpMethod": "post",
    "payload": {
      "json": {}
    },
    "querystring": "abc=def&qrs=tuv",
    "headers": {
        "cookie": "name=value; name2=value2; name3=value3"
    }
  },
  "sam": {},
  "aws": {}
}
```

將範例中的值更換為如下所示：

**invokeTarget.logicalId**  
API 資源。

**路徑**  
啟動組態請求的 API 路徑，例如 `"path": "/hello"`。  
必須為經由 `invokeTarget.templatePath` 指定，從 `template.yaml` 解析的有效 API 路徑。

**httpMethod**  
以下其中一個動詞：「delete」、「get」、「head」、「options」、「patch」、「post」、「put」。

**payload**  
要在請求中傳送的 JSON 酬載 (HTTP 主體)，結構和規則與 [lambda.payload](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps-run-debug-config-ref.html) 欄位相同。  
`payload.path` 指向包含 JSON 酬載的檔案。  
`payload.json` 指定 JSON 酬載內嵌。

**標頭**  
選用的名稱/值組對應，用來指定要包含在請求中的 HTTP 標頭，如以下範例所示。  

```
"headers": {
     "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5",
     "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5",
     "cookie": "name=value; name2=value2; name3=value3",
     "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
}
```

**querystring**  
選用的字串，用於設定請求中的 `querystring`，例如 `"querystring": "abc=def&ghi=jkl"`。

**AWS**  
如何提供 AWS 連線資訊。如需詳細資訊，請參閱 [除錯無伺服器應用程式的組態選項](serverless-apps-run-debug-config-ref.md)區段中的**AWS 連線 ("aws") 屬性**表。

**sam**  
CLI AWS SAM 如何建置應用程式。如需詳細資訊，請參閱 [除錯無伺服器應用程式的組態選項](serverless-apps-run-debug-config-ref.md)區段中的 **AWS SAM CLI ("sam") 屬性**表。