Microsoft Flow で SharePoint のファイルを xxx に同期させようとした話

[Microsoft Flow](https://japan.flow.microsoft.com/ja-jp/) という(以下 Flow と書きます)、IFTTT のようなタスク自動化サービスがありまして、SharePoint で管理しているファイルを、別のクラウドストレージ(まあ S3 なんですけど)にも同期させて、別のシステムでそのファイルを使用したい、という案件があったので技術調査をしたときの備忘録です。

## 140文字以内で結論

Flow to S3 は超面倒っぽいけど Flow to Azure は超簡単だったので、Azure にします。
と思ったけど [Azure Blob Storage コネクタも PREMIUM になる](https://memo.tyoshida.me/powerapps/powerapps-microsoft-flow-oct-2019-license/) と聞いて詰んだw

## Flow to AWS S3 は面倒っぽい

Flow には、[コネクタ](https://japan.flow.microsoft.com/ja-jp/connectors/) という、さまざまなデータの入出力先が用意されていて、例えば、「SharePoint にアップロードされたファイルを、Google Drive にコピーする」というタスクは簡単に作ることができます。

が、なぜか(作為的に?) Amazon Web Services 関連のコネクタはほぼ存在しません。そのため「SharePoint にアップロードされたファイルを、S3 にコピーする」というタスクは、簡単に作成することができません。

そのため、「SharePoint にアップロードされたファイルを、S3 にコピーする」を実現するには、以下のような手順を踏む必要があります（ここは調査に基づく推測です）。

### Http コネクタを使う

[HTTP コネクタ](https://japan.flow.microsoft.com/ja-jp/connectors/shared_webcontents/azure-ad-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-http/) を使用して、S3 REST API を投げて、S3 へのファイル PUT を行います。

ただしこのコネクタは PREMIUM コネクタであり、[プラン](https://japan.flow.microsoft.com/ja-jp/pricing/) によると、これを使うには「Flow プラン 1」または「Flow プラン 2」が必要です。 Flow の が必要です。さらに都合が悪いことに、 **企業が契約することが多い Office365 に付属する「Flow for Office 365 and Flow for Dynamics 365」プランでも PREMIUM コネクタ は使用できません。**

### SFTP コネクタを使う

確か S3 を SFTP に対応させるサービスが AWS にあったよね → ありました([新発表 – AWS Transfer for SFTP – Amazon S3と連携したマネージドなSFTPサービス | Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/new-aws-transfer-for-sftp-fully-managed-sftp-service-for-amazon-s3/))。

そして Flow に [SFTP コネクタ](https://japan.flow.microsoft.com/ja-jp/connectors/shared_sftp/sftp/) があるので、 "SharePoint to S3 via SFTP" ができるのでは？ と考えました。

しかしこれ、

* [AWS Transfer for SFTP を試そうとして料金を見て断念 - Qiita](https://qiita.com/s-katsumata/items/d5f325c317b909e017d5)

うん、ムリ。

### カスタムコネクタを作成する

PREMIUM コネクタが使えないのならば、コネクタ自体を自作する「カスタムコネクタ」という選択肢があります。これは、「Flow for Office 365 and Flow for Dynamics 365」プランでも使用可能です。

* [カスタム コネクタをゼロから作成する / Microsoft Docs](https://docs.microsoft.com/ja-jp/connectors/custom-connectors/define-blank)

が、[プラン](https://japan.flow.microsoft.com/ja-jp/pricing/) ページの注意書きに以下のような記述があります。

> カスタム アプリケーションへの接続または HTTP コネクタを使用した接続は、Office 365 ライセンスでは使用できません。

ダメっぽいです。なんだこれは。

## SharePoint の WebHook を使用する

Microsoft Flow をあきらめ、SharePoint 側の API を使用する案もあります。

* [SharePoint webhook の概要 / Microsoft Docs](https://docs.microsoft.com/ja-jp/sharepoint/dev/apis/webhooks/overview-sharepoint-webhooks)

これを使用すると、SharePoint 内のファイルの追加や変更を検知して外部 WebAPI を呼び出し、その API で S3 に PUT するという実装ができそうです。

が、この [手順](https://docs.microsoft.com/ja-jp/sharepoint/dev/apis/webhooks/get-started-webhooks) を読み始めると、不安なことが書かれていました。

> 2, SharePoint Online にアクセスするには、Azure AD アプリに Office 365 SharePoint Online アプリケーションへのアクセス許可を付与し…

え、Azure 必須なの？（ちょっと仕組みを理解していないけど…

## ~~選ばれたのは Azure でした~~（やっぱり選べませんでした

AWS S3 は無いクセに、[Azure Blob Storage](https://japan.flow.microsoft.com/ja-jp/connectors/shared_azureblob/azure-blob-storage/) コネクタはあって、しかも PREMIUM ではない(Free プランでも Office365 プランでも使える)とのことなので、もうコレにします。

が、2019年10月から Flow の料金体系が代わり、**Azure Blob Storage コネクタも PREMIUM になる** とのことです、おいっ！

* [PowerAppsとMicrosoft Flowの新ライセンス体系について（2019年10月から） - 吉田の備忘録](https://memo.tyoshida.me/powerapps/powerapps-microsoft-flow-oct-2019-license/)

## どうしよう…

さてどうしましょう、現状案は以下です。

1. もう EC2 に FTP サーバー立てるか…
2. 頑張って SharePoint WebHook やる
3. PREMIUM が使えるユーザーを1つだけ購入する(Office365プランの人たちと同居できるん？)
4. SharePoint の機能で特定フォルダだけ Public アクセス許可して ip/domain 制限できたりするのか？？

おかしいな、検証と言いつつ、もう実装まで終わってる予定だったんだが…。
3 と 4 は Microsoft のどの窓口に聞けばいいの？