Upgrade to Pro — share decks privately, control downloads, hide ads and more …

rclonefunction

 rclonefunction

Japan Azure User Group 11周年イベント
https://jazug.connpass.com/event/223585/

YAEGASHI Takeshi

September 25, 2021
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

  1. 自己紹介 2 八重樫 剛史 Takeshi Yaegashi 株式会社バンダイナムコスタジオ所属 Linux・Unix・OSS・Go 言語が好きなエンジニア 組み込みシステム開発、ゲームサーバ開発、CI/CD

    インフラ開発、 開発環境のクラウドシフトなどの業務に従事 活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi GitLab https://gitlab.com/yaegashi Twitter https://twitter.com/hogegashi
  2. 今日の話題 - rclonefunction 3 https://github.com/yaegashi/rclonefunction ▪ 実験的に作ってみた Azure Functions アプリ

    ▪ 特定の Azure Blob Storage のコンテナの変更を監視して、 変更があったファイルを別の場所のストレージに同期してくれる
  3. Rclone 4 https://rclone.org ▪ 様々なクラウドサービスやプロトコルの間でファイルの同期が できる万能のコマンドラインツール − Azure Storage, AWS

    S3, Google Cloud Storage, OneDrive, Amazon Drive, Google Drive, Dropbox, ownCloud, Nextcloud, WebDAV, SFTP, DLNA, etc. − クラウドに対応した rsync コマンド ▪ Go 言語で実装されている − ひとつの実行ファイルだけで動く − Windows・macOS・Linux・BSD や Intel/ARM/MIPS など、 多数のOS・CPUのコンパイル済みバイナリが用意されている ▪ rclonefunction では rclone を利用してファイルを同期している
  4. rclonefunction のアーキテクチャ 5 ▪ EventGrid により Blob Storage の更新 イベントを

    Queue Storage にためる ▪ rclonefunction が Queue Storage を監 視して rclone コマンドを起動する
  5. rclonefunction 関数アプリの詳細 6 ▪ Go 言語で実装したカスタムハンドラによる Linux 関数アプリ − handler.go

    ファイルひとつだけ ▪ 外部コマンド (rclone) を起動するという関数アプリらしくない ことをしている ▪ 大量の更新イベントがキューに溜まったとき、都度 rclone を 起動してしまわないように、web サーバの goroutine と rclone 実行の goroutine が buffered chan で通信して連携している
  6. Bicep → ARM → Deploy to Azure ボタン 7 ▪

    README.md の Deploy to Azure ボタンですぐに試せる ▪ 関数アプリ・ストレージアカウント・ほか関連リソースをまと めてデプロイ ▪ Bicep で記述し ARM テンプレートに変換して GitHub に配置 − 2 つのリソースグループを含み 4 つの Bicep ファイルにまたがる大作 (サブスクリプションスコープのテンプレート) − Bicep は ARM テンプレートと較べて開発効率が非常によい Bicep がなければ完成しなかった ▪ 関数アプリ本体は GitHub Actions で ZIP のリリースを作り、 WEBSITE_RUN_FROM_PACKAGE 設定で URL を指定してデプロイ
  7. 質問と回答 ① 8 ▪ SharePoint Online が宛先なら Logic Apps や

    Power Automate 使わないのはなぜ? − 当初は Logic Apps や Power Automate でお気軽に作る予定だった − 標準の SharePoint Online のコネクタでは、大きなファイルのアップロードができなかった ので断念した − たしか数MBくらいが限界 − 10MB ~ 数GB のファイルを SharePoint Online に転送できる必要がある
  8. 質問と回答 ② 9 ▪ なぜわざわざ Blob Storage を経由して SharePoint Online

    にコピーするのか? CI/CD から直接 SharePoint Online にアップロードすればよいのでは? − 権限の問題 − Microsoft 365 は特定のフォルダ・ドキュメントライブラリのみにアクセス可能な OAuth2 トークンを発行することができない − 会社の Azure AD 管理者ではないのでサービス専用アカウントを気軽に作ることができない
  9. 質問と回答 ③ 10 ▪ ファイルの利用者に SharePoint Online にアクセスさせるのはなぜか? 直接 Blob

    Storage にアクセスさせればよいのでは? − SharePoint Online のほうがユーザーフレンドリー − わかりやすい Web インターフェース − ユーザー・グループを活用したアクセス権限設定が容易 − 通信コストの節約 − Azure Blob Storage からのダウンロードは 13円/GB の通信量が課金される − Microsoft 365 からのダウンロードは無料
  10. まとめ 11 ▪ rclonefunction という関数アプリを作ってみました − 外部コマンドとして rclone を起動する関数アプリらしくない実装 −

    Bicep は非常に使いやすく ARM テンプレートへの変換も簡単で Deploy to Azure ボタンがすぐに作れるのですばらしい − rclonefunction 自体はまだ使いにくいところがありますがぜひ試してみてください!