[Amazon FSx for NetApp ONTAP] NetApp.ONTAP PowerShell Toolkitで複数のファイル共有の設定を移行してみた
Amazon FSx for NetApp ONTAP上に大量のファイル共有の設定を移行したい
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)上に大量のファイル共有の設定を移行したいなと思ったことはありますか? 私はあります。
FSx for ONTAPへの移行でパッと思いつくのはDataSyncだと思います。しかし、以下記事の通り、DataSyncはファイル共有同士のファイル・フォルダの移行であり、ファイル共有自体の設定は移行してくれません。
他にも思いつくのはDataSyncでファイルやフォルダ、メタデータを同期後に、Get-SmbShareやGet-SmbShareAccessで現行ファイルサーバーの共有設定を取得して、New-SmbShareやGrant-SmbShareAccessで移行先に同じ共有設定をしてあげるような形かと思います。
しかし、FSx for ONTAPではWinRMのポート(tcp/5985)が開いていないため、上述の手法ではファイル共有を作成することはできません。
ちなみに、FSx for Windows File Serverではファイル共有の設定をPowerShellで移行できます。
FSx for ONTAPだとWinRMで使えないのであれば... となればONTAP REST APIの出番ですね。ONTAP REST APIを使うことによってONTAP CLIを使わずとも外部からファイル共有の作成ができます。
ただし、REST APIに慣れていないとスクリプトを書くのもなかなか大変です。
そんな救世主として NetApp.ONTAP PowerShell Toolkit なるPowerShellのモジュールが公開されています。
NetApp.ONTAP PowerShell Toolkitを使って、現行ファイルサーバー上の複数のファイル共有をFSx for ONTAP上に作成してみました。
いきなりまとめ
- NetApp.ONTAP PowerShell Toolkitを使ったスクリプトにより、現行ファイルサーバーのファイル共有の設定と(ほぼ)同じ設定のファイル共有をFSx for ONTAP上に作成することができる
- 細かいACLの設定にONTAP REST APIがサポートしていないことがあるので注意
NetApp.ONTAP PowerShell Toolkit とは
NetApp.ONTAP PowerShell ToolkitとはONTAP REST APIをラッピングしたPowerShellのモジュールです。
こちらのモジュールをインポートすることにより、ONTAP REST APIに対応したPowerShellのコマンドレットを実行することができるようになります。
以前の記事で紹介したNetApp ONTAP Python client libraryのPowerShell版です。
現在のバージョンは9.11.1.2208で、ONTAPのバージョンに対応しています。
モジュールはWindows、Ubuntu、RHEL、および macOSにインポートすることが可能です。2022/12/5時点の最新のバージョンである9.11.1.2208のインストール要件は以下の通りです。
- Windows
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 5.1 or 7.0.3 or later |
Microsoft .NET Framework | .NET Framework 4.7.2 |
Microsoft Windows | 8.1,10, Server 2012 R2, 2016, 2019 |
- RHEL
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
RHEL | 7 |
- Ubuntu
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
Ubuntu | 18.0.4 |
- macOS
ソフトウェア | バージョン |
---|---|
Microsoft Windows PowerShell | 7.0.3 or later |
Apple MacOS | 10.13 and later |
Netapp PowerShell Toolkit Best Practices Guideなるベストプラクティスガイドも試す場合は目を通しておきましょう。
また、NetApp.ONTAP PowerShell Toolkitはコミュニティサポートです。NetAppのサポート窓口ではサポートされないので注意しましょう。
検証環境
検証環境は以下の通りです。
Windows Serverを現行ファイルサーバーと見立てて複数のファイル共有を作成します。
AD DCにNetApp.ONTAP PowerShell Toolkitを使ったスクリプトを実行し、現行ファイルサーバーのファイル共有と同じ設定のファイル共有をFSx for ONTAP上に作成します。
AD DCについては以下記事の検証で使用したものを流用します。
ファイル共有の作成
現行ファイルサーバーに見立てたWindows Server上にファイル共有を作成します。
まず、Windows Serverをドメイン参加させます。ホスト名はFILE-SHARE
とします。
> Get-WMIObject Win32_ComputerSystem Domain : corp.non-97.net Manufacturer : Amazon EC2 Model : t3.micro Name : FILE-SHARE PrimaryOwnerName : EC2 TotalPhysicalMemory : 1043886080
ドメイン参加後、Cドライブ配下にdata
というフォルダを作成します。そしてdata
配下にファイル共有用のフォルダを作成し、共有設定を行います。
AD DCから現行ファイルサーバーに接続して、ファイル共有一覧と、ファイル共有のACLを確認します。
# CIM セッションを作成 $src_cim = New-CimSession -ComputerName FILE-SHARE.corp.non-97.net # ファイル共有一覧を確認 > Get-SmbShare -CimSession $src_cim -Special $false Name ScopeName Path Description PSComputerName ---- --------- ---- ----------- -------------- share1 * C:\data\share1 FILE-SHARE.corp.non-97.net share2 * C:\data\share2 FILE-SHARE.corp.non-97.net share3 * C:\data\share1\share3 FILE-SHARE.corp.non-97.net share4 * C:\data\share2\folder\share4 FILE-SHARE.corp.non-97.net # 各ファイル共有のACLを確認 > Get-SmbShareAccess -CimSession $src_cim -Name @("share1", "share2", "share3", "share4") Name ScopeName AccountName AccessControlType AccessRight PSComputerName ---- --------- ----------- ----------------- ----------- -------------- share1 * BUILTIN\Administrators Allow Full FILE-SHARE.corp.non-97.net share1 * Everyone Allow Full FILE-SHARE.corp.non-97.net share2 * BUILTIN\Administrators Allow Full FILE-SHARE.corp.non-97.net share3 * Everyone Allow Read FILE-SHARE.corp.non-97.net share3 * CORP\FSxAdmin Allow Full FILE-SHARE.corp.non-97.net share4 * CORP\user01 Deny Full FILE-SHARE.corp.non-97.net share4 * Everyone Allow Read FILE-SHARE.corp.non-97.net share4 * CORP\FSxAdmin Allow Change FILE-SHARE.corp.non-97.net share4 * CORP\FSxAdminGroup Allow Read FILE-SHARE.corp.non-97.net
FSx for ONTAPのボリュームの準備
次に、FSx for ONTAPのボリュームの準備を行います。
ボリュームのジャンクションパスは現行ファイルサーバーのdata
配下のフォルダと同じような構成になるよう設定します。
作成したFSx for ONTAPファイルシステムとSVM、ボリュームは以下の通りです。
# FSx for ONTAPファイルシステム $ aws fsx describe-file-systems { "FileSystems": [ { "OwnerId": "<AWSアカウントID>", "CreationTime": "2022-12-05T01:04:35.935000+00:00", "FileSystemId": "fs-00f3521e554119927", "FileSystemType": "ONTAP", "Lifecycle": "AVAILABLE", "StorageCapacity": 1024, "StorageType": "SSD", "VpcId": "vpc-08b84da1f793ed513", "SubnetIds": [ "subnet-08dc789896a48a3b4" ], "NetworkInterfaceIds": [ "eni-02474777797d74791", "eni-0ef77474295f9589d" ], "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-00f3521e554119927", "Tags": [ { "Key": "aws:cloudformation:stack-name", "Value": "FsxnStack" }, { "Key": "aws:cloudformation:logical-id", "Value": "FSxforONTAPfilesystem" }, { "Key": "aws:cloudformation:stack-id", "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/FsxnStack/78cdb890-5423-11ed-81fb-0eac30df53d1" }, { "Key": "Name", "Value": "fsx-for-ontap-file-system" } ], "OntapConfiguration": { "AutomaticBackupRetentionDays": 7, "DailyAutomaticBackupStartTime": "16:00", "DeploymentType": "SINGLE_AZ_1", "Endpoints": { "Intercluster": { "DNSName": "intercluster.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.101", "10.0.1.125" ] }, "Management": { "DNSName": "management.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.126" ] } }, "DiskIopsConfiguration": { "Mode": "AUTOMATIC", "Iops": 3072 }, "PreferredSubnetId": "subnet-08dc789896a48a3b4", "ThroughputCapacity": 128, "WeeklyMaintenanceStartTime": "6:17:00" } } ] } # SVM $ aws fsx describe-storage-virtual-machines { "StorageVirtualMachines": [ { "ActiveDirectoryConfiguration": { "NetBiosName": "SVM", "SelfManagedActiveDirectoryConfiguration": { "DomainName": "corp.non-97.net", "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net", "UserName": "FSxServiceAccount", "DnsIps": [ "10.0.1.10" ] } }, "CreationTime": "2022-12-05T01:09:30.133000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.104", "10.0.1.68" ] }, "Management": { "DNSName": "svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.90" ] }, "Nfs": { "DNSName": "svm-06ea202c6382a01e2.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.1.90" ] }, "Smb": { "DNSName": "SVM.corp.non-97.net", "IpAddresses": [ "10.0.1.90" ] } }, "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "SVM", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-00f3521e554119927/svm-06ea202c6382a01e2", "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "Subtype": "DEFAULT", "UUID": "7d313a57-7439-11ed-acaf-79eab5a2c0a3" } ] } # ボリューム $ aws fsx describe-volumes { "Volumes": [ { "CreationTime": "2022-12-05T01:09:43+00:00", "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "SVM_root", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/", "SecurityStyle": "NTFS", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "StorageVirtualMachineRoot": true, "TieringPolicy": { "Name": "NONE" }, "UUID": "80376ed4-7439-11ed-acaf-79eab5a2c0a3", "OntapVolumeType": "RW" }, "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-050f8213db813435a", "VolumeId": "fsvol-050f8213db813435a", "VolumeType": "ONTAP" }, { "CreationTime": "2022-12-05T01:25:50.618000+00:00", "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "vol1", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/share1", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "cb013ef3-743b-11ed-acaf-79eab5a2c0a3", "OntapVolumeType": "RW" }, "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0b8c831fe3e882f08", "VolumeId": "fsvol-0b8c831fe3e882f08", "VolumeType": "ONTAP" }, { "CreationTime": "2022-12-05T01:26:05.844000+00:00", "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "vol2", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/share2", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "d77f0041-743b-11ed-acaf-79eab5a2c0a3", "OntapVolumeType": "RW" }, "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0e8e324f3ef670639", "VolumeId": "fsvol-0e8e324f3ef670639", "VolumeType": "ONTAP" }, { "CreationTime": "2022-12-05T01:26:24.767000+00:00", "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "vol3", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/share1/share3", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "e39612a2-743b-11ed-acaf-79eab5a2c0a3", "OntapVolumeType": "RW" }, "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0f61ae8d485189939", "VolumeId": "fsvol-0f61ae8d485189939", "VolumeType": "ONTAP" }, { "CreationTime": "2022-12-05T01:27:31.886000+00:00", "FileSystemId": "fs-00f3521e554119927", "Lifecycle": "CREATED", "Name": "vol4", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/share2/folder/share4", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-06ea202c6382a01e2", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "0865444f-743c-11ed-acaf-79eab5a2c0a3", "OntapVolumeType": "RW" }, "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-00f3521e554119927/fsvol-0e82b245a30602da9", "VolumeId": "fsvol-0e82b245a30602da9", "VolumeType": "ONTAP" } ] }
ちょっと見づらいですね。関係あるところはボリューム周りなので、ONTAP CLIでピックアップして確認します。
# ボリューム一覧の確認 FsxId00f3521e554119927::> volume show Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- SVM SVM_root aggr1 online RW 1GB 972.4MB 0% SVM vol1 aggr1 online RW 1GB 972.5MB 0% SVM vol2 aggr1 online RW 1GB 972.5MB 0% SVM vol3 aggr1 online RW 1GB 972.5MB 0% SVM vol4 aggr1 online RW 1GB 972.5MB 0% 5 entries were displayed. # ボリュームのジャンクションパスを確認 FsxId00f3521e554119927::> volume show -fields junction-path vserver volume junction-path ------- -------- ------------- SVM SVM_root / SVM vol1 /share1 SVM vol2 /share2 SVM vol3 /share1/share3 SVM vol4 /share2/folder/share4 5 entries were displayed.
また、ファイル共有はc$
とipc$
のみです。
FsxId00f3521e554119927::> cifs share show Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- SVM c$ / oplocks - BUILTIN\Administrators / Full Control browsable changenotify show-previous-versions SVM ipc$ / browsable - - 2 entries were displayed.
NetApp.ONTAP PowerShell Toolkitのインストール
次にNetApp.ONTAP PowerShell Toolkitのインストールします。
まず、前提条件を満たしているか確認します。
# .NET Frameworkのバージョンが4.7以上か > Get-Item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4 Name Property ---- -------- Full CBS : 1 Install : 1 InstallPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ Release : 528449 Servicing : 0 TargetVersion : 4.0.0 Version : 4.8.04161 # PowerShellのバージョンが5.1 or 7.0.3 以上か > $PSVersionTable Name Value ---- ----- PSVersion 5.1.20348.859 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.20348.859 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 # OSがWindows Server 2012以上か > Get-WmiObject Win32_OperatingSystem SystemDirectory : C:\Windows\system32 Organization : Amazon.com BuildNumber : 20348 RegisteredUser : EC2 SerialNumber : 00454-60000-00001-AA267 Version : 10.0.20348
各前提条件は満たしていますね。
それでは、NetApp.ONTAP PowerShell Toolkitのインストールを行います。
# インストール > Install-Module -Name NetApp.ONTAP NuGet provider is required to continue PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or 'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import the NuGet provider now? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y Untrusted repository You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y # インストールされたことを確認 > Get-Module ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content, Clear... Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object, Convert-String... Manifest 9.11.1.... NetApp.ONTAP {Add-NaAggr, Add-NaCifsShare, Add-NaCredential, Add-NaFpolicyExtensio... Binary 1.0.0.1 PackageManagement {Find-Package, Find-PackageProvider, Get-Package, Get-PackageProvider... Script 1.0.0.1 PowerShellGet {Find-Command, Find-DscResource, Find-Module, Find-RoleCapability, Fi... Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLineKey...
インストールされましたね。
次にインストールされたコマンドレットを確認します。全部で2,340個ほどあるとのことなので、先頭10件のみ表示します。
> Get-Command -Module NetApp.ONTAP | Select-Object -First 10 | Format-Table -AutoSize -Wrap CommandType Name Version Source ----------- ---- ------- ------ Alias Add-NcHostIscsiConnection 9.11.1.2208 NetApp.ONTAP Alias Connect-NcHostIscsiTarget 9.11.1.2208 NetApp.ONTAP Alias ConvertTo-NcLun 9.11.1.2208 NetApp.ONTAP Alias ConvertTo-NcVhd 9.11.1.2208 NetApp.ONTAP Alias ConvertTo-NcVhdx 9.11.1.2208 NetApp.ONTAP Alias ConvertTo-NcVmdk 9.11.1.2208 NetApp.ONTAP Alias Copy-NcHostFile 9.11.1.2208 NetApp.ONTAP Alias Disconnect-NcHostIscsiTarget 9.11.1.2208 NetApp.ONTAP Alias Dismount-NcHostVolume 9.11.1.2208 NetApp.ONTAP Alias Dismount-NcVirtualDisk 9.11.1.2208 NetApp.ONTAP
コマンドレットが認識されていますね。
コマンドレットのヘルプも確認します。試しにAdd-NcHostIscsiConnection
のヘルプの確認です。
> Get-Help Add-NcHostIscsiConnection Do you want to run Update-Help? The Update-Help cmdlet downloads the most current Help files for Windows PowerShell modules, and installs them on your computer. For more information about the Update-Help cmdlet, see https:/go.microsoft.com/fwlink/?LinkId=210614. [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y NAME Add-NaHostIscsiConnection SYNOPSIS Add a connection to an existing iSCSI session. SYNTAX Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>] [-HeaderDigest] [-DataDigest] [<CommonParameters>] Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>] [-Credential <PSCredential>] [-MutualChap] [-HeaderDigest] [-DataDigest] [-RadiusVerify] [<CommonParameters>] Add-NaHostIscsiConnection [-SessionId] <String> [-TargetIp <String>] [-TargetPort <UInt16>] [-InitiatorIp <String>] [-MutualChap] [-HeaderDigest] [-DataDigest] [-RadiusGenerate] [-RadiusVerify] [<CommonParameters>] DESCRIPTION Add a connection to an existing iSCSI session. RELATED LINKS Remove-NaHostIscsiConnection REMARKS To see the examples, type: "get-help Add-NaHostIscsiConnection -examples". For more information, type: "get-help Add-NaHostIscsiConnection -detailed". For technical information, type: "get-help Add-NaHostIscsiConnection -full". For online help, type: "get-help Add-NaHostIscsiConnection -online"
ヘルプの確認もできました。例やパラメーターの詳細は末尾に-examples
や-detailed
を付与するようです。
ブラウザで確認したいよ!! という方はC:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C
に各コマンドレットのHTMLのマニュアルがあるので、こちらからご確認ください。
> ls "C:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C" | Select-Object -First 10 Directory: C:\Program Files\WindowsPowerShell\Modules\NetApp.ONTAP\9.11.1.2208\webhelp.C Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 5/10/2021 4:33 PM 333036 apis.html -a---- 5/10/2021 4:33 PM 8558 categories.html -a---- 5/10/2021 4:33 PM 3559 cat_active directory.html -a---- 5/10/2021 4:33 PM 12349 cat_aggr.html -a---- 5/10/2021 4:33 PM 4771 cat_antivirus.html -a---- 5/10/2021 4:33 PM 2933 cat_audit.html -a---- 5/10/2021 4:33 PM 6953 cat_autosupport.html -a---- 5/10/2021 4:33 PM 5797 cat_cf.html -a---- 5/10/2021 4:33 PM 21695 cat_cifs.html -a---- 5/10/2021 4:33 PM 2943 cat_clock.html
こちらのHTMLファイルをブラウザで開くと以下のようなります。
NetApp.ONTAP PowerShell Toolkitを使ったFSx for ONTAPへの接続
NetApp.ONTAP PowerShell Toolkitを使ってFSx for ONTAPへ接続を行います。
接続はConnect-NcController
を使用します。実行結果は以下の通りです。
> Connect-NcController management.fs-00f3521e554119927.fsx.us-east-1.amazonaws.com -Credential fsxadmin Name Address Vserver Version ---- ------- ------- ------- management.fs-00f... 10.0.1.126 NetApp Release 9.11.1P3: Thu Sep 29 16:06:51 UTC 2022
途中認証情報を入力するためのウィンドウが表示されます。fsxadmin
のパスワードを入力してOK
をクリックします。
接続ができたら、CIFSサーバーとファイル共有を確認します。
# CIFSサーバーの一覧 > Get-NcCifsServer CifsServer AuthStyle Domain OrganizationalUnit ---------- --------- ------ ------------------ SVM CORP.NON-97.NET OU=FSxForONTAP,DC=corp... # ファイル共有の一覧 > Get-NcCifsShare CifsServer ShareName Path Comment ---------- --------- ---- ------- c$ / ipc$ /
どちらも確認できました。ただ、Get-NcCifsShare
のCifsServer
が表示されないのがちょっと気がかりです。
ファイル共有をFSx for ONTAP上に作成
本題の、FSx for ONTAP上への現行ファイルサーバーのファイル共有と同じ設定のファイル共有の作成を行います。
用意したスクリプトは以下の通りです。
# ファイル共有を作成するSVMの名前 $svm_name = "SVM" Get-SmbShare -CimSession $src_cim -Special $false | ForEach-Object { # 現行ファイルサーバーの共有情報の確認 echo "========================================================" echo "[src smb share]" echo "-----------------------------" echo $_ | Format-Table -AutoSize -Wrap echo "-----------------------------" $src_smb_share = $_ # SVM上に現行ファイルサーバーと同じ名前、パスのファイル共有を作成 $dst_smb_share = Add-NcCifsShare ` -Name $src_smb_share.Name ` -Path $src_smb_share.Path.Replace("C:\data", "").Replace("\", "/") ` -VserverContext "$svm_name" # デフォルトで設定される Everyone への許可を削除 Remove-NcCifsShareAcl ` -Share $dst_smb_share.ShareName ` -UserOrGroup Everyone ` -UserGroupType windows ` -VserverContext $svm_name # ファイル共有のACLの設定 $_ | Get-SmbShareAccess | ForEach-Object { # 現行ファイルサーバーのファイル共有のACLを確認 echo "**********************************" echo "[src smb share acl]" echo "-----------------------------" echo $_ | Format-Table -AutoSize -Wrap echo "-----------------------------" # -Permission で指定する文字列を整形 $access_right = ([string]$_.AccessRight).ToLower() $permission = if ("$access_right" -eq "full") { Write-Output "full_control" } else { Write-Output "$access_right" } # 現行ファイルサーバーのファイル共有に合わせてACEを追加 $dst_smb_share_acl = if ( $_.AccessControlType -eq 'Allow' ) { Add-NcCifsShareAcl ` -Share $dst_smb_share.ShareName ` -UserOrGroup $_.AccountName ` -Permission "$permission" ` -UserGroupType "windows" ` -VserverContext "$svm_name" } else { Add-NcCifsShareAcl ` -Share $dst_smb_share.ShareName ` -UserOrGroup $_.AccountName ` -Permission "no_access" ` -UserGroupType "windows" ` -VserverContext "$svm_name" } # 追加したACEの確認 echo "[dst smb share acl]" echo "-----------------------------" echo $dst_smb_share_acl echo "-----------------------------" echo "**********************************" } echo "========================================================" }
処理の流れは以下の通りです。
- 現行ファイルサーバーのファイル共有一覧を取得
- 現行ファイルサーバーのファイル共有と同じ名前、パスのファイル共有をFSx for ONTAP上に作成する
- FSx for ONTAP上に作成されたファイル共有から Everyone への許可を削除する
- 現行ファイルサーバーのファイル共有に設定されているACLを取得
- 現行ファイルサーバーのファイル共有に設定されているACLのACEと同じユーザー名、権限でFSx for ONTAP上のファイル共有のACLにACEを追加する
こちらのスクリプトの実行結果した際の標準出力は以下の通りです。
======================================================== [src smb share] ----------------------------- Name ScopeName Path Description PSComputerName ---- --------- ---- ----------- -------------- share1 * C:\data\share1 FILE-SHARE.corp.non-97.net ----------------------------- ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share1 * BUILTIN\Administrators Allow Full ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share1 BUILTIN\Administrators full_control ----------------------------- ********************************** ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share1 * Everyone Allow Full ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share1 Everyone full_control ----------------------------- ********************************** ======================================================== ======================================================== [src smb share] ----------------------------- Name ScopeName Path Description PSComputerName ---- --------- ---- ----------- -------------- share2 * C:\data\share2 FILE-SHARE.corp.non-97.net ----------------------------- ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share2 * BUILTIN\Administrators Allow Full ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share2 BUILTIN\Administrators full_control ----------------------------- ********************************** ======================================================== ======================================================== [src smb share] ----------------------------- Name ScopeName Path Description PSComputerName ---- --------- ---- ----------- -------------- share3 * C:\data\share1\share3 FILE-SHARE.corp.non-97.net ----------------------------- ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share3 * Everyone Allow Read ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share3 Everyone read ----------------------------- ********************************** ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share3 * CORP\FSxAdmin Allow Full ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share3 CORP\FSxAdmin full_control ----------------------------- ********************************** ======================================================== ======================================================== [src smb share] ----------------------------- Name ScopeName Path Description PSComputerName ---- --------- ---- ----------- -------------- share4 * C:\data\share2\folder\share4 FILE-SHARE.corp.non-97.net ----------------------------- ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share4 * CORP\user01 Deny Full ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share4 CORP\user01 no_access ----------------------------- ********************************** ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share4 * Everyone Allow Read ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share4 Everyone read ----------------------------- ********************************** ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share4 * CORP\FSxAdmin Allow Change ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share4 CORP\FSxAdmin change ----------------------------- ********************************** ********************************** [src smb share acl] ----------------------------- Name ScopeName AccountName AccessControlType AccessRight ---- --------- ----------- ----------------- ----------- share4 * CORP\FSxAdminGroup Allow Read ----------------------------- [dst smb share acl] ----------------------------- Share UserOrGroup Permission ----- ----------- ---------- share4 CORP\FSxAdminGroup read ----------------------------- ********************************** ========================================================
特にエラーなく実行できていますね。
FSx for ONTAP上のファイル共有を確認してみます。
# ファイル共有の確認 FsxId00f3521e554119927::> cifs share show Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- SVM c$ / oplocks - BUILTIN\Administrators / Full Control browsable changenotify show-previous-versions SVM ipc$ / browsable - - SVM share1 /share1 browsable - BUILTIN\Administrators / Full Control show-previous-versions Everyone / Full Control SVM share2 /share2 browsable - BUILTIN\Administrators / Full Control show-previous-versions SVM share3 /share1/share3 browsable - CORP\FSxAdmin / Full Control show-previous-versions Everyone / Read SVM share4 /share2/folder/ browsable - CORP\FSxAdmin / Change share4 show-previous-versions CORP\FSxAdminGroup / Read CORP\user01 / No access Everyone / Read 6 entries were displayed. # ファイル共有のACLの確認 FsxId00f3521e554119927::> cifs share access-control show Share User/Group User/Group Access Vserver Name Name Type Permission -------------- ----------- --------------------------- ----------- ----------- SVM c$ BUILTIN\Administrators windows Full_Control SVM share1 BUILTIN\Administrators windows Full_Control SVM share1 Everyone windows Full_Control SVM share2 BUILTIN\Administrators windows Full_Control SVM share3 CORP\FSxAdmin windows Full_Control SVM share3 Everyone windows Read SVM share4 CORP\FSxAdmin windows Change SVM share4 CORP\FSxAdminGroup windows Read SVM share4 CORP\user01 windows No_access SVM share4 Everyone windows Read 10 entries were displayed. FsxId00f3521e554119927::>
現行ファイルサーバー上のファイル共有と同じファイル共有、ACLが設定されていました。
NetApp.ONTAP PowerShell Toolkitから作成したファイル共有には、ONTAP CLIから作成するとデフォルトで付与されるoplocks
とchangenotify
が付与されていなかったので手動で付与してあげます。
# oplocks と changenotify の付与 FsxId00f3521e554119927::> cifs share properties add -share-name share* -share-properties oplocks, changenotify 4 entries were acted on. # 作成したファイル共有に oplocks と changenotify が付与されたことを確認 FsxId00f3521e554119927::> cifs share show Vserver Share Path Properties Comment ACL -------------- ------------- ----------------- ---------- -------- ----------- SVM c$ / oplocks - BUILTIN\Administrators / Full Control browsable changenotify show-previous-versions SVM ipc$ / browsable - - SVM share1 /share1 oplocks - BUILTIN\Administrators / Full Control browsable Everyone / Full Control changenotify show-previous-versions SVM share2 /share2 oplocks - BUILTIN\Administrators / Full Control browsable changenotify show-previous-versions SVM share3 /share1/share3 oplocks - CORP\FSxAdmin / Full Control browsable Everyone / Read changenotify show-previous-versions SVM share4 /share2/folder/ oplocks - CORP\FSxAdmin / Change share4 browsable CORP\FSxAdminGroup / Read changenotify CORP\user01 / No access show-previous-versions Everyone / Read
めでたし。めでたし。
と言いたいところですが、このスクリプトではACLのFull Control以外のDenyを表現することができません。例えばReadのみのDenyを表現しようとしても必ずNo access
となります。これはONTAP REST APIの仕様上、ファイル共有のACLのタイプは許可/拒否で分かれているのではなく、以下の4つしか選択できないためです。
- Full_Control
- Change
- Read
- No_access
もし、ReadのみのDenyがある場合は、手動で設定するのが良いでしょう。
ONTAP REST APIとのスクリプトを組み合わせたい時に
NetApp.ONTAP PowerShell Toolkitを使ったスクリプトで、現行ファイルサーバーのファイル共有の設定と(ほぼ)同じ設定のファイル共有をFSx for ONTAP上に作成してみました。
「ONTAP REST APIをそのまま触るのはちょっと辛い...」という方には特にオススメです。スクリプトで処理させたい内容に応じてNetApp.ONTAP PowerShell ToolkitかNetApp ONTAP Python client libraryを使い分けると良いでしょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!