二十歳になりました。maitaです。
今回はAWSについてです。
AWSを利用して開発をしている時
lambda上に関数を登録
↓
API GateWayでURLを作成!
↓
URLから実行!
↓
502 Error!!!
となってしまい何を修正するべきかわからない時があるかもしれません。
そんな時にここを修正したらうまくデータが返却された!という体験をもとに、まず何を確認してみるかまとめた記事(備忘録)になります。
502エラーが返却された時に確認すること
1.AWSが定めているJson形式でデータを返却しているかを確認する
データを返却する時に、独自で作成したデータだけ返却しようとすると502エラーが発生し送信ができません。
詳しくはこちら(AWSの開発者ガイドに移動します。)
↓
http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/handle-errors-in-lambda-integration.html
1 2 3 4 5 6 |
{ "isBase64Encoded" : "boolean", "statusCode": "number", "headers": { ... }, "body": "JSON string" } |
この形で返却する必要があります。独自で作成したJsonはbodyの中に入れると正常に返却されます。
正しい形式を定義しているのに返却されない!という場合
Body内の独自に作成したJsonが正しいJsonではない場合があります。
作成したJsonに誤りがないかを確認してみましょう
2. コード(lambda)上でエラーが発生していないか確認する
コード上でエラー発生すると502エラーが返却されてしまいます。
CloudWatchのログを確認してみると実行時、エラーで強制終了していた場合、どの行でどのようなエラーが発生し終了してしまったか確認することができます。
エラーが発生する部分を修正し再度実行してみましょう
3.コード内で使用しているライブラリがAWS内に含まれているか確認する
No Module named ~~ といったエラーがログに出ている場合はimport時に使用しているライブラリがAWS上にない場合があります。
例えばpytzというライブラリはpip等を使用してインストールします。ローカル上での開発では問題ありませんが、AWS上にはアップロードしない限りそのライブラリはありません。
ですので、コードとライブラリをzipでまとめてアップロードをすることで問題なく使用できます。
4.パラメータ等が正しく受け取れているか確認する
受け取ったリクエストボディーが想定している型と違っている、壊れている、想定していたデータが入ってきていないなどが考えられます。
一度どのようなデータを受け取っているのかをログで確認してみましょう
もし、正しく受け取れていなかった場合はjsonのパースの方法や送信側の設定を見直すと正しく受け取ることができるかもしれません。
5.権限が振られているかを確認する
例えばDynamoDBにアクセスする処理を実行した際にロールに権限が振られていないと動きません。
AWS内のIAMサービスから使用しているロールに正しいアクセス権限があるかをもう一度確認しましょう。
以上の5つを確認してみると正常にデータが返却される可能性が高くなります。
また、確認して修正してもエラーで全く思い通りにいかないというときは一度ローカルで実行してみると何が原因が分かるかもしれません。
また、もっと簡単に解決できる方法を知っている!という方がいらっしゃいましたら、教えていただけるととても助かります!
(^^)/~