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. rclonefunction
    2021-09-25 Japan Azure User Group 11周年イベント
    八重樫 剛史 Takeshi Yaegashi

    View Slide

  2. 自己紹介
    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

    View Slide

  3. 今日の話題 - rclonefunction
    3
    https://github.com/yaegashi/rclonefunction
    ▪ 実験的に作ってみた Azure Functions アプリ
    ▪ 特定の Azure Blob Storage のコンテナの変更を監視して、
    変更があったファイルを別の場所のストレージに同期してくれる

    View Slide

  4. 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 を利用してファイルを同期している

    View Slide

  5. rclonefunction のアーキテクチャ
    5
    ▪ EventGrid により Blob Storage の更新
    イベントを Queue Storage にためる
    ▪ rclonefunction が Queue Storage を監
    視して rclone コマンドを起動する

    View Slide

  6. rclonefunction 関数アプリの詳細
    6
    ▪ Go 言語で実装したカスタムハンドラによる Linux 関数アプリ
    − handler.go ファイルひとつだけ
    ▪ 外部コマンド (rclone) を起動するという関数アプリらしくない
    ことをしている
    ▪ 大量の更新イベントがキューに溜まったとき、都度 rclone を
    起動してしまわないように、web サーバの goroutine と rclone
    実行の goroutine が buffered chan で通信して連携している

    View Slide

  7. 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 を指定してデプロイ

    View Slide

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

    View Slide

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

    View Slide

  10. 質問と回答 ③
    10
    ▪ ファイルの利用者に SharePoint Online にアクセスさせるのはなぜか?
    直接 Blob Storage にアクセスさせればよいのでは?
    − SharePoint Online のほうがユーザーフレンドリー
    − わかりやすい Web インターフェース
    − ユーザー・グループを活用したアクセス権限設定が容易
    − 通信コストの節約
    − Azure Blob Storage からのダウンロードは 13円/GB の通信量が課金される
    − Microsoft 365 からのダウンロードは無料

    View Slide

  11. まとめ
    11
    ▪ rclonefunction という関数アプリを作ってみました
    − 外部コマンドとして rclone を起動する関数アプリらしくない実装
    − Bicep は非常に使いやすく ARM テンプレートへの変換も簡単で
    Deploy to Azure ボタンがすぐに作れるのですばらしい
    − rclonefunction 自体はまだ使いにくいところがありますがぜひ試してみてください!

    View Slide

  12. おわり
    12

    View Slide