我想要使用我正在创建的 Amazon API Gateway REST API 或 WebSocket API 调试错误。
简短描述
要对 API Gateway REST API 或 WebSocket API 进行故障排除,请使用 Amazon CloudWatch Logs。有关日志格式类型的信息,请参阅用于 API Gateway 的 CloudWatch 日志格式。
注意:HTTP API 仅支持访问日志记录。有关详细信息,请参阅在 API Gateway 中配置 HTTP API 的日志记录。
您可以在日志中找到以下信息:
解决方法
创建 IAM 角色以向 CloudWatch 发送日志
完成以下步骤:
- 打开 AWS Identity and Access Management (IAM) 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 在 Roles(角色)窗格中,选择 Create role(创建角色)。
- 在 Create role(创建角色)页面上,输入以下信息:
对于可信实体,选择 AWS 服务。
对于 use case(用例),选择 API Gateway,然后选择 API Gateway 单选按钮。
选择 Next(下一步)。
- 在 Permissions policies(权限策略)下,使用默认的 AmazonAPIGatewayPushToCloudWatchLogs AWS 托管式策略,该策略具有所有必需的权限。
- 选择 Next(下一步)。
- 在命名、查看和创建下,输入以下信息:
对于角色名称,输入角色的名称。
(可选)对于角色描述,根据偏好编辑描述。
(可选)添加标签)。
选择 Create role(创建角色)。
- 在 Roles(角色)窗格中,选择您创建的角色。
- 在 Summary(摘要)窗格中,记下下一节中要使用的角色的 ARN。
有关权限的信息,请参阅 CloudWatch 日志记录的权限。
在 API Gateway 控制台中添加 IAM 角色
完成以下步骤:
- 打开 API Gateway 控制台。
- 在 API 窗格中,选择 REST API 或 WebSocket API 的名称,而不是 HTTP API。
- 在导航窗格中,选择 Settings(设置)。
- 在 Settings(设置)下,对于 CloudWatch log role ARN(CloudWatch 日志角色 ARN),输入 IAM 角色 ARN。
**注意:**CloudWatch Logs 角色是一种 AWS 区域级配置,您可以将其用于该区域的所有 API。
- 选择 Save(保存)。
**注意:**如果您在不同的区域创建多个 API,请在每个区域完成前面的步骤。
开启 API 日志记录并暂存 API
完成以下步骤:
- 打开 API Gateway 控制台。
- 在导航窗格中,选择 API,然后选择您的 API。
- 在导航窗格中,选择 Stages(阶段),然后选择您的阶段。
- 在 Logs and tracing(日志和跟踪)下,选择 Edit(编辑)。
- 在 CloudWatch logs(CloudWatch 日志)下,从下拉菜单中选择一个级别。
**注意:**要查看完整的请求和响应日志,请选择 Data tracing(数据跟踪)选项,将日志记录级别设置为 Error and info logs(错误和信息日志)。最佳做法是不要为生产 API 开启 Data tracing(数据跟踪),因为数据跟踪可以记录敏感数据。
- 选择 Detailed metrics(详细指标)。
- 在 Custom Access Logging(自定义访问日志记录)下,完成以下步骤:
选择 Enable Access Logging(启用访问日志记录)。
对于 Access Log Destination ARN(访问日志目标 ARN),输入 Amazon Data Firehose 或 CloudWatch 日志组的 ARN。
**注意:**只有 REST API 支持 Firehose ARN。
- 输入日志格式。
- 选择 Save Changes(保存更改)。
测试日志记录设置
**注意:**要向 API 发送新请求,请使用您的客户端应用程序或其他工具,例如 Postman 应用程序或适用于 WebSocket API 的 wscat。
完成以下步骤:
- 打开 CloudWatch 控制台。
- 在导航窗格中的 Logs(日志)下,选择 Log groups(日志组)。
- 对于 Log groups(日志组),选择要调试的 API 的日志组:
对于 REST API,日志组名称采用 API-Gateway-Execution-Logs_apiId/stageName 格式。
对于 WebSocket API,日志组名称采用 /aws/apigateway/apiId/stageName 格式。
**注意:**访问日志位于您启用访问日志记录时指定的日志组中。
- 在 Log streams(日志流)列表中,选择具有最新上次事件时间的日志流,以查看包含您的请求详细信息的消息。
相关信息
API Gateway 映射模板和访问日志记录变量引用
使用 Amazon CloudWatch 指标监控 REST API 执行
使用 CloudWatch 指标监控 WebSocket API 执行