我正在使用API Gateway的AWS Service集成类型通过PutLogEvents操作将日志添加到Cloudwatch Logs服务,如此处所述:https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
我已经成功设置了类似类型的方法,以使用PutItem操作将项目添加到DynamoDB表中,并且效果很好,所以我不确定此方法缺少什么。
我已经仔细检查了模板的拼写错误和问题。已使用CLI工具成功使用PutLogEvents,因此安装似乎一切正常。
以下是AWS破折号中我的设置的一些屏幕截图:
这是我正在使用的映射模板:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr id="result1">
<td class="title">Orange</td>
<td>12</td>
<td>37</td>
</tr>
<tr id="result2">
<td class="title">Apple</td>
<td>12</td>
<td>37</td>
</tr>
<tr id="result3">
<td class="title">Orange</td>
<td>12</td>
<td>37</td>
</tr>
<tr id="result4">
<td class="title">Lemon</td>
<td>12</td>
<td>37</td>
</tr>
</table>
我返回的响应具有200状态代码,但是以下响应正文:
{
"logGroupName": "FromAPI",
"logStreamName": "$input.path('$.streamName')",
"logEvents": [
{
"timestamp": $input.path('$.ts'),
"message": "$input.path('$.message')"
}
]
}
这是已编辑的(xxx)执行日志:
{
"Output": {
"__type": "com.amazon.coral.service#UnknownOperationException",
"message": null
},
"Version": "1.0"
}
什么都没有登录到我的Cloudwatch Logs流中-API网关集成请求响应主体包含UnknownOperationException错误。
我的最佳猜测是由于某种原因该请求未映射到PutLogEvents操作。在这种情况下,奇怪的是状态码是200。
我猜这只是拼写错误-还是我需要发送的其他标头?有什么想法吗?
答案 0 :(得分:-1)
如果在“映射模板”的顶部添加以下行,则该方法应该起作用:
#set($context.requestOverride.header['X-Amz-Target'] = "Logs_20140328.PutLogEvents")
#set($context.requestOverride.header['Content-Type'] = "application/x-amz-json-1.1")
这是非常棘手的,并且没有很好的记录。您可以在sample request for PutLogEvents中找到这些标题。