У меня это в основном работает. Все события, отправленные Github, попадают в мою очередь SQS. Веб-крючок отправляет приложение / json с надписью «Отправить мне все» на уровне организации. Я использую следующее сопоставление шаблонов в своем API-шлюзе:
Action=SendMessage&MessageBody={
"bodyJson":"$util.base64Encode($util.json('$'))",
"requestId":"$context.requestId",
"resourcePath":"$context.resourcePath",
"apiId":"$context.apiId",
"stage":"$context.stage",
"resourceId":"$context.resourceId",
"path":"$context.path",
"protocol":"$context.protocol",
"requestTimeEpoch":"$context.requestTimeEpoch",
"X-GitHub-Event":"$method.request.header.X-GitHub-Event",
"X-GitHub-Delivery":"$method.request.header.X-GitHub-Delivery",
"X-Hub-Signature":"$method.request.header.X-Hub-Signature"
}
(я также пробовал '"body Json": "$ util.base64Encode ($ util.body)",' )
Около 5% уведомлений о событиях (различных типов событий, например: status, pu sh) из Github не преобразуются должным образом. Когда я go к base64 декодирую сообщения из очереди, я получаю часть сообщения / часть случайного мусора. Заметили, что повторная отправка одного и того же события завершается неудачно при каждой повторной попытке. (Событие выглядит как правильно сформированный json в пользовательском интерфейсе Github.) Я регистрируюсь в cloudwatch, но журналы усекаются. Поэтому я не могу сказать, сколько из исходного сообщения проходит. Я также попытался установить application / json как двоичный тип носителя. Это просто вызвало сбой всех событий при преобразовании и вернул 500 в Github. Кто-нибудь знает, что я делаю не так или это ошибка?
Обновление Нужно еще немного протестировать, но, думаю, я понял это. Нам нужно urlEncode тела base64Encoded Json, потому что выходные данные кодировки base64 включают символы (+ и /), которые не совместимы с application / x- www-form-urlencoded без кодирования url:
Action=SendMessage&MessageBody={
"bodyJson":"$util.urlEncode($util.base64Encode($input.body))",
"requestId":"$context.requestId",
"resourcePath":"$context.resourcePath",
"apiId":"$context.apiId",
"stage":"$context.stage",
"resourceId":"$context.resourceId",
"path":"$context.path",
"protocol":"$context.protocol",
"requestTimeEpoch":"$context.requestTimeEpoch",
"X-GitHub-Event":"$method.request.header.X-GitHub-Event",
"X-GitHub-Delivery":"$method.request.header.X-GitHub-Delivery",
"X-Hub-Signature":"$method.request.header.X-Hub-Signature"
}