既存ファイルサーバ名を引き継いでFSx for Windows File Serverを使用する

# 内容
AWS公式手順でFSXに既存ファイルサーバ名を引き継ぐ設定をやってみた
FSXにDNSエイリアス設定後、Kerberos認証を有効にするためSPNの設定、DNSにCNAMEレコードの更新または実施
CNAMEの設定箇所で既存ファイルサーバのCNAMEは置き換えられるが既存ファイルサーバのAレコードがあるとエラーになる
その場合はAレコードを削除してからCNAMEレコードを作成する

## やりたいこと
* FSxでファイルシステム作成時DNS名「（例）amznfsx57en0pst」が払い出される
* これだとクライアントPCからは\\\amznfsx57en0pstでアクセス出来る
* 既存ファイルサーバ名はAWSFileSV.awstest.localであると仮定
* 既存ファイルサーバから切替後、FSxに\\\AWSFileSV.awstest.localでアクセスしたい
* あと追加で\\\AWSFileSV2.awstest.localでもアクセスしたい
* 念のためFSxのIPアドレス「（例）\\\10.50.30.25」でもアクセス出来るか確認

## FSxファイルシステム追加後、デフォルト状態
* FSxにはデフォルトDNS名でアクセス可
* あとIPアドレスでも可（AWSで自動で割り振られたもの）

![FSX1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/ccbdba3c-a6e8-31cd-92e8-e37af266c3cc.png)

## 下記手順でDNSエイリアスなど設定後
* 既存のファイルサーバ名、また追加したサーバ名でもアクセス可

![FSX2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/dc416fcd-8108-e454-9dba-c3385129beaa.png)


# 環境・前提条件
* FSx for Windows file serverの設定が完了している
* FSx for Windows file serverに接続出来るWindowsサーバ（ドメイン参加済み）がある
* 上記Windowsサーバに管理者権限でログイン出来る

# 参考情報
* [DNS エイリアスを使用してファイルシステムにアクセスする(AWS公式)](https://docs.aws.amazon.com/ja_jp/fsx/latest/WindowsGuide/walkthrough05-file-system-custom-CNAME.html)

# 手順

##　手順1．FSXにDNSエイリアスを紐づける

* ステータスが利用可能になれば完了（2分位かかった）
 
![FSX3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/1b277bc1-99d1-1006-e8ec-4c808848a1d2.png)


##　手順2．SPNを追加する

### 手順2.1．モジュールのインストール

```powershell
Install-WindowsFeature RSAT-AD-PowerShell
```

### 手順2.2．既存のDNSエイリアスSPNを検索
* 既存SPNがある場合は削除せよとのこと（AWS公式より）
* 下記の例では既存はなし

```powershell
PS C:\> $ALIAS = "AWSFileSV.awstest.local"
PS C:\> SetSPN /Q ("HOST/" + $ALIAS)
ドメイン DC=awstest,DC=local を確認しています

そのような SPN は見つかりませんでした。
PS C:\> SetSPN /Q ("HOST/" + $ALIAS.Split(".")[0])
ドメイン DC=awstest,DC=local を確認しています

そのような SPN は見つかりませんでした。
}
```
### 手順2.3．SPNを登録する

```powershell
PS C:\> $FSxDnsName = "amznfsx57en0pst.awstest.local"
PS C:\> $Alias = "AWSFileSV.awstest.local"
PS C:\> $FileSystemHost = (Resolve-DnsName $FSxDnsName | Where Type -eq 'A')[0].Name.Split(".")[0]
PS C:\> $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost)
PS C:\>
PS C:\> Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"}
PS C:\> SetSpn /S ("HOST/" + $Alias.Split('.')[0]) $FSxAdComputer.Name
ドメイン DC=awstest,DC=local を確認しています

CN=amznfsx57en0pst,CN=Computers,DC=awstest,DC=local の ServicePrincipalNames を登録しています
        HOST/AWSFileSV
更新されたオブジェクト
PS C:\> SetSpn /S ("HOST/" + $Alias) $FSxAdComputer.Name
ドメイン DC=awstest,DC=local を確認しています

CN=amznfsx57en0pst,CN=Computers,DC=awstest,DC=local の ServicePrincipalNames を登録しています
        HOST/AWSFileSV.awstest.local
更新されたオブジェクト
}
```
### 手順2.4．登録情報を確認する

```powershell
PS C:\> SetSpn /L ${FSxAdComputer}.Name
次の項目に登録されている CN=amznfsx57en0pst,CN=Computers,DC=awstest,DC=local:
        HOST/AWSFileSV.awstest.local
        HOST/AWSFileSV
        MSServerClusterMgmtAPI/AWSFileSV2.awstest.local
        MSServerClusterMgmtAPI/AWSFILESV2
        MSClusterVirtualServer/AWSFileSV2.awstest.local
        MSClusterVirtualServer/AWSFILESV2
        HOST/AWSFileSV2.awstest.local
        HOST/AWSFILESV2
        MSServerClusterMgmtAPI/AWSFileSV.awstest.local
        MSServerClusterMgmtAPI/AWSFILESV
        MSClusterVirtualServer/AWSFileSV.awstest.local
        MSClusterVirtualServer/AWSFILESV
        MSServerClusterMgmtAPI/amznfsx57en0pst.awstest.local
        MSServerClusterMgmtAPI/amznfsx57en0pst
        MSClusterVirtualServer/amznfsx57en0pst.awstest.local
        MSClusterVirtualServer/amznfsx57en0pst
        HOST/amznfsx57en0pst.awstest.local
        HOST/amznfsx57en0pst
```

## 手順3．CNAME登録
### 手順3.1．モジュールのインストール

```powershell
Install-WindowsFeature RSAT-DNS-Server
```

### 手順3.2．CNAME追加
* AWSFileSV2.awstest.localについても同様に実施

```powershell
$Alias="AWSFileSV.awstest.local"
$FSxDnsName="amznfsx57en0pst.awstest.local"
$AliasHost=$Alias.Split('.')[0]
$ZoneName=((Get-WmiObject Win32_ComputerSystem).Domain)
$DnsServerComputerName ="EC2AMAZ-T77KK7D"
Add-DnsServerResourceRecordCName -Name $AliasHost -ComputerName $DnsServerComputerName -HostNameAlias $FSxDnsName -ZoneName $ZoneName
```

* 既存ファイルサーバのAレコードがあってResourceExistsで失敗する場合はAレコード削除後に実行

```powershell
Add-DnsServerResourceRecordCName -Name $AliasHost -ComputerName $DnsServerComputerName -HostNameAlias $FSxDnsName -ZoneName $ZoneName
Add-DnsServerResourceRecordCName : サーバー EC2AMAZ-T77KK7D 上のゾーン awstest.local にリソース レコード AWSFileSV2 を
作成できませんでした。
発生場所 行:1 文字:1
+ Add-DnsServerResourceRecordCName -Name $AliasHost -ComputerName $DnsS ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (AWSFileSV2:root/Microsoft/...urceRecordCName) [Add-DnsServerResourceRec
   ordCName], CimException
    + FullyQualifiedErrorId : WIN32 9709,Add-DnsServerResourceRecordCName
```

### 手順3.3．レコード確認
* CNAMEが追加されていることを確認

![FSX5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/830b119a-a5ef-030d-d435-80f744410bd0.png)


## 手順4．動作確認
* 下記4パターンのパスでアクセス出来ることを確認
![FSX4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/6ff804ec-ffb9-fed0-0d14-8182805d4616.png)