![](/img/trans.png)
[英]Cloudwatch Logs PutLogEvents action fails with com.amazon.coral.service#UnknownOperationException when called from API Gateway
[英]Invoking AWS Gateway API: com.amazon.coral.service#SerializationException
呃,
我正在調用 AWS Api 但我得到了
Endpoint response body before transformations:
{"__type":"com.amazon.coral.service#SerializationException"}
Endpoint response body before transformations:
{
"__type": "com.amazon.coral.service#SerializationException"
}
同一類型職位的特定帖子后出錯。 我啟用了詳細的 Cloudwatch 日志記錄,但它沒有給我任何其他信息。 此外,相關的 API 請求正文在轉換前后被截斷。
是否有一些額外的日志選項可以測試? 我想我只需要在 JSON 中調用原始的 API 並從中刪除字段以查看是什么導致它中斷?
我遇到了幾乎相同的問題/異常錯誤:
我不確定您是否像我一樣在第一次遇到問題時根本沒有映射模板,但提供一個顯然有幫助- 當然它的詳細信息需要滿足您通過網關 API 訪問的 AWS 服務的上下文Integration Request
才能最終解決這個問題! [正如您在自己的答案中針對您的上下文所提供的那樣]。
如果您沒有提供映射模板,則實際上有一個日志語句(在com.amazon.coral.service#SerializationException
之后不久)表明:
Endpoint request body after transformations:
看到那里沒有列出屍體嗎? 這似乎是沒有映射模板時發生的,這是有道理的,因為映射模板將是正文的內容來源(沒有映射模板會導致沒有請求正文) - 例如,下面的映射模板 JSON 也結束了當使用該映射模板時, Endpoint request body after transformations
的Endpoint request body after transformations
完全相同(並且被記錄為完全相同的 JSON)(而不是像上面的日志語句那樣沒有要打印的正文)。
例如,在我的情況下,我的Integration Request
是針對DynamoDB GetItem
(基本上是按照最近的新教程進行的,它的詳細信息/屏幕截圖比我在其他教程中看到的要多: https : //medium.com/@likhita507/using -api-gateway-to-get-data-from-dynamo-db-using-without-using-aws-lambda-e51434a4f5a0 )。 我的Integration Request
的application/json
Mapping Template 像這樣成功結束(只是通過特定值/元組對其復合鍵的表查詢):
{
"TableName": "MyTableName",
"Key": {
"myPartitionKeyName": {"N" : "12345"},
"mySortKeyName": {"N" : "12345"}
}
}
[DynamoDB 復合鍵是 {< 分區鍵 >, < sortKey >} 的元組對。 在我的情況下,它們的名稱為myPartitionKeyName
和mySortKeyName
,它們都是數字類型(是的,它們的"12345"
值在此處仍為 DynamoDB 使用"double-quoted"
,即使它們不是字符串)。]
無論如何......你可能需要確保你至少提供一些映射模板(而不是沒有) - 以及它是一個足夠的(無論你的上下文需要什么)映射模板:)
我在使用 VTL 映射模板直接與 DynamoDB 表集成的 API Gateway REST API 上收到此錯誤。 更改映射模板后開始出現錯誤。
HTTP/2 200
{"__type":"com.amazon.coral.service#SerializationException"}
在使用在線“ JSON 驗證器”工具檢查映射模板 JSON 后,我發現我的模板不是有效的 JSON。 (我在對象列表中有一個額外的,
字符)。 修復模板使其成為有效的 JSON 修復了錯誤
我能夠讓它與
API 網關定義(Swagger):
requestTemplates:
'application/json': '{"stateMachineArn":"YOUR_ARN","input":"$input.body"}'
POSt 請求正文(注意轉義引號。不是單引號):
{\"test\":\"test\"}
我最終通過在集成請求中提供以下映射模板來修復:
#set($input = $input.json('$'))
{
"input": "$util.escapeJavaScript($input).replaceAll("\\'", "'")",
"stateMachineArn": "arn:aws:states:xxxxxxxxxxx"
}
有點討厭的修復,但它奏效了......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.