質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

920閲覧

IoTCore→Lambdaにgzipファイルを渡したい

pokemonta

総合スコア170

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/09 14:09

Python 3.8でLamdbaを実装しております。
IoTCoreからJSONファイルをLambda上でパースするところまでは
実装することができましたが
これがgzip形式で送られた時のパース方法がわかりません。

JSONファイルのときは、
イベントハンドラから渡された情報をevent.xxx(JSONのキー名)で
パースできますが、gzipのときにはどのような形でeventにデータが入っているのかわかりません。
単体試験自体は、Lambdaのコンソールで行っていましたので
gzipをテストする方法もよくわかっていません。

恐れ入りますが実装イメージ、試験方法をご教示頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

IoT Rule から lambda を呼び出す構成かな?と想像しましたが、この構成だと仕様上 lambda で受け取れるのってデバイスが送信したステータス(の JSON データをデシリアライズしたもの)のみだったような記憶があります
(IoT はカタログスペックをちょっと調べた程度なので、私の理解が間違ってる可能性も大いにありますが)

lambda が event から直接 gzip 形式のデータを受け取るようなパターンはちょっと思い当たらないので、ご質問内容の想定システム構成は IoT と lambda の間に何かしら他のコンポーネントが挟まってるイメージでしょうか。
gzip を処理する想定なら IoT -> Firehose -> S3 -> lambda (PUT trigger) とかですかね?

そうであれば lambda では S3 のオブジェクト情報を (event 引数で) 受け取ることになるので、 GetObject して lambda 上で gzip を解凍、という流れになるのではないでしょうか。大きなペイロードを lambda で処理するときに S3 を介す自体は割とある話だと思います(データが高頻度な IoT のユースケースで S3 トリガーはあまり向かないような気もしていますが)

仮にその構成を仮定して単体テストを行うなら、 S3 Put event トリガーのサンプルイベントを拾ってきて、これをテストの入力値に流用してテストパターンを引いていく感じになると思います。ちゃんと GetObject できるかどうか/ちゃんと gzip 解凍できるかどうか/回答したデータが想定しているパース方法で処理できる内容になってるかどうか/パースできたデータを想定通りに後続に渡せるかどうか、このへんがテストケースになるんではないかと思います

投稿2020/09/12 07:02

編集2020/09/12 07:04
hassaku_63

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/09/13 02:30

IoT Rule から lambda を呼び出す構成です。 つまり、gzipをシリアル化する必要があるかも・・ということですね。 この辺りの知見が素人でして、イメージできてません。 というか事例で聞いたことないですね
hassaku_63

2020/09/13 06:41

> gzipをシリアル化する必要がある これについては少々自分の認識と異なります。 IoT Rule 経由で lambda がデータ受け取るなら、gzip 形式のバイナリって渡せないのでは...?と、少なくとも私は認識してます。 なので「gzip形式で送られた時」と最初の質問文で述べられていることと、「IoT Rule -> lambdaの構成を想定」がちょっと噛み合わないように感じています (繰り返しですが、私の仕様理解が間違ってる可能性はあります) デバイスからJSON形式のペイロードを送るようにはできないのでしょうか。それであればかなり話が楽になると思いますが...。「データを gzip で永続化したい」という話であれば Kinesis Firehose に接続する Rule を別立てして、Firehose から S3 に投げればOKですので、データ処理部である lambda は gzip のことを考える必要がなくなります 参考: https://aws.amazon.com/jp/kinesis/data-firehose/faqs/ > Amazon Kinesis Data Firehose では、Amazon S3 への配信前にデータを圧縮できます。このサービスでは現在、GZIP、ZIP、SNAPPY の圧縮形式がサポートされています。
pokemonta

2020/09/13 14:09

>jSONにシリアル化(=文字列) この部分の私の解釈がズレていました。 そのうえで、JSONを使ってIoT→Lamdbaの受け渡しはできているので 通信量削減のために圧縮したいのでこういった方法がないか確認した次第です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問