前回の記事の続きです。

事前準備編(その2)

SFTPインスタンスの構築

Google Cloud Platform でインスタンスを立ち上げ、SFTPを有効化します。

ここでは、Thorn Technologies LLC が提供している、SFTP Gateway というソリューションを利用してみます。
Ubuntuベースでの稼働となりますが、GCPのMarketplaceをうまく利用するとこの様な素晴らしいソリューションが見つかります。”SFTP Gateway” は有償 ※1 で提供されております。執筆時点で実質的にライセンス費は初月無料分程度のクレジットが提供されていました。
他にも Trillo Inc. の
File Manager and SFTP for Cloud Storage などのソリューションも有ります。

これらは、SFTP接続をして受信したデータを Google Cloud Storage へ保存するソリューションですが、前回の記事で記載した Nikon Z 9 からの画像送出先サーバーとして確立できるようにします。
他にも sftp-gcs などの無償で利用できるNodeアプリケーションがあり、それらを用いて自前で構成する方法なども有りますが、この辺りは手間が増大してしまいそうなため今回は見送ります。

SFTP Gateway for GCP

GCP向けのSFTP Gateway のマニュアルはこちら(英語)です。
GCP向けの他にも、AWS、AZURE向けにも展開されているようですので、幅広く公開されているソリューションのようですね。マニュアルは英語のみになりますが、これら手順通りに進めると、無事にSFTPが稼働するインスタンスが完成します。
私の方で”SFTP Gateway” について詳細に解説を行いますと文面もかなりのボリュームとなってしまいそうなので掻い摘んで記載いたしますが、このマニュアルは分かりやすく親切に書かれています。

Google Cloud Platform のマーケットプレイス から “SFTP Gateway” と検索すると出てきます。

ここでは、GCP上でSFTPが稼働しているインスタンス公開をすることを前提としており、”SFTP Gateway” を通じて、撮影された画像ファイルを Google Cloud Storage へ保存する事を目的としています。

インストールと初期設定時のポイントを列挙いたします。

  • インスタンスの稼働までは、上記のマニュアル通りに進めると、大凡すんなり稼働できます。
    ただし、Google Cloud Platform自体を理解していることが前提となります。
    うまく稼働すると “SFTP Gateway” の Web U/I が表示されます。
Welcome page
最初に、管理者アカウントの作成が必要
  • “SFTP Gateway” の Web U/I の完成度もとても高く、なんら不便なところは有りませんでした。
    この U/I だけで全てが完結します。
    わざわざインスタンスにアクセスしてコンソールからコマンドを実行、なんてことをせずに運用が行なえるようになっています。
    内部ロジックがどの様になっているかの詳細は不明ですが、軽く覗いたところ Javaアプリケーションによって稼働しており、管理情報は PostgreSQL でデータベース化されている様子でした。
$ psql sftpgw
psql (12.9 (Ubuntu 12.9-0ubuntu0.20.04.1))
Type "help" for help.

sftpgw=# \dt
                List of relations
 Schema |          Name          | Type  | Owner
--------+------------------------+-------+--------
 public | authorities            | table | sftpgw
 public | cloud_connection       | table | sftpgw
 public | databasechangelog      | table | sftpgw
 public | databasechangeloglock  | table | sftpgw
 public | failed_login_attempt   | table | sftpgw
 public | folder                 | table | sftpgw
 public | ip_address             | table | sftpgw
 public | oauth_access_token     | table | sftpgw
 public | oauth_client_details   | table | sftpgw
 public | oauth_refresh_token    | table | sftpgw
 public | public_key             | table | sftpgw
 public | user_folder_permission | table | sftpgw
 public | users                  | table | sftpgw
(13 rows)
  • “SFTP Gateway”の管理者、およびSFTP接続に必要なユーザーを追加設定、Google Cloud Storageのバケットの設定をすることで、すぐに接続が出来るようになります。
  • SFTP転送された画像ファイルは Google Cloud Storageへ保存されるのみで、インスタンス上には画像ファイルを保存しない仕様のようです。ただし、転送時にキャッシュはしている可能性は有ります。(厳密には見ておりませんが、私の方で大量の写真を撮影して転送していても、インスタンスのディスク使用量は増えていませんでした)
  • logical mappings(論理マッピング)との解説があるので、Web U/Iからのフォルダ設定などはLinux上の実ディレクトリとしては存在するものではなく、Google Cloud Storege側へのマッピングをしているものになるようです。
  • 複数のユーザーを設定しマッピング先のバケットを変えたりと幅広い運用が行えそうです。
  • Nikon Z 9からのSFTP接続設定の際に、SSH Keyを用いることが出来ないため、”SFTP Gateway”でUser毎に Advanced Optionsからパスワード設定を行う必要があります。
  • 接続ユーザー毎(SFTP接続毎)にアップロードされた画像ファイルの保存先をフォルダ分けする事も出来るため、例えばカメラを複数台分けたり等しても設定次第ではそれなりに活用が出来そうです。

ということで、実際に使ってみると思いの外、かなり優秀なソリューションである事が分かりました。
そして、軽量なアプリケーションのようで、インスタンスのCPUパフォーマンスがそれほど高くならず安定しているので驚いています。

Nikon Z 9 からのSFTP設定と接続

無線LANまたは有線LANでFTPサーバーと接続する に解説の有るように、Nikon Z 9 にSFTP接続設定を施します。

ネットワークメニューFTPサーバーと接続 から行います。

上記で作成した “SFTP Gateway” が稼働しているインスタンスのグローバルIPを SFTPサバーのIPアドレス、ポート番号を22として指定し、「ログイン名を入力」のところに、”SFTP Gateway” で作成&設定済みの Username、Passwordを設定します。
(”SFTP Gateway” で立ち上げたGCPインスタンスの初期設定は、22番ポートでSFTP、2222番ポートでSSHを受け付けるようになっています)

オプション撮影後自動送信 を「ON」に、また、RAW+JPEG送信設定 は「JPEGのみ」としておきます。
※ 必要に応じて「RAW+JPEG」でも構いませんが、RAWを送信してしまうと相当なデータ量になるため事前計算をした方が良いでしょう。

無線LAN、有線LAN、と接続の仕方が2通り有りますが状況に応じて設定します。

設定時、設定後のいくつかのポイントを列挙いたします。

(無線LAN接続/固定回線の場合)

  • ある程度(5〜10分程)待機していると「無線エラーが発生しました」というエラーとともに接続が切れてしまいました。(LANランプが赤で点滅)
    再現性はあるものの、切れる時間もまばらのため、おそらくWi-Fi電波の状態が安定していない可能性が高いのと、電波を拾う感じが他のデバイスに比べて弱い気がします。リトライ機能は無さそうです。
  • 連写した場合、ある程度大量の画像ファイルを送信することになりますが、この際に接続が切れる時がありました。これはWi-Fi電波の影響かもしれませんが、原因が不明です。(100枚程、1〜2G程度)
  • 上記の通り、接続が切れてしまった場合でも、Nikon Z 9 自体の電源をOFFにして再度ONにすると接続されます。Nikon Z 9 ではSFTPサーバーとの接続が再確立した後に、待機しているファイルを順次送信するような設計になっています。
    その後に無事に送信完了しました。その辺りは安心ですね。

(無線LAN接続/iPhoneテザリングの場合)

  • 固定回線の場合と同様にSFTP送信が行えます。(ただし、SIMに依存しキャリア回線などで接続元IPが変わりますので、GCPインスタンス側のファイアーウォール設定には注意が必要です)
    4G/5G に関わらずそれなりの転送速度しか出ません。
    10MByte/1枚を送信するのに10秒〜15秒程はかかっていましたが、無事に接続し送信も出来ていました。

(有線LAN接続の場合)

  • 解説を加えるまでもないのですが、無線LANよりも安定しており特に問題は有りませんでした。ただし思ったよりも速度が早くはなかったため、そもそも Z 9 の送出速度に限界が有るからだと感じました。(無線LANでも十分かもしれません)

iMacからSFTPクライアント接続

FileZilla のインストールによって、iMacからも接続が出来ます。解説はこちらにあります。
Nikon Z 9 同様に SFTP接続を行ってファイル転送が行なえます。

Transmit 5.8.4

残念ながら、Transmit では、このケースでの接続の場合に表示と削除機能に不具合が有るようです。”SFTP Gateway”との相性がよくない?
iMacからのファイル転送は行えるものの、View表示がおかしく、転送したファイルの削除が行えませんでした。

前回の記事で解説していますが、gcsfuse を使うことで Google Cloud Storage と iMacはネイティブ接続が行えていますので、あえて SFTPクライアントを介して操作する必要はないかと思いますが念の為に情報として掲載いたしました。

Nikon Z 9 で撮影して Finderで確認が行えるまで

画像モード:RAW+NORMAL(JPEGのみ転送)
画像サイズ:L

この設定で、JPEGファイルの容量はおよそ10MByte/1枚、程度になります。

撮影して転送完了まで、およそ2〜3秒。
そこからFinderで確認が出来るまで、数秒。

Nikon Z 9 でシャッターを切ってから、5秒後くらいには Finderで確認が出来ました。

連写については、100〜200枚程度を試しましたが、転送は送信キューにたまり1枚ずつ処理されるようですがおおよそファイル容量に比例した様子でそれなりに時間を要しますが無事に転送が行えていました。

※ Finderを前面にして待ち構えているとViewの更新に時間がかかるため、ディスクトップ等からウィンドウのフォーカスを移動させるなどしますとFinder内のファイルリストが自動更新されます。

これらは、撮影する画像ファイル数(ファイル容量)、ネットワーク内のアップロード速度などに大きく依存してきます。
私が当初想定していた状況よりかなり早いと感じたのが率直な感想です。
検証環境のアップロード速度は300Mbps程度ですが、もう少し早いと全体が早くなる可能性もありますが、送出側の Nikon Z 9 にも限界は有るでしょうから、その辺りの影響が大きそうです。
SnapBridge アプリで待ち受けているよりは全然早いと思います。

また、未検証ではありますが、ワイヤレストランスミッター WT-7 を装着した Z 9 以外のカメラでも同様な振る舞いにはなると思います。

NX MobileAirアプリ が登場していますが、これらFTP送信機能などをスマホで代替えしてくれるような機能になっているようです。わざわざAnker製のケーブルが必要にはなりますが、少しだけ試してみましたが、少々わかりにくいところがあったのと、無償では保存出来る枚数は999枚までと上限が決まっているようです。またJPEGのみ展開されるとのことでした。
私はおそらく深堀りはいたしませんが…

※ 動画ファイルについては未検証ですが、近いうちにチャレンジしてみたいと思っています。

下記の映像は検証時の状態を撮影したものです。
SIGMA fp L での撮影ですがフォーカスが遅くぼやけていますがご参考までに。

(Cloud Storageのあれこれ)

Google Cloud Storage を使うメリット

あくまでも固定回線を使った場合では良い結果が出ていると思います。

需要があるとすれば、スタジオ内のスチル撮影ですとか、野外でもイベント会場でインフラが整っている場所など、安定した通信環境下での利用が望ましいということになろうかと思います。
撮影カメラマンとPC操作を行うエンジニアが遠隔状態でのやり取りをスムーズに行う、といった部分ではこのワークフローには着目すべき点が有るかと思います。
NX Tether を用いた運用でもリアルタイムにPC側への転送が行えますが、今回の趣旨は Google Cloud Storegeを利用した macOS上でのネイティブ操作、同時にバックアップが行えるということに主眼を置いているので、NX Tetherの運用とは意味が異なってきます。

また、撮影した画像ファイルを Google Cloud Storage に保存することで、複数のmacOS端末からそれら画像ファイルを取得することも容易に可能になってくるため、この点ではピア to ピア の仕組みよりは軍配が上がると思います。

外出先でのいわゆるモバイルネットワークではこれらがどの様に作用するのか、おそらく上り回線は明らかに低速だと思われるため、有用な使い方にはならない可能性が高そうですね。

5Gモバイル回線のWimaxが使い放題でプラン化されているので、これらを抱き合わせて運用するのも一つの手かもしれません。ただし、過去の経験からモバイル通信では上り速度の高速化はしばらく望めないと思っています。取り扱う画像データの容量が大きい為に、何れにしてもハードルは高そうであり、難しい問題であることは否めませんね。

Storageの単価

素直に、Nikon Z 9 に装着可能な CFexpressカードに保存して取り回すのが良い、というのが現段階での一つの答えにはなるかと思います。
ただし、CFexpressカードは容量単価が非常に高額になります。撮影した画像ファイルをカメラ内に一度保存しなければならないために必要では有るものの、CFexpressカードの新品を順次投入して撮影し永久保存するというメディアにはなりにくいでしょう。

データ保存という観点で考えてみます。
結果として、撮影した作品(写真・動画)をバックアップする場合、容量単価が非常に高額であるCFexpressにそのまま保存しておくユーザーは限られているであろうと私は見ています。
これらの作品をどの様に保存しておくかというのは、私のPCライフ同様に多くの方の悩みのネタとなっていると予想しています。

私は、外部ストレージをHDDのRAID構成で運用していますがそろそろコレを止めたいとも思いますが、なかなか切り替えられないというのが現実なのかもしれません。それこそ、HDDの場合の容量単価はCFexpressに比べると比較にならないほど安いと言えますので。

Google Cloud Storage の料金表 を元に、Google Cloud Storage 東京リージョンでの単価をざっと計算してみました。下表は1ドル115円計算での月額単価(税抜)になります。

4種類のストレージクラスが有りますが、それぞれ特徴があります。それは、クラス別に最小保存期間というのが設けられていることが大きな違いでしょうか。ここに詳しく書いていくよりも料金表をご覧いただいた方が良いかと思います。
Amazon S3 の一部のストレージクラスは引き出しまで長時間を要するものもありますが、Google Cloud Storageはその様なクラスは何れにもなく瞬時にアクセスできる設計になっています。これらの設計は年々進化していくと思われますので来年にはまた何か変わっていくのかもしれませんが。

ざっとした例にはなりますが、カモメの記事 で書いた Angelbird の 160GB を私は Nikon Z 9 に装着しています。
公式の価格ですとAngelbird 160G : ¥25,980 (税込)≠ ¥23,618(税抜)ですので、1GB辺り単価は 147.6125円となります。お高いストレージの類を取り上げた例にはなりますが、Nikon Z 9 で使っている人が多そうな PROGRADE の COBALTは 325G : ¥49,999 (税込)ですので ≠ 45,452.634円(税抜) 1GB辺り単価は 129.854円 です。

CFexpress と Cloud Storegeとは目的と用途が異なっているので比較するべきものでは有りませんが、感覚的にCFexpressは高すぎると思ってしまい、長期保存に適しているとは言い難いメディアだと考えるのは妥当でしょう。
Angelbird 160Gで 100G消費の場合は、14,761.25円になるわけです。(空き部分が0円かどうかは置いておいいて)
買い切り(CFexpress)と月額支払(Google Cloud Storage)の違いは有るにしても、Google Cloud Storageの場合には 100GByteを一ヶ月保存しても、Standard Storageで265円です。

おそらくですが多くのケースで Cloud Storege の用途はバックアップ目的になるかと思うのですが、それであれば、単価の最も安い Archive Storage でも良いわけです。
そういたしますと100G保存の場合 29円/月額で、一年保存しても 348円で、10年保存しても 3,480円とあくまでも料金表を元にした計算ですが格安になります。これにオペレーション料金、ネットワーク料金が加わり数十円〜数百円が上乗せされるとしても、破格のストレージ料金だということは言えるでしょう。

例として挙げました、”SFTP Gateway” ソリューションを用いてGCPインスタンスを稼働させた場合には、GCPインスタンスの稼働料金は別途かかるため、その時間分はCloud Storege料金とは別に加算されてきますので、この点には注意が必要です。
また、Googleの方針が長期に渡って変更されないということも考えにくいので、結局は答えの見つからない難題を抱えて行くことにはなりそうです。

Nikon Z 9 等のフラッグシップ機によって撮影出来る写真が高解像度になるのは大変うれしいことですが画像データは増大していくばかりです。それらを保存していく上ではStorage沼も健在です。

ということで、皆様のカメラワークに本記事が少しでもお役に立てれば幸いです。
このネタの続きはあるかは分かりませんが、これにて一端記事を〆たいと思います。

本記事に含まれている Google Cloud Storage の使い方、サポートに関してはお気軽にお問い合わせ下さい。


  1. “SFTP Gateway”ソリューションを利用するためのライセンス費に加え、GCPインスタンスを利用するための費用が別途かかります。[]

記事の内容が古くなっているものもあり、適宜アップデートされる場合がございます。

コメントは受け付けていません