

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

# `AWSSupport-TroubleshootAPIGatewayHttpErrors`
<a name="automation-aws-troubleshootapigatewayhttp-errors"></a>

 **Description** 

**AWSSupport-TroubleshootAPIGatewayHttpErrors** Runbook 透過剖析存取和/或執行日誌和分析錯誤，透過 re：Post 文章和 AWS 文件提供修復步驟，協助疑難排解調用已部署 Amazon API Gateway REST API 時的 5XX/4XX 錯誤。

**重要**  
此 Runbook 具有下列限制：  
必須啟用記錄。請參閱[使用 API Gateway 主控台設定 Amazon CloudWatch API 記錄](https://docs.aws.amazon.com//apigateway/latest/developerguide/set-up-logging.html#set-up-access-logging-using-console)。
日誌必須在 （發生錯誤） 之前啟用。日誌擷取和分析無法回溯完成。
涵蓋的錯誤：500、502、503、504、401、403、429。
僅支援 REST API。此 Runbook 未涵蓋 WebSocket 和 HTTP (v2)。

**重要**  
對於 REST API 擷取 AWS 的 Amazon CloudWatch Logs，以及分析中使用的 CloudWatch Logs Insights，使用此 Runbook 可能會對您的帳戶產生額外費用。如需可能產生之費用的詳細資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。如果`aws:deletestack`步驟失敗，請前往 CloudFormation 主控台手動刪除堆疊。此 Runbook 建立的堆疊名稱開頭為 `AWSSupport-TroubleshootAPIGatewayHttpErrors`。如需有關刪除 CloudFormation 堆疊的資訊，請參閱 AWS CloudFormation 《 使用者指南》中的[刪除堆疊](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。

 **如何運作？** 

Runbook 會執行下列驗證和分析步驟：
+ 驗證指定的 REST API 是否存在，而且您具有必要的許可。
+ 驗證 API 中是否存在指定的階段。
+ 驗證 API 中是否存在指定的資源路徑。
+ 驗證指定的 HTTP 方法是否存在於資源。
+ 分析指定參數和時間範圍的 CloudWatch Logs，以識別錯誤並提供修補建議。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootAPIGatewayHttpErrors) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `apigateway:GET`
+ `logs:CreateLogGroup`
+ `logs:CreateLogStream`
+ `logs:DescribeLogGroups`
+ `logs:DescribeLogStreams`
+ `logs:PutLogEvents`
+ `logs:StartQuery`
+ `logs:GetQueryResults`

IAM 政策範例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:GET",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:StartQuery",
                "logs:GetQueryResults"
            ],
            "Resource": "*"
        }
    ]
}
```

 **指示** 

請依照下列步驟設定自動化：

1. 在文件下的 Systems Manager [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootAPIGatewayHttpErrors/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootAPIGatewayHttpErrors/description) 中導覽至 。

1. 選擇 **Execute automation** (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） 允許 SSM Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，SSM Automation 會使用啟動此 Runbook 之使用者的許可。
     + 類型：`AWS::IAM::Role::Arn`
   + **RestApiId （必要）：**
     + 描述：（必要） 需要故障診斷之 API 的 API ID。必須是 10 個字元的英數字串。
     + 類型：`String`
     + 允許模式： `^[a-zA-Z0-9]{10}$`
   + **StageName （必要）：**
     + 描述：（必要） 部署階段的名稱。必須為 1-128 個字元，其中包含字母、數字、底線或連字號。
     + 類型：`String`
     + 允許模式： `^[a-zA-Z0-9_\\-]{1,128}$`
   + **ResourcePath （選用）：**
     + 描述：（選用） 設定方法的資源路徑。範例：`/`、`/store/items`、`/{resource}`。
     + 類型：`String`
     + 預設：`/`
   + **HttpMethod （選用）：**
     + 描述：（選用） 所設定資源路徑的方法。
     + 類型：`String`
     + 允許的值： `[ANY, DELETE, HEAD, OPTIONS, GET, POST, PUT, PATCH]`
     + 預設：`GET`
   + **StartTime （選用）：**
     + 描述：（選用） 查詢 CloudWatch Logs 的開始日期和時間。格式：`yyyy-MM-ddTHH:mm:ss`UTC 時區。如果未指定，則 預設為目前時間前 3 天。
     + 類型：`String`
     + 允許模式： `^$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]$`
     +  預設：`""`
   + **EndTime （選用）：**
     + 描述：（選用） 查詢 CloudWatch Logs 的結束日期和時間。格式：`yyyy-MM-ddTHH:mm:ss`UTC 時區。如果未指定，則 預設為目前時間。
     + 類型：`String`
     + 允許模式： `^$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]$`
     +  預設：`""`
   + **AccessLogs （選用）：**
     + 描述：（選用） 是否應分析存取日誌。
     + 類型：`Boolean`
     + 允許的值： `[true, false]`
     + 預設：`false`
   + **RequestId （選用）：**
     + 描述：（選用） 觀察到錯誤的請求 ID。必須是有效的 UUID 格式。
     + 類型：`String`
     + 允許模式： `^$|^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`
     + 預設：`""`

1. 選取**執行**。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **CheckApiExists**：

     驗證提供的 REST API 是否存在，而且您具有存取它的必要許可。
   + **CheckStageExists**：

     驗證提供的階段名稱是否存在於指定的 API 中，並擷取存取日誌群組資訊。
   + **CheckResourceExists**：

     驗證提供的資源路徑是否存在於 API 中，並擷取資源 ID。
   + **CheckMethodExists**：

     驗證提供的 HTTP 方法是否存在於指定的資源。
   + **AnalyseLogs**：

     使用提供的參數搜尋日誌，並根據發現的任何錯誤傳回建議。此步驟會分析執行和存取日誌 （如果啟用），以識別 4XX 和 5XX 錯誤，並提供特定的修補指引。

1. 完成後，請檢閱**輸出**區段以取得執行的詳細結果，包括錯誤分析和修復建議。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootAPIGatewayHttpErrors/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)