ウサギでもわかるAmazon FSx for WindowsのPowerShellによる管理

[前回](https://qiita.com/issie_/items/695ec7ceb19fc5888676)はFSxとは何か、サービスの位置づけ、簡単なチュートリアルをやってみましたが、今回は作成したFSxの各機能の設定に触れてみたいと思います。

#共有ポイントを増やす
標準では一つの共有ポイントしかありませんが、増やす方法もドキュメントに記載されてました。
共有ポイントを増やすことができれば、既存ファイルサーバからの移行作業も効率的になったり、管理の手間が省けたりすることもあるので試してみました。
[ユーザーセッションとオープンファイル](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/manage-sessions-and-files.html)

Windowsメニューから「fsmgmt.msc」と検索し、「共有フォルダ管理」を開き、「操作」から「別のコンピューターへ接続」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/349d4524-0821-4ef8-02da-342cc9cddf32.png)
ここでDNS名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/958bde02-6bef-2fe5-2b62-1bdbd06834d3.png)
「共有」を開いて右側の空白で右クリックし、「新しい共有」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/ba074838-ac97-86bf-8cd5-abaf35a45322.png)
既存の「share」があるドライブ（この場合には「D:￥」）に新しい名前を指定し、「見つかりません」といわれるので「はい」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/52ab8f10-0e4b-7c06-eb21-7c36696ff521.png)

アクセス権はAdministratorにフルアクセスのみで良い、と思ったら、このAdministratorはローカルのAdministratorなのでアクセス権をカスタマイズして、ドメインユーザーを設定する必要がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/4e6968c1-b9d5-3b16-0988-6f4648066a22.png)
できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/7825c637-ad46-d3dc-0279-14d1724d4848.png)
##追加した共有ポイントをマウントする
できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/938ac20a-1a20-d2b1-8934-4f59eb5c2933.png)

しかし、クォータ設定が共通らしく、両方のディスクがフルになっています。
内容的には以下のような操作をしたからです。
1MBでハードクォータを設定した上で、Qドライブに1MBのファイルを作ってディスクフルにしました。
その結果、あとから作成したしてZドライブにマウントした別の共有ポイントも、ファイルが一つもない状態であるにもかかわらず、ディスクフルになってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/e7feb764-0b41-cad8-8f27-a874fe952541.png)

##共有ポイントは増やせた
FSxにおいては共有ポイントを増やすことはできました。
しかし、ファイルサーバの運用では一般的に、共有ポイントごとにクォータ設定することが多いのではないかと思います。しかし、FSxでは共有ポイントを増やしても、同じエンドポイントの配下になるため、クォータの設定も当然ながら同一の配下になってしまうことがわかりました。
クォータの設定を新たに設定したい場合には、また別のFSxエンドポイントをデプロイしなければならないということがわかりました。

なお、共有ポイントの追加は以下のコマンドでも可能なようです。
[ファイル共有](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-file-shares.html)

```
New-FSxSmbShare -Name "New CA Share" -Path "D:\share\Marketing" -Description "CA share" -ContinuouslyAvailable $True 
```


#Amazon FSx for WindowsをPowerShellで管理する
次に、CLI（PowerShell）で各種設定をしてみます。
FSxはストレージのみなのでRemoteDesktopはできませんが、PowerShellで管理します。

しかし、いきなりエラーが発生して凹みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/248157eb-faf8-7377-e19a-63c4f582d0d4.png)

```
PS C:\Users\Administrator> enter-pssession -ComputerName amznfsxslmbgwk4.bx.local -ConfigurationName FsxRemoteAdmin
enter-pssession : One or more errors occurred processing the module 'FSxRemoteAdmin' specified in the InitialSessionSta
te object used to create this runspace. See the ErrorRecords property for a complete list of errors. The first error wa
s: Cannot find the Windows PowerShell data file 'SmbLocalization.psd1' in directory 'C:\Windows\system32\WindowsPowerSh
ell\v1.0\Modules\smbshare\ja-JP\', or in any parent culture directories.
発生場所 行:1 文字:1
+ enter-pssession -ComputerName amznfsxslmbgwk4.bx.local -Configuration ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (:) [Enter-PSSession], RunspaceOpenModuleLoadException
    + FullyQualifiedErrorId : ErrorLoadingModulesOnRunspaceOpen
```

##エラーの解消方法
[こちらの情報](https://qiita.com/ohechi/items/cdd060de9d0cd3fafa55)によると英語OS以外の言語のOSからだとエラーになるそうです。なるほど、バグですか。

そのため以下のようにこのセッションだけ英語に切り替える方法で実行します。（そんなことできるんだ…）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/02ac5e59-5c56-e2d9-2143-02b3153deb2c.png)

できました！

```
$usSession = New-PSSessionOption -Culture en-US -UICulture en-US
```

↑これが大切。英語のセッションに切り替えます。
↓そして管理モード？のセッションに入ります。

```
enter-pssession -ComputerName amznfsxslmbgwk4.domain.com -SessionOption $usSession -ConfigurationName FsxRemoteAdmin
```

##もう一つの実行方法
コマンドの送信方法には二通りあって、上記はコマンドセッションを接続して連続してコマンドを入力できるようにする方法です。プロンプトが異なっているのでわかりますね。
この場合には「exit」でPowerShellに戻ることができます。

もう一つの方法は以下のように記述することで、セッションを一行ごとに送信することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/e4c9c0f0-a8e8-6498-da0e-9ab46ec827a4.png)


```
Invoke-Command -ComputerName amznfsxslmbgwk4.domain.com -SessionOption $usSession -ConfigurationName FSxRemoteAdmin -scriptblock {Set-FsxShadowStorage -Default}
```

コマンド実行後に通常のPowerShellプロンプトに戻っていますね。
この場合ももちろん事前に$usSessionの定義は必要です。

#クォータを設定してみる
早速クォータの設定をしてみましょう。
とはいえ方法がわからないので、まずはAWSのドキュメントを見てみます。
[ストレージクォータ](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-user-quotas.html)

コマンドの一覧はこちらです。

|ユーザーストレージクォータコマンド|説明|
|:---|:---|
|Enable-FSxUserQuotas|ユーザーストレージクォータの追跡または実施、またはその両方を開始します。|
|Disable-FSxUserQuotas|ユーザーストレージクォータの追跡と適用を停止します。|
|Get-FSxUserQuotaSettings|ファイルシステムの現在のユーザーストレージクォータ設定を取得します。|
|Get-FSxUserQuotaEntries|ファイルシステム上の個々のユーザーおよびグループの現在のユーザーストレージクォータエントリを取得します。|
|Set-FSxUserQuotas|個々のユーザーまたはグループのユーザーストレージクォータを設定します。|
・・・なるほどわからん。
え？説明これだけ？
これでは何もわかりません。
##コマンドのヘルプ
各コマンドの後ろに「-?」をつけて実行すると簡単な説明が出るらしいのでやってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/95f968fe-f4a2-f5e8-37b9-777806620d8d.png)
これで少しわかりました。
クォータを有効化するコマンドは以下のように入力すればいいようです。

```
Enable-FSxUserQuotas -Enforce -DefaultLimit 1000 -DefaultWarningLimit 500
```
設定する項目の単位は試してみたところ、「キロバイト」のようです。「500」と「1000」と書いたので、警告が「500KB」で、「1MB」を超えたら書き込みができなくなるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/98bdca94-ed9c-098e-b425-085bdfc73fec.png)
設定できたようです。

設定前と設定後で、QドライブにマウントしたFSxの空き容量が変更されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/b6562b30-d42e-283c-e675-4f640c1fd638.png)
成功です。

##クォータの動作テスト
300KBのファイルを作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/a354dc40-7aca-b654-6b1b-b28e507ee8b9.png)
正常にできました。
コピーして600KBにしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/51536063-f6cb-9940-f336-60bdb0a1d925.png)
こちらも正常です。
ただし、Warningはどこに警告が出るのかわかりませんでした。CloudWatchにも無いようですし、Windowsのイベントログにも出ていませんでした。
謎です。
CloudWatchのアラート画面は以下のように何もありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/9fd13155-13d9-5ee2-ace6-f983f04bdaf2.png)

ちなみに、FSxをデプロイすると、標準で以下のようなリソースがCloudWatchで取得されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/6e903433-2c5f-6f9a-23af-aca786f02bca.png)
でもこれ、「Free Storage Capacity」がおかしくないですか？
32GBしかないはずなんですが、このFSxエンドポイント。

それに1MBの未満データをいじった程度で171GB→103GBへ変化しているのはなぜ？クォータ設定の影響？
不明ですが、とりあえず無視しましょう。

ともかく、さらにコピーして4つ目のファイルをコピーしたら、1MBを超えるときにエラーが出ました。ハードクォータの動作確認は成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/bee602a4-a57d-9b31-9580-fd273c509a13.png)

##アラートの設定
警告の出る場所や手段は結局わかりませんでしたが、CloudWatchでアラートの作成は可能なので、SNSでメール通知なども簡単にできます。

|メトリクス名|
|:---|
|DataReadOperations|
|MetadataOperations|
|DataWriteOperations|
|DataWriteBytes|
|DataReadBytes|
|FreeStorageCapacity|
ここにもWarningの文字はありません。「FreeStorageCapacity（空き容量）」もストレージ全体の容量が分母になっているので、クォータの警告とは関連なさそうです。
「FreeStorageCapacity（空き容量）」メトリクスのアラート設定条件は以下の画面で行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/da4b4515-7323-560a-2eb3-b33f356b5ad3.png)

以下のドキュメントには「追跡にのみ関連」と記載がありますが、これでは追跡もできなさそうです。
[ストレージクォータ](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-user-quotas.html)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/f46fd507-5ffb-38c3-9ec3-00561f641d1b.png)
とほほ。。。

FSxのクォータWarningについては、今後も情報を探していきたいと思います。


#シャドーコピー設定
クォータの次はシャドーコピーの設定です。
Windowsでサーバ運用をした経験がある方ならおなじみの、「以前のバージョン」機能です。
Windowsでシャドーコピー機能をONにすると標準で64世代が自動的に取得され、万が一ファイルを誤って上書きしたり消去してしまった場合に、設定した時間に取得した状態に戻すことができる機能です。
AWSのドキュメントはこちらです。
[Working with Shadow Copies](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/shadow-copies-fsxW.html)
[Shadow Copies](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/manage-shadow-cpy.html)
##コマンド一覧
|シャドウコピーコマンド|説明|
|:---|:---|

ドキュメントに一覧が・・・なかった
ので、AWSのドキュメントを見て作りました。

|シャドウコピーコマンド|説明|
|:---|:---|
|Set-FsxShadowStorage|シャドウコピーを設定する|
|Get-FsxShadowStorage|シャドウコピーの現在の構成を表示|
|Remove-FsxShadowStorage|シャドーコピー領域の削除と無効化|
|Set-FsxShadowCopySchedule|シャドーコピースケジュールの設定|
|Get-FsxShadowCopySchedule|シャドーコピースケジュールの現在の構成を表示|
|Remove-FsxShadowCopySchedule|シャドーコピースケジュールの削除|
|New-FsxShadowCopy|新しいシャドウコピーの作成|
|Get-FsxShadowCopies|既存のシャドウコピーの表示|
|Remove-FsxShadowCopies|シャドウコピーの削除|

##機能を有効化する
WindowsServerと同様に、FSxも標準では機能が有効化されていないので、まずは有効化するところからやってみましょう。
先ほどのクォータ設定と同様にPowerShellを利用します。当然日本語OSでは(以下略)なのでご注意ください。
オプションはいくつかありますが、コマンドは簡単です。

|コマンドオプション|説明|
|:---|:---|
|-Maxsize|消費できるストレージの最大量|
|-Default|ファイルシステムの最大10％|

|Maxsizeオプション|説明|
|:---|:---|
|2500000000|バイト単位|
|(2500MB)、(2.5GB)|キロ・メガ・ギガバイトなどの単位|
|"20%"|ストレージ全体に対する割合|
|"UNBOUNDED"|未定義|

今回はディフォルトで設定します。

```
Set-FsxShadowStorage -Default
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/81e2b943-0795-b1f2-bda5-f61f901977d7.png)

「-Default」オプションはシャドーコピーで利用する容量をディフォルトの10％に設定するという内容です。

##シャドーコピー領域の削除
次に、シャドーコピーの領域を削除してみます。
[Y]の入力が求められます。
もともとデータがありませんでしたので、一瞬で終わりました。

```
Remove-FsxShadowStorage
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/eb718170-02f5-01e5-418b-bd4bdd834cd1.png)

この状態ではシャドーコピー機能が無効化されてしまうので、また有効化する必要があります。

##スケジュールの作成
次はシャドーコピーを取得するタイミングを設定してみます。
例としてはありがちな「月～金、6:00」「月～金、18:00」の2パターンを入れてみます。

変数を用いますので、一度「exit」してから以下を実行します。

```
$trigger1 = new-scheduledTaskTrigger -weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 06:00
$trigger2 = new-scheduledTaskTrigger -weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 18:00
enter-pssession -ComputerName amznfsxslmbgwk4.domain.com -SessionOption $usSession -ConfigurationName FsxRemoteAdmin
set-fsxshadowcopyschedule -scheduledtasktriggers $Using:trigger1,$Using:trigger2 -Confirm:$false
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/a7b5e15d-8aac-7c21-fab7-97a4f28aa604.png)
お！きちんとUTCでセットしてくれました。賢い！
きちんとスケジュールをセットすることができました。

##シャドーコピーを作成する
稀に任意のタイミングでシャドーコピーを作成する必要があるかもしれませんが、そのコマンドも用意されています。
実行するとすぐに取得完了しました。
差分の容量によっては時間がかかるかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/c39c1438-e496-86c1-8f07-71a89fdaede0.png)

##シャドーコピーを削除する
以下のオプションがあります。

|コマンドオプション|説明|
|:---|:---|
|-Oldest|最も古いシャドウコピーを削除します|
|-All|既存のすべてのシャドウコピーを削除します|
|-ShadowCopyId|IDで特定のシャドウコピーを削除します|

ID指定で消してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/166749eb-4476-e1f1-afc7-88dbe2c4ab15.png)
消えました。

#セッション管理
接続しているユーザーや、開いているファイルなどの情報を一覧したり、強制切断したりする機能です。
ドキュメントの記載はこちらです。
[ユーザーセッションとオープンファイル](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/manage-sessions-and-files.html)

##コマンド一覧

|セッションコマンド|説明|
|:---|:---|
|Get-FSxSmbSession|ファイルシステムと関連するクライアント間で現在確立されているサーバーメッセージブロック（SMB）セッションに関する情報を取得します。|
|Close-FSxSmbSession|SMBセッションを終了します。|
|Get-FSxSmbOpenFile|ファイルシステムに接続されているクライアントに対して開かれているファイルに関する情報を取得します。|
|Close-FSxSmbOpenFile|SMBサーバーのクライアントの1つに対して開いているファイルを閉じます。|

#重複排除
重複排除機能もWindowsServerに標準で利用できる機能でしたが、使用したことはありませんでした。こういったサービス型なら管理の手間を考えることなく試せますね。

##コマンド一覧

|データ重複排除コマンド|説明|
|:---|:---|
|Enable-FSxDedup|ファイル共有のデータ重複排除を有効にします。|
|Disable-FSxDedup|ファイル共有のデータ重複排除を無効にします。|
|Get-FSxDedupConfiguration|最適化のための最小ファイルサイズと保存期間、圧縮設定、除外ファイルの種類とフォルダーなどの重複排除構成情報を取得します。|
|Set-FSxDedupConfiguration|最適化のための最小ファイルサイズと保存期間、圧縮設定、除外ファイルの種類とフォルダーなど、重複排除の構成設定を変更します。|
|Get-FSxDedupStatus|重複排除ステータスを取得し、ファイルシステム上の最適化の節約とステータス、時間、およびファイルシステム上の最後のジョブの完了ステータスを記述する読み取り専用プロパティを含めます。|
|Get-FSxDedupMetadata|重複排除最適化メタデータを取得します。|
|Update-FSxDedupStatus|更新されたデータ重複排除の節約情報を計算して取得します。|
|Measure-FSxDedupFileMetadata|フォルダーのグループを削除した場合にファイルシステムで再利用できる潜在的なストレージスペースを測定して取得します。多くの場合、ファイルには他のフォルダー間で共有されるチャンクがあり、重複排除エンジンはどのチャンクが一意で削除されるかを計算します。|
|Get-FSxDedupSchedule|現在定義されている重複排除スケジュールを取得します。|
|New-FSxDedupSchedule|データ重複排除スケジュールを作成およびカスタマイズします。|
|Set-FSxDedupSchedule|既存のデータ重複排除スケジュールの構成設定を変更します。|
|Remove-FSxDedupSchedule|重複排除スケジュールを削除します。|
|Get-FSxDedupJob|現在実行中またはキューに入っているすべての重複排除ジョブのステータスと情報を取得します。|
|Stop-FSxDedupJob|指定された1つ以上のデータ重複排除ジョブをキャンセルします。|

実際に設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316614/c859a6f3-3fd4-f2c6-7168-71e926aa8e8f.png)
設定してメタデータを取得しましたが、そもそもデータがほぼカラっぽなのでほとんど何も出ませんね。

以上、いろいろな設定を確認してみました。

次は運用を仮定してDFS-Rとの組合せと、VPNを接続してオフィスからの利用を仮定した利用方法を試してみたいと思います。

#まとめ
最後にWindowsServerからの移行を検討する際に気になるポイントをまとめてみました。
##機能比較表

|機能|WindowsServer|Amazon SFx|備考|
|:---|:---:|:---:|:---|
|価格|○|△|サービス改善待ち|
|アクセス権限|○|○|NTFSによるアクセス権管理|
|容量拡張性|○(EBS)|×|サービス改善待ち|
|クォータ|フォルダ毎に設定可能|エンドポイント毎にのみ設定可能|エンドポイントを増やせば可|
|シャドーコピー|○|○||
|セッション管理|○|○||
|重複排除|○|○||
|ウィルスチェック|○(別途)|×|サービス改善待ち|
|ログ監査|○(別途)|×|別の仕組みで解決|
|ホスト名設定|○|×|エイリアスや名前空間によって変更可|
|冗長化|○(別途)|○|MultiAZ対応|
|DFS-R対応|○|○？|ちょっと触ったけどできなかった…|