FSx for Windowsをきちんと運用にのせる

# はじめに
皆さん、ご家庭のファイルサーバはどうされていますか？　まさか、まだNASとか置いてませんよね？　当然クラウドですよね？
え？　自分ですか？　HPのサーバにubuntu入れてSambaとNextCloudです（真顔
というわけで、AWSが提供しているフルマネージドのファイルサーバサービス「FSx for Windows File Server」をきちんと運用するまでのTipsをいくつかご紹介します。

# FSx for Windowsの展開
これについては既存のAWSのドキュメントを見ていただければ、特に問題が発生することはないので割愛します。事前にADドメインの構築が必要ですので、EC2上でAD DCを構築するか、AWS Directory Serviceを利用ください。
また、ここから先はFSx for Windowsの設定について同じADドメインに参加しているWindowsの端末が必要になります。

# DNSエイリアスの登録
FSx for Windowsを展開するとADドメインのDNSにamznfsxからはじまるランダムなDNS名が登録されます。このホスト名をアナウンスしてアクセスしてもらうのはだいぶつらいので、わかりやすいCNAMEをつけるのが一般的な運用になると思います。この場合、CNAMEを作成するだけではアクセスできず、DNSエイリアスの登録という作業が必要になります。
DNSエイリアスの登録はAWSマネージメントコンソールのFSx for Windowsの管理画面から「ネットワークとセキュリティー」→「DNSエイリアスの管理」にすすみ、DNSエイリアスの関連付けをおこなってください。
登録後しばらくたつとステータスが「利用可能」となり、CNAMEでのアクセスが可能になります。

# ファイル共有ポイントの作成
FSx for Windowsにおいてはデフォルトで「share」という共有が作成されていますが、これ以外の共有も作成可能です。
Dドライブのデフォルト共有が存在してますので、「D$」でアクセスしてフォルダを作成します。
ADドメインに参加しているWindows端末の「コンピュータの管理」から「別のコンピュータへ接続」でFSx fow Windowsのホスト名を入力して接続し、「共有フォルダー」で新規共有を作成することで「share」以外の共有を作成可能です。

# チューニング
以上でとりあえず運用にはのりますが、FSx for Windowsにおいて重要な機能がいくつか無効化されているので、それらの有効化及び設定が必要となります。
ここから先の設定はremote powershellを使っておこないます。以下のようなコマンドでADドメインに参加しているWindows端末からFSx for Windowsに接続してください。

```
$cred = Get-Credential '<ADドメインのAdministratorsグループに所属しているユーザ名>'
$params = @{
    ComputerName = '<FSx fow windowsのDNS名>'
    Credential = $cred
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Enter-PSSession @params
```

## Windows ABEの有効化
FSx for Windowsではデフォルトではアクセス権の無いフォルダにアクセスしてもファイル名やフォルダ名などは見えてしまいます。ファイル自体は開けないのですがファイル名が見えてしまうことはセキュリティ的に問題があることが多いので、ABEを有効化することで見えなくしましょう。
必要なモジュールの導入をおこないます。

```
PS> Install-Module -Name FileShareUtils
```

以下のコマンドを共有単位で実行してABEを有効化します。

```
PS> Set-NetShare -name "share" -abe enabled
```

## 重複排除
FSw for WindowsはWindows Serverが持っている重複排除の機能が利用可能です。デフォルトでは無効になっておりますので、remote powershellで以下のコマンドを実行します。

```
PS> Enable-FSxDedup
```

このコマンドを実行するとDドライブでの重複排除が開始され、デフォルトで下記の間隔で重複排除に関連するコマンドが実行されます。

```
PS> Get-FSxDedupSchedule

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       Optimization                                                 BackgroundOptimization
True       GarbageCollection  2:45                   Saturday           WeeklyGarbageCollection
True       Scrubbing          3:45                   Saturday           WeeklyScrubbing
```

このスケジュールは変更可能ですが、通常はこのままで問題ないと思います。

## VSSの取得
これもデフォルトでは無効になっているので有効にして、毎日スナップショットを取得するようにします。
下記のコマンドでVSSを有効にします。

```
PS> Set-FsxShadowStorage -Default
FSx Shadow Storage Configuration

AllocatedSpace UsedSpace     MaxSpace
-------------- ---------     --------
             0         0 129755813888
```

次にスナップショットの定期取得を設定します。ここでは毎日23時に取得するように設定します。
タイムゾーンの違いによる指定時刻の書式に注意してください。FSX fow WindowsのタイムゾーンはUTCですが、**コマンドの引数に指定している時刻はremote powershellを実行しているホストのタイムゾーンが適用**されます。
ここではホストのタイムゾーンがJSTなので23:00で指定すると、FSx for WindowsにおいてはUTC 14:00に実行されます。つまり、JST 23:00です。

```
PS> New-ScheduledTaskTrigger -Daily -at 23:00
FSx Shadow Copy Schedule

Interval       : Daily
At             : 2021-12-14T14:00:00+00:00
(略）
```

VSSのスケジュールについては「Get-FSxShadowCopySchedule」コマンドで確認可能です。

## SMB暗号通信の無効化
FSx for WindowsではSMB通信の暗号化がデフォルトで有効となっています。WindowsPCやMacなどからアクセスする分には問題にならないのですが、稀に複合機などでSMB暗号通信がうまくできず平文通信にもフェイルバックしないためFSx for Windowsの共有にアクセスできないという事象が発生します。
その場合は、以下のコマンドでSMB暗号通信を無効にします。

```
PS> Set-FsxSmbServerConfiguration -EncryptData $False
```

現在のSMB通信の状態については、以下のコマンドで確認可能です。

```
PS> get-FsxSmbServerConfiguration

EncryptData RejectUnencryptedAccess
----------- -----------------------
      False                   False
```

# いかがでしたか？
リモートデスクトップでログインできないため取っつきづらいと感じるFSx for Windowsですが、「コンピュータの管理」とremote powershellを併用することで柔軟に運用することができます。
必要に応じてこの記事の設定をおこなってしまえばある程度の規模までは運用可能だと思いますので、皆様もご家庭にいかがでしょうか