从API网关调用时,Cloudwatch Logs PutLogEvents操作失败,并出现com.amazon.coral.service#UnknownOperationException

时间:2019-04-19 02:41:27

标签: amazon-web-services aws-sdk aws-api-gateway amazon-cloudwatch

我正在使用API​​ Gateway的AWS Service集成类型通过PutLogEvents操作将日志添加到Cloudwatch Logs服务,如此处所述:https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html

我已经成功设置了类似类型的方法,以使用PutItem操作将项目添加到DynamoDB表中,并且效果很好,所以我不确定此方法缺少什么。

我已经仔细检查了模板的拼写错误和问题。已使用CLI工具成功使用PutLogEvents,因此安装似乎一切正常。

以下是AWS破折号中我的设置​​的一些屏幕截图:

enter image description here

这是我正在使用的映射模板:

<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。

我猜这只是拼写错误-还是我需要发送的其他标头?有什么想法吗?

1 个答案:

答案 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中找到这些标题。