MAGAZINE

ルーターマガジン

開発環境

sftpクライアントをバッチで動かしたいならrcloneが便利

2024.02.15
Pocket

スクレイピング後のデータの連携はクラウドストレージが大半

山本ゆうごです。

弊社でスクレピング代行サービスでのユーザ企業とのデータ連携はユーザ企業のクラウドストレージに格納するケースが多いです。

メジャーどころはAmazon S3ではありますが、BigQueryとの連携を考えてGoogle CloudStrageなどもあります。エンジニアが介さない場合にはBOXなども便利です。

S3のシークレットキーを使わないケースが増えている

S3を外部からアクセスするにはアクセスキー・シークレットキーを使うという方法がオーソドックスではありますが、実質共有パスワードと同等なので セキュリティ面では不安が残ります。シークレットキーが漏れて外部ユーザにAWSのリソースを食い尽くされる事故も定期的に見られます。

外部からのアクセスで安全なのは公開鍵認証ですが、S3単体では公開鍵認証の機能がないためSFTP経由でアクセスする「AWS Transfer for SFTP」という機能があります。2018年に発表されてしばらく経ちました。

SFTPのクライアントを求めて

公開鍵認証ができて嬉しいのですが、今度は「ちょうどいいSFTPクライアント」が必要となります。

sftpコマンドは存在するものの基本は対話型のコマンドなので、バッチで動かすにはひと手間かかります。

対話型で流したいコマンドをバッチモード -b でファイル名指定すると対話型で実行できます。

コマンドファイルを都度作るのではなく、動的に引き渡したい時には、今どきのコマンドらしく、ファイル名にハイフンを指定することで標準入力から引き渡すことができます。一度ここまでたどり着けばいいのですが、初見のメンバーは面食らいます。

以下のサンプルはsftpサーバーのlsの結果を検索しやすいようにlessに渡してる例です。

echo "ls -lt" | sftp  -b - -i ~/.ssh/id_rsa username@exsample.com | less

-b - にたどり着くまでに少々の学習コストがかかります。

代替コマンドとしてのscpはバッチでは便利なのですが、廃止が決まっております。

curlコマンドもsftpクライアント機能があるのですが比較的新しいcurlコマンドバージョンでないと機能しません。

じゃぁってことで、RubyやPythonなどのライブラリに存在するsftpライブラリを使うというの案もありますが、ダウンロードが遅く、それなりに工夫をしないといけません。 https://qiita.com/cielavenir/items/f38223c156e4aaab58ad 単体ではうまく機能するけど運用フェーズで実用的ではない速度でトラブルというのがあるので避けたいです。

rcloneにたどり着いた

ということで紆余曲折あって使い始めているのがrcloneです。rcloneはS3などのクラウドストレージのクライアントとしても使えます。またGoogleDriveやBOXなどのCLIインターフェースがないストレージにも使えます。さらにsftpのクライアントとしても使えます。

ちなみに弊社ではrcloneを以下の外部ストレージのインターフェースとして使っています(並べてみると圧巻)。

  • S3
  • GCS
  • R2
  • Wasabi
  • BOX
  • SFTP

クラウドストレージは社外とのデータのやり取りに使ってるため、自社都合で統一するということが不可能です。 一方でデータ納品バッチのスクリプトは同じにしたいところです。そこでrcloneを使うことでほぼ同じスクリプトで開発できています。

ベンダーロックイン対策にもrclone

「ベンダーロックインを回避するためにクラウドを導入したけど、それってクラウドにデータごとロックインされてない?」みたいな議論があります。 https://sp-jp.fujifilm.com/future-clip/reading_keywords/vol43.html https://www.dcs.co.jp/knowledge/column/mcloudstorage/

S3はデータ保管は安いですが、APIコールにもお金がかかるため、lsしたり削除するのにもお金がかかります。小さなデータが数億件あったらAPIコールの方がコストとして目立つこともあります。弊社ではR2やWasabiなどS3とは課金体系が異なるストレージも併用することで、ロックインを避けることができています。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから