はじめに
今年のカレンダーはとある会社のとあるチームで活動した1年間を振り返っていきます
今回初めてAPI Gateway WebSocket APIに触れたのですが発生したエラーの詳細までは追えないらしく、問題解決までに時間がかかってしまったので簡単にまとめてみたいと思います。
やりたいこと
- フロントからデータをWebSocket経由でAPIに渡したい
- フロントから受け取ったデータはバックエンドで整形する
使用技術
- API Gateway WebSocket API
- Lambda
- CloudWatch
登場人物
山田さん:
他チームからヘルプに来てくれた真面目で素直な新メンバー。音声繋いでペアプロしているが声質や話し方が某アイドルグループの某メンバーにそっくり(な気がする)。
おっとりさん:
山田さんと同じチームメンバーで私と同期。社内ではマスコット的な存在となっている。山田さんと私が担当しているシステムを作り上げた本人。
私「こういうエラーが出ているのですが、まるまるうしうしで…(記事では簡単にまとめていますが実際は複雑)」
何か困ったら普段は山田さんと相談していましたが、今回ばかりは複雑な状況だったので、システムの生みの親であるおっとりさんに助けを求めました。
おっとりさん「zoomいきますね」
山田さん「私も一緒にみましょうか」
まずソースコードの確認から始まった。
おっとりさん
「なるほど、ここでprintされているということはこれが動いていて…ふむ」
「ここの分岐に入った後ってどうなってますか?」
私「そこは空でreturnしています」
おっとりさん「API Gatewayって空だと怒ってきたような気がするんですけど、どうでしたっけ山田さん」
山田さん「あ~もしかしたらだめかもしれないですね」
An error occurred (GoneException) when calling the PostToConnection operation
フロントからデータを送信すると、「Internal server error」のエラーが発生。
バックエンドでエラーが起きていないかCloudWatchからLambdaのロググループを確認してみると、
「An error occurred (GoneException) when calling the PostToConnection operation」のエラーが発生していました。
結論として、該当処理の箇所で空をreturnしないようにすることで解決できました。
if:
else:
// returnのみにしない
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json"
}
}
おわりに
私「とても助かりました!ありがとうございます。」
おっとりさん「いえいえ、私もよく忘れるんですよね~」
山田さん「すみません、私もそこはreturnだけしておけば良いと思ってました」
今回の件で処理を色々追っていたのでシステムの理解度は深まりました。
API Gatewayも今までなんとなくで触っていたので、ここにきてツケが回ってきてしまいました。