首页 > 解决方案 > 通过 HTTP 请求执行 AWS Cloud Watch API

问题描述

我目前正在尝试执行AWS 云手表 API并从云手表环境中获取日志。我已经通过使用 AWS 提供的 SDK 成功实现了这一点。同样在他们提到的文档中,我们还可以使用 HTTP 请求从云手表获取日志。在以下文档中,他们提到了我们必须从请求中传递的参数。

https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html

问题是还有一些常见的参数要从请求中发送。我需要澄清我们要发送它们的方式。作为查询参数、路径参数或请求标头?

标签: amazon-web-servicesamazon-cloudwatchlogs

解决方案


Cloud Watch Rest API的请求参数应以 JSON 格式在 中发送{},类似于给出的 POST 示例中的方式。其中只有这些logGroupName是必需的,而提到的其他参数是可选的:

**

endTime 
filterPattern
interleaved
limit
logGroupName
logStreamNamePrefix
logStreamNames
nextToken
startTime

**

在整个 HTTP 请求的上下文中:

POST / HTTP/1.1
Host: logs.<region>.<domain>
X-Amz-Date: <DATE>
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=content-type;date;host;user-agent;x-amz-date;x-amz-target;x-amzn-requestid, Signature=<Signature>
User-Agent: <UserAgentString>
Accept: application/json
Content-Type: application/x-amz-json-1.1
Content-Length: <PayloadSizeBytes>
Connection: Keep-Alive
X-Amz-Target: Logs_20140328.FilterLogEvents
 {
   "endTime": number,
   "filterPattern": "mystring",
   "interleaved": boolean,
   "limit": number,
   "logGroupName": "string",
   "logStreamNamePrefix": "string",
   "logStreamNames": [ "string" ],
   "nextToken": "string",
   "startTime": number
}

如上例所示,通用参数作为 HTTP 参数发送。此处需要它们来使用正确的身份验证签署您对 AWS 的请求。(使用 CLI 时,身份验证会在后台自动进行) 这是有关如何为 AWS API 构建规范、签名的 HTTP 请求的官方演练

例如:

Action=ListUsers&
Version=2010-05-08&
X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fiam%2Faws4_request&
X-Amz-Date=20150830T123600Z&
X-Amz-SignedHeaders=content-type%3Bhost%3Bx-amz-date

推荐阅读