Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
rclonefunction
YAEGASHI Takeshi
September 25, 2021
Technology
0
620
rclonefunction
Japan Azure User Group 11周年イベント
https://jazug.connpass.com/event/223585/
YAEGASHI Takeshi
September 25, 2021
Tweet
Share
More Decks by YAEGASHI Takeshi
See All by YAEGASHI Takeshi
Azure AD対応の認証プロキシサーバをGoで作っている話
yaegashi
0
18
ゲーム開発におけるクラウドネイティブな CI/CD の最新動向
yaegashi
0
160
大規模ゲーム開発を支えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
yaegashi
4
1.3k
社員全員が利用できるWebダッシュボードをAzureで作ってみた話
yaegashi
3
1.4k
cobra-cmder:Goの言語機能を活用したシンプルなCLIツール構成法
yaegashi
0
500
Microsoft Azure 向け Go SDK の最新動向・開発体制・コード生成戦略
yaegashi
0
280
Terraforming Windows Virtual Desktop Infrastructure on Azure
yaegashi
0
490
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
yaegashi
10
4.9k
Customazed CLI: カスタムVMイメージ作成支援ツール
yaegashi
0
160
Other Decks in Technology
See All in Technology
誰が正解を知っているのか / Who knows the right answer
takaking22
1
250
The application of formal methods in Kafka reliability engineering
line_developers
PRO
1
200
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
140
HoloLens2とMetaQuest2どちらも動くWebXRアプリをBabylon.jsで作る
iwaken71
0
200
eBPF for Security Observability
lizrice
0
190
MoT TechTalk #12 タクシーアプリ『GO』大規模トラフィックを捌く分析データ基盤の全容に迫る!
mot_techtalk
1
380
セキュリティ 開運研修2022 / security 2022
cybozuinsideout
PRO
3
3.8k
DOM Invader - prototype pollution対応の衝撃 - / DOM Invader - prototype pollution
okuken
0
160
JJUG2022_spring_Keycloak (Red Hat Single Sign-on)
tinoue
0
200
スタートアップと技術選定と AWS
track3jyo
PRO
2
350
Rethinking how distributed applications are built
tillrohrmann
0
100
Data in Google I/O - IO Extended GDG Seoul
kennethanceyer
0
150
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
34
1.4k
Making Projects Easy
brettharned
98
4.3k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Building Better People: How to give real-time feedback that sticks.
wjessup
344
17k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.7k
WebSockets: Embracing the real-time Web
robhawkes
57
5.2k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.3k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
YesSQL, Process and Tooling at Scale
rocio
157
12k
A Modern Web Designer's Workflow
chriscoyier
689
180k
Building an army of robots
kneath
299
40k
Transcript
rclonefunction 2021-09-25 Japan Azure User Group 11周年イベント 八重樫 剛史 Takeshi
Yaegashi
自己紹介 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
今日の話題 - rclonefunction 3 https://github.com/yaegashi/rclonefunction ▪ 実験的に作ってみた Azure Functions アプリ
▪ 特定の Azure Blob Storage のコンテナの変更を監視して、 変更があったファイルを別の場所のストレージに同期してくれる
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 を利用してファイルを同期している
rclonefunction のアーキテクチャ 5 ▪ EventGrid により Blob Storage の更新 イベントを
Queue Storage にためる ▪ rclonefunction が Queue Storage を監 視して rclone コマンドを起動する
rclonefunction 関数アプリの詳細 6 ▪ Go 言語で実装したカスタムハンドラによる Linux 関数アプリ − handler.go
ファイルひとつだけ ▪ 外部コマンド (rclone) を起動するという関数アプリらしくない ことをしている ▪ 大量の更新イベントがキューに溜まったとき、都度 rclone を 起動してしまわないように、web サーバの goroutine と rclone 実行の goroutine が buffered chan で通信して連携している
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 を指定してデプロイ
質問と回答 ① 8 ▪ SharePoint Online が宛先なら Logic Apps や
Power Automate 使わないのはなぜ? − 当初は Logic Apps や Power Automate でお気軽に作る予定だった − 標準の SharePoint Online のコネクタでは、大きなファイルのアップロードができなかった ので断念した − たしか数MBくらいが限界 − 10MB ~ 数GB のファイルを SharePoint Online に転送できる必要がある
質問と回答 ② 9 ▪ なぜわざわざ Blob Storage を経由して SharePoint Online
にコピーするのか? CI/CD から直接 SharePoint Online にアップロードすればよいのでは? − 権限の問題 − Microsoft 365 は特定のフォルダ・ドキュメントライブラリのみにアクセス可能な OAuth2 トークンを発行することができない − 会社の Azure AD 管理者ではないのでサービス専用アカウントを気軽に作ることができない
質問と回答 ③ 10 ▪ ファイルの利用者に SharePoint Online にアクセスさせるのはなぜか? 直接 Blob
Storage にアクセスさせればよいのでは? − SharePoint Online のほうがユーザーフレンドリー − わかりやすい Web インターフェース − ユーザー・グループを活用したアクセス権限設定が容易 − 通信コストの節約 − Azure Blob Storage からのダウンロードは 13円/GB の通信量が課金される − Microsoft 365 からのダウンロードは無料
まとめ 11 ▪ rclonefunction という関数アプリを作ってみました − 外部コマンドとして rclone を起動する関数アプリらしくない実装 −
Bicep は非常に使いやすく ARM テンプレートへの変換も簡単で Deploy to Azure ボタンがすぐに作れるのですばらしい − rclonefunction 自体はまだ使いにくいところがありますがぜひ試してみてください!
おわり 12