私はこれを主に機能させています。Github から送信されたすべてのイベントは、最終的に SQS キューに入れられます。Webhook は、組織レベルで "Send me everthing" を使用して application/json を送信しています。API Gateway で次のテンプレート マッピングを使用しています。
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"
}
('"bodyJson":"$util.base64Encode($util.body)" も試しました)
Github からのイベント通知 (ステータス、プッシュなど、さまざまなイベント タイプ) の約 5% が適切に変換されません。キューからメッセージを base64 デコードすると、一部のメッセージ/一部のランダムなジャンクが表示されます。同じイベントの再送信が再試行のたびに失敗することに気付きました。(ただし、Github UI ではイベントは整形式の json のように見えます。) cloudwatch にログを記録していますが、ログが切り詰められています。そのため、元のメッセージがどれだけ伝わったかはわかりません。また、application/json をバイナリ メディア タイプとして設定しようとしました。これにより、変換時にすべてのイベントが失敗し、Github に 500 が返されました。私が間違っていること、またはこれがバグであるかどうかを知っている人はいますか?
更新 もう少しテストする必要がありますが、理解できたと思います。base64 エンコーディングの出力には、url エンコードされていないと application/x-www-form-urlencoded と互換性のない文字 (+ および /) が含まれるため、base64Encoded bodyJson を urlEncode する必要があります。
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"
}