Azure File Sync を試してみよう！!

皆さまごきげんよう、アーキテクトのやまぱんです。
今回は Azure を用いたファイルサーバークラウド化を検討するなかの候補の一つである Azure File sync を試してみます。AZ-104 とか AZ-800 などの Azure 系 MCP でも問われることの多いサービスですね。

補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！
間違ってたら<font color="red">**優しく**</font>教えてください！

# ファイルサーバークラウド化の選択肢
まず初めに、大きく Microsoft 関連のソリューションを用いたファイルサーバクラウド化には以下の選択肢があるかと思います。

ざっくりですが、下に行くほど高コストで高機能です。
(性能問題に悩みたくない場合はぜひ Azure NetApp Files をガンガン使いましょう。)


+ SharePoint / OneDrive for Business
+ Azure Files 
+ Azure Files + Azure File sync 
+ IaaS でのファイルサーバ構築
+ Azure NetApp Files

今回は上記のうち、３つめの 「Azure Files ＋Azure File Sync」 の構成についてです。
また、Azure Files の中でも SKU がスタンダードファイル共有と高機能なプレミアムファイル共有などさらに種類があります。今回は スタンダードファイル共有を利用した Azure File Syncを構成してみます。

# そもそも Azure File sync とは？
まず、**「Azure File sync を使わなくても、Azure Files をファイルサーバにマウントして使えばいいじゃん」** と思われる人もいるかもしれません、事実それも可能です。ただし大規模な環境になると多くのユーザーがネットワーク(エンタープライズな環境であれば ExpressRoute や S2S VPNといった拠点間接続) 越しに Azure Files に直接アクセスすることが想定され、帯域不足などによる UX 低下が想定されます。

そうした時の選択肢の一つとなるのがAzure Files ＋Azure File sync の構成です。
Azure File sync を利用することで、使い勝手は従来のファイルサーバとほぼ同じように利用でき、LAN の高速性アクセスを利用しつつ、さらにオンプレファイル共有をクラウドに拡張できるものです。ユーザーは直接 Azure Files にアクセスするのではなく、オンプレサーバー(Azure File syncエージェントをインストールしたサーバー)にアクセスするようになります。
具体的にはオンプレのファイルサーバをキャッシュ機能のように利用し、必要に応じてクラウドからファイルをダウンロードすることができます。

後ほどの設定画面の画面ショットですが、以下のように**クラウドの階層化**の機能により Azure File sync のキャッシュ機能ベネフィットを実現することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/cc7bf566-41ed-0cae-d44e-40a5c0610f77.png)

:::note info
具体的にどのレベル規模から Azure Files ＋Azure File Sync がいいのか？というのは同時アクセス数ユースケースなどにもよるので明確にはないですが、ユーザーが数百規模超えると検討をしてもいいのではと個人的には思います。数百規模を超える場合は基本的にはAzure File syncを使った方がいいと思いますが、結局はなるべく**実環境を模した検証をするのが最もよい**です。
:::

# Azure File Sync 主要コンポーネント
ざっくり説明。
+ ストレージ アカウント / Azure Files Share (Azure ファイル共有)： Azure のストレージサービス / ファイル共有ストレージ
+ Windows Server(ファイルサーバー) : いわゆるオンプレファイルサーバで Azure File Sync エージェント をインストールする
+ ストレージ同期サービス：Azure Portal から作成するモノで、Azure ファイル共有と ファイルサーバー のフォルダを紐づけて同期を行う
+ クラウドエンドポイント：ストレージ同期サービスからみた紐づける Azure ファイル共有を指す
+ サーバーエンドポイント：ストレージ同期サービスからみた紐づける ファイルサーバのフォルダを指す

# Azure File Sync を構成する
では実際に簡易的にAzure File Syncを構成してみましょう。
詳細は以下 MS Learn に手順があります。
本ページではこの MS Learn の手順にそって、画面ショット多めにしていきたいと思います。

・前提条件 - Azure File sync のデプロイ
https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-deployment-guide?tabs=azure-portal%2Cproactive-portal#prerequisites

## Azure File sync で使用するWindows Server の準備
なお、今回は Azure VM を利用している（OSは Windows Server 2019 Datacenter)
構築中は IEエンハンスドポリシーをOFFにしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/607d897d-11bd-30f9-04ed-a86251724d39.png)

## ストレージ同期サービスのデプロイ(Azure Portal)
・ストレージ同期サービスのデプロイ
https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-deployment-guide?tabs=azure-portal%2Cproactive-portal#deploy-the-storage-sync-service

Azure Portal から ストレージ同期サービス を選択 → 作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ace0ad33-c38a-a15a-0025-7b6c3cb7eb1f.png)

以下のように作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/1a7d806a-cf70-3741-64da-0998ddd144e2.png)

:::note info
プライベート エンドポイントも対応しているが、今回は使わずにパブリックエンドポイントを利用して実施。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f5b7c484-9828-299a-0920-d735943d2abd.png)
:::


## Azure File sync エージェントをインストールする(Windows Server)

下記からダウンロードできる。（PowerShellやAzure CLI でもインストール可能)
ダウンロードセンター：https://www.microsoft.com/en-us/download/details.aspx?id=57159

Edge から上記リンクにアクセスして対象OSのものをダウンロードして、インストールを始める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/71d9585b-f5ab-8375-b11a-2467483c66ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/a3f1b3ae-b239-510d-ddee-5c13ba1c8977.png)

:::note info
+ Azure File sync エージェント固有のプロキシの設定も可能です。（今回はプロキシを構成していないので設定しない)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/5041eac5-9fe3-6744-f73a-9debc39b05d3.png)
+ Microsoft update を利用してUpdateするかも設定可能。（今回は以下の設定で実行)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/4609eb80-e270-18c2-1262-5a6d29765b69.png)
+ 自動アップデートの設定もあり（今回は以下の設定で実行)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/192b1be8-b9a6-6778-7bee-fccf2e199d37.png)
:::

インストールが完了すると下記の画面、[OK] を押すと次のストレージ同期サービスへの登録画面になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/1beb21e3-d44c-9b6f-e117-e55e39ddc33c.png)

## Windows Server をストレージ同期サービスに登録する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/41413a86-fbe7-2268-d405-c690c9cfa7b7.png)

サインイン画面がでるのでよしなにサインイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d8065c68-3e23-94b1-7f46-2722d09f3cce.png)

各種情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e511fea5-24db-089e-2964-d8a74899a0ec.png)

完了！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/870b77b8-3dcd-9e4c-1b15-a9ecc12518ea.png)

+ Azure Portal 確認
Azure Portal からは ストレージ同期サービス  →  同期 - 登録済サーバー から確認可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/c465fdfc-8656-b369-dd0a-8e09bcf97636.png)

## 同期グループとクラウドエンドポイントを作成する
・同期グループとクラウド エンドポイントを作成する
https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-deployment-guide?tabs=azure-portal%2Cproactive-portal#create-a-sync-group-and-a-cloud-endpoint

+ 同期グループの作成 (Azure Portal)
Azure Portal  → ストレージ同期サービス → 同期グループの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e0496647-5253-9417-0539-fde50a3586ad.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2415fecc-8906-e926-69e7-7e2639b78c33.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/c2b4e32e-6ef3-f959-5f3b-e387f475dfef.png)

+ クラウドエンドポイントの作成 (Azure Portal)
作成された同期グループをクリックするとクラウドエンドポイントもできていることがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/1ec0affb-ba77-5e09-75bf-71fb933e1ef5.png)


## サーバーエンドポイントを作成する
・サーバー エンドポイントを作成する
https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-deployment-guide?tabs=azure-portal%2Cproactive-portal#create-a-server-endpoint

> サーバー エンドポイントは、登録済みサーバー上の特定の場所を表します。たとえば、サーバー ボリュームのフォルダーなどです。
先ほど作成した同期グループをクリックして、遷移先の画面から [+サーバーエンドポイントの追加] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/b974cf50-7293-50dc-9faa-cddfad254256.png)

+ ここで Windows Server 上では F ドライブは以下に share フォルダを作成しているので、それをサーバーエンドポイントとして利用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e3e02893-3836-dad2-0626-e5dddd4b2edf.png)

以下のように設定し、「作成」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/5c6db14a-44d8-f282-2a97-64b4f74cafa4.png)

<details><summary> [クラウドの階層化」と「初期同期」の詳細画面はこちら</summary><div>
+ クラウドの階層化 の詳細
以下で実施

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d64b2bc7-e9b5-0001-f77f-c9754d72dbc7.png)



:::note info
クラウドの階層化について
• クラウドの階層化: クラウドの階層化を有効または無効にするスイッチ。 クラウドの階層化によって、使用頻度やアクセス頻度が低いファイルを Azure Files に階層化できます。 クラウドを使った階層化を有効にする場合は、クール ファイルを階層化するタイミングを Azure File Sync に知らせるために設定するポリシーとして、ボリュームの空き領域ポリシーおよび日付ポリシー の 2 つのポリシーがあります。
• ボリュームの空き領域: サーバー エンドポイントが配置されているボリュームに確保する空き領域のサイズ。 たとえば、1 つだけのサーバー エンドポイントがあるボリュームでボリュームの空き領域を 50% に設定すると、データの約半量が Azure Files に階層化されます。 クラウドの階層化が有効かどうかにかかわらず、Azure ファイル共有は、データの完全なコピーを常に同期グループ内に保持します。
* 日付ポリシー: 指定した日数アクセスされていない (これは読み書きされて) ファイルがクラウドに階層化されます。 たとえば、アクセスされずに 15 日以上経過したファイルが通常はアーカイブ ファイルであることがわかった場合は、日付ポリシーを 15 日に設定します。
:::

+ 初期同期 の詳細
以下で実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/96474e1d-18de-e76b-98e1-2b4b9ab81081.png)
</div></details>

完了すると Azure Portal  → ストレージ同期サービス → 同期グループ から以下のように確認可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/fb877fc4-250a-cbce-85dd-867add6bcf16.png)

完了！！

# データの同期
今回、Azure File Sync に利用した Azure File Sync にはあらかじめ検証用のデータを入れて実施していましたので、早くファイルサーバー側にデータが同期されるのを期待したいところです。
ところがクラウドエンドポイント(Azure ファイル共有)からのデータの同期はリアルタイムでは行われません。
以下 URL に記載の通り、変更検出ジョブが 24 時間ごとに動いているためです。

・SMB またはポータルを使用して Azure ファイル共有上でファイルを直接作成しました。このファイルを同期グループのサーバーで同期するには、どのくらいの時間がかかりますか?
URL：https://learn.microsoft.com/ja-jp/azure/storage/files/storage-files-faq#azure-file-sync

<details><summary>抜粋詳細</summary><div>
> Azure Portal または SMB を使用して Azure ファイル共有に加えられた変更は、サーバー エンドポイントに対する変更とは異なり、検出とレプリケーションが即座に行われることはありません。 Azure Files にはまだ変更通知/ジャーナルがないため、ファイルが変更されたときに自動的に同期セッションを開始する方法はありません。 Windows Server では、Azure File Sync は Windows USN ジャーナルを使用して、ファイルが変更されたときに同期セッションを自動的に開始します。
Azure ファイル共有に対する変更を検出するために、Azure File Sync には、変更検出ジョブと呼ばれるスケジュールされたジョブがあります。 変更検出ジョブは、ファイル共有内のすべてのファイルを列挙した後、ファイルの同期バージョンと比較します。 変更検出ジョブによってファイルが変更されていると判断された場合に、Azure File Sync は同期セッションを開始します。 変更検出ジョブは 24 時間ごとに実行されます。
</div>
</details>


+ 今回は関係ないですが、「"Azure Files 単体利用(OSから直接マウント)" ＋ "Azure Files ＋ Azure File Sync" の併用構成」の場合上記に関連したファイル同期のタイミングの考慮をした運用が必要になります。

## 即時反映させたい！！！
ファイルサーバーから Invoke-AzStorageSyncChangeDetection コマンドを使うことで可能です。
+ Invoke-AzStorageSyncChangeDetection
https://learn.microsoft.com/ja-jp/powershell/module/az.storagesync/invoke-azstoragesyncchangedetection?view=azps-12.2.0&viewFallbackFrom=azps-5.5.0

```
Invoke-AzStorageSyncChangeDetection -ResourceGroupName "<リソースグループ>" -StorageSyncServiceName "<ストレージ同期サービス名>" -SyncGroupName "<同期グループ名>" -Name "クラウドエンドポイント名"
```
:::note 
クラウドエンドポイント名は下記で確認可能
Azure Portal  → ストレージ同期サービス → 同期グループ → クラウドエンドに表示されているファイル共有の名前 をクリックし、「リソースID」をコピー＆ペースト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/88d8d838-e4eb-0399-3af5-1480b60a88af.png)

**```/cloudEndpoints``` に続く文字列が -name に入れるクラウドエンド名になります。**

例：）/subscriptions/"Subscription ID"/resourceGroups/"リソースグループ名"/providers/Microsoft.StorageSync/storageSyncServices/Azure File sync Srv/syncGroups/SyncGroup/cloudEndpoints/**xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx**

:::

# Azure File Sync Agent のログ
参考までに、イベントログで以下のように確認可能。
"Applications and Service Logs"  → "Microsoft"  → "File Sync" → "Agent"
![2024-08-12_06h49_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/9cd409cf-1557-4f73-e662-dcfbe78cef51.png)


# 関連 URL
役立つ URL を紹介します
+ Azure File Sync のデプロイ
  今回のメインとなるページです

https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-deployment-guide?tabs=azure-portal%2Cproactive-portal

+ Azure File Sync よくあるお問合せ - FAQ 公式サポートブログ

https://jpaztech.github.io/blog/storage/storageFileSyncFAQ/


+ Azure File Sync のデプロイの計画
検討する際に必ず読むことをオススメします。
とくに、[評価コマンドレット](https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-planning#evaluation-cmdlet)は実施することをオススメします。

https://learn.microsoft.com/ja-jp/azure/storage/file-sync/file-sync-planning#evaluation-cmdlet

+ 複数ファイルサーバー と 複数 Azure Files 間での Azure Files Sync の構成
より実践的、発展的な内容に関しての MS 社員のブログです。

https://zenn.dev/microsoft/articles/azurefiles-azfsync

+ Azure File Sync 虎の巻 ー 其ノ壱 JBS Tech Blog

https://blog.jbs.co.jp/entry/2022/12/09/084500

+ 共有、ディレクトリ、ファイル、メタデータの名前付けと参照 - MS Learn

https://learn.microsoft.com/ja-jp/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata