LoginSignup
0
1

More than 3 years have passed since last update.

AWS Lambda実践ガイドでハマった話。event['body']がbase64だった

Posted at

はじめに

 AWS Lambda実践ガイドの5章Sの3に配置したhtml のフォームを叩いてAPI経由でlambdaを呼出してpostした内容をdynamoDBに書き込む練習問題でハマったた備忘録として記載。結論として、event['body']がbase64にエンコードされていた。

経緯

実践ガイドのサンプルコードをそのまま実装しても動かないため、CWのlogを見てみると
htmlのフォームから入力されたデータを受け取るところに問題がありそう。

案の定、print(param)してみるとnullになっていたので、
print(json.dumps(event,indent=4))でevent全体を見てみる。
すると
"body": "dXNlcm5hbWU9YWEmZW1haWw9aGg=",でどうやら値が入ってはいるが、なんだこれ。

 色々とネットを漁るとbase64というすべてのデータをアルファベットと一部の記号であらわすエンコード仕様らしい。
試しにhttps://www.en-pc.jp/tech/base64.phpでエンコードしてみるとちゃんと結果が返ってきていた!

コードの修正

というわけでbase64にデコードしてparseするように修正した。

import base64
(中略)
body = base64.b64decode( event['body'] )
param =urllib.parse.parse_qs(body.decode('utf-8'))

おわりに

今回のような値を渡すところは、勝手にエンコード等されていないか確認することが大切と学んだ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1