• 投稿日
  • SORACOM Harvest Files にアップロードされた大量のファイルをまとめてダウンロードする方法

    はじめまして、こんにちは。ソリューションアーキテクトの桶谷(ニックネーム: takuya)です。

    今回は SORACOM Harvest Files に SORACOM API を用いてアクセスして大量のファイルをダウンロードする方法をご紹介します。

    SORACOM Harvest Files とは

    SORACOM Harvest Files は IoT デバイスからのデータを収集、可視化およびファイルを保存する SORACOM Harvest の機能の1つです。Harvest Files は主に画像やログなどのファイルを扱います。例えば IoT デバイスに接続されたカメラの画像やログファイルなどIoTデバイスで収集した「ファイル」をSORACOMに保存できます。またアップロードするファイルパスに IMSI やタイムスタンプといったメタ情報を自動的に付与することができます。

    概要や用途、SORACOM Lagoonとの連携

    SORACOM Harvest Files(以下、Harvest Files) は2019年7月2日よりサービスを開始しており、多くのお客さまにご利用いただいています。

    用途としては先に挙げた IoT デバイスからファイルをアップロードする先として利用する他にも、IoT デバイスのファームウェアを Harvest Files に配置しておき、IoT デバイス側からダウンロードして適用するという使い方があります。
    また Harvest Files にアップロードされたカメラ画像のファイルを SORACOM Lagoon のダッシュボードに表示し、時系列に収集したセンサーデータの値と合わせて最新のカメラ画像を表示することで、視覚的に理解しやすいダッシュボードを作成されているお客さまもいらっしゃいます。

    さらなる活用を考えた時に困ること

    SORACOM Harvest Files に蓄積されたデータは、貴重な現場のデータです。例えば長期間のデータを分析することで予知保全に活かしたり、カメラの画像を機械学習で分析して物体抽出や製造業の合否判定に活用できる可能性があります。大規模なデータの分析や機械学習を行いたい場合、Harvest Files内に格納された大量のデータを利用したくなります。また、SORACOM Harvest Files にアップロードしたファイルの保存期間は作成日から 2 年間となっており、期限が来る前のファイルを一括でダウンロードしたいケースもあります。(ファイル毎の有効期限の確認方法はこちらのブログをご覧ください)

    ここで少し困りごとが出てきます。Harvest Files はファイルを1つずつダウンロードする事は簡単なのですが、ダウンロード対象数が増えてくると、Webブラウザでは手間がかかるという事です。

    SORACOM APIによる解決策

    今回のような大量のファイルを対象とするといった、Webブラウザでは手間のかかる作業でも SORACOM API を用いることで簡単に確実に処理を行うことができます。今回は SORACOM Harvest Files から大量のファイルをまとめて取り出すサンプルスクリプトを作成してみたので、それをもとに説明していきたいと思います。

    利用している API

    • FileEntry:listFiles
    • FileEntry:getFile

    上記の2つのAPIを利用しています。FileEntry:listFiles は保存されているファイルの一覧を取得する API、FileEntry:getFile はファイルを取得する API です。

    サンプルスクリプトの中身

    引数で渡された認証キー ID と認証キー シークレットを用いてファイルを取得するフォルダからファイルの一覧を取得し、1ファイルずつダウンロードを繰り返す、という形になっています。

    def main(args):
        --- 中略 ---
        token = auth(auth_key_id, auth_key)
        file_names = list_file(
            base_path, search, limit_num_to_list, limit_num_to_list_per_req, last_evaluated_key, token
        )
        get_and_save_images(file_names, base_path, save_path, limit_size_to_files, delete, token)

    シンプルに複数ファイルをダウンロードするだけであれば簡単なのですが、今回はよくありそうな要件をオプションで指定できるようにしてみましたので、いくつかご紹介します。

    --limit_size_to_files

    SORACOM Harvest Files からファイルをダウンロードする際、ダウンロードしたファイルのサイズに応じてファイルエクスポート料金が発生します。全てのファイルを一括でダウンロードしてしまうと当月の料金が大きく増加してしまいます。料金を抑えるために複数回/月に分けてダウンロードする際に、合計ダウンロードサイズで処理を制限できるオプションです。

    --last_evaluated_key

    FileEntry:listFilesで取得するファイルの一覧はファイル名順で取得されます( Harvest Files にファイル名順に格納されています)。ファイル名を指定することで、その次のファイル以降がダウンロード対象となります。複数回に分けてダウンロードを行う際、前回の最後にダウンロードしたファイル名を指定することで、続きからダウンロードを再開することができるオプションです。

    その他のオプション、使い方や詳細についてはREADME.mdをご一読ください。

    まとめ

    いかがでしたでしょうか。
    SORACOM API を利用することで、人の手では時間やコストがかかる作業を簡単に実現できました。またスクリプトから実行することで、人が操作する場合と比較してミスが混入する可能性を下げることもできます。

    今回は SORACOM Harvest Filesにアップロードされた大量のファイルをまとめて取り出すというお題でしたが、SORACOM の各サービスは API で操作することができますので、色々なケースにおいて SORACOM API を利用することで作業を改善できるかと思います。

    API の詳細は、API リファレンスに掲載されており、仕様を確認できるだけではなく、実際に API をインタラクティブに呼び出してみることができます。また特別なお申し込みも不要で、すぐに始めることが可能となっています。
    「こんな事できないかな」「これはどの API を使えばいいのだろう」といった疑問がありましたら Twitterのハッシュタグ #soracom でツイートしたり、SORACOM サポート までお問い合わせください。

    今後も SORACOM API を使った便利な使い方をご紹介していきますので、ご期待ください!

    ― ソラコム 桶谷 (takuya)