この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWSのAPIでもっとFSx for ONTAPの操作をしたいな
こんにちは、のんピ(@non____97)です。
皆さんは皆さんはAWSのAPIでもっとAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)の操作をしたいなと思ったことはありますか? 私はあります。
以下記事で紹介した通り、AWSのAPIから操作できるFSx for ONTAPの操作は限りがあります。
AWSのAPIから操作できないものについては、ONTAP CLIもしくはONTAP REST APIを使って操作することになります。
しかし、AWSのAPIがサポートしなければCloudFormationやシェルスクリプト、AWS SDKを使って自動化することは難しいです。
今回のアップデートでAWSのAPIでFSx forONTAPのボリュームのタイプとスナップショットポリシーを指定できるようになりました。
Change | Description | Date |
---|---|---|
Support added for creating DP volumes | You can now create DP (data-protection) volumes by using the Amazon FSx console, AWS CLI, or Amazon FSx API. You can use DP volumes as the destination of a NetApp SnapMirror or SnapVault relationship, when you want to migrate or protect a single volume's data. For more information, see Volume types. | November 28, 2022 |
Support added for choosing a snapshot policy | You can now choose from three built-in snapshot policies when creating or updating a volume using the Amazon FSx console, AWS CLI, or Amazon FSx API. You can also select a custom snapshot policy that you made in the ONTAP CLI or REST API. For more information, see Snapshot policies. | November 28, 2022 |
少しAWS側から操作できる範囲が増えましたね。
早速使ってみたので紹介します。
いきなりまとめ
- ボリューム作成時に以下2種類のタイプを選択できるようになった
RW
(read-write) : 読み書き可能なボリュームDP
(data-protection) : SnapMirroまたはSnapVaultの送信先ボリュームとして使用する読み取り専用ボリューム
- ボリュームのタイプを作成後に変更することはできない
- スナップショットポリシーはFSx for ONTAPファイルシステム上で自分で作成したものも指定できる
ボリュームのタイプとは
ONTAPのボリュームタイプは以下2種類あります。
RW
(read-write) : 読み書き可能なボリュームDP
(data-protection) : SnapMirroまたはSnapVaultの送信先ボリュームとして使用する読み取り専用ボリューム
一般的な用途のボリュームはRW
を選択します。SnapMirrorの検証をした際の記事は以下です。
気づいたらAWS公式ドキュメントもSnapMirrorを使った移行方法を掲載してくれました。時代が私に追いついてきた感がありますね。
なお、ボリューム作成後にボリュームタイプを変更することはできません。(SnapMirrorのカットオーバーによりDP
からRW
に変更するのは可能)
スナップショットポリシーとは
スナップショットポリシーとはボリュームのスナップショットを作成するタイミングや保持するスナップショットの数、命名規約を指定するものです。
FSx for ONTAPではデフォルトで以下スナップショットポリシーがあります。
default
- 毎時5分にスナップショットを作成。最大6世代保持
- 日時で0:10にスナップショットを作成。最大2世代保持
- 週次で日曜0:15にスナップショットを作成。最大2世代保持
default-1weekly
:- 毎時5分にスナップショットを作成。最大6世代保持
- 日時で0:10にスナップショットを作成。最大2世代保持
- 週次で日曜0:15にスナップショットを作成。最大1世代保持
none
:- スナップショットを作成しない
デフォルトではdefault
が割り当たっています。
やってみた
検証環境
実際に試してみましょう。検証環境は以下の通りです。
AD DCについては以下記事の検証で使用したものを流用します。
検証環境で使用するFSx for ONTAPファイルシステムとSVMは以下の通りです。
# FSx for ONTAPファイルシステム
$ aws fsx describe-file-systems
{
"FileSystems": [
{
"OwnerId": "<AWSアカウントID>",
"CreationTime": "2022-11-30T07:48:20.139000+00:00",
"FileSystemId": "fs-057bb6afad5d6a27f",
"FileSystemType": "ONTAP",
"Lifecycle": "AVAILABLE",
"StorageCapacity": 1024,
"StorageType": "SSD",
"VpcId": "vpc-08b84da1f793ed513",
"SubnetIds": [
"subnet-08dc789896a48a3b4"
],
"NetworkInterfaceIds": [
"eni-06bae9be1eea485d2",
"eni-0f9c0238fb2e62041"
],
"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-057bb6afad5d6a27f",
"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-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.100",
"10.0.1.125"
]
},
"Management": {
"DNSName": "management.fs-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.77"
]
}
},
"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-11-30T08:07:18.268000+00:00",
"Endpoints": {
"Iscsi": {
"DNSName": "iscsi.svm-036a8896a2b36a1cd.fs-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.117",
"10.0.1.126"
]
},
"Management": {
"DNSName": "svm-036a8896a2b36a1cd.fs-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.78"
]
},
"Nfs": {
"DNSName": "svm-036a8896a2b36a1cd.fs-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com",
"IpAddresses": [
"10.0.1.78"
]
},
"Smb": {
"DNSName": "SVM.corp.non-97.net",
"IpAddresses": [
"10.0.1.78"
]
}
},
"FileSystemId": "fs-057bb6afad5d6a27f",
"Lifecycle": "CREATED",
"Name": "SVM",
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-057bb6afad5d6a27f/svm-036a8896a2b36a1cd",
"StorageVirtualMachineId": "svm-036a8896a2b36a1cd",
"Subtype": "DEFAULT",
"UUID": "0c8f34a3-7086-11ed-a102-3371ad725102"
}
]
}
ボリュームの作成
ボリュームの作成から行います。
まず、ボリュームタイプがDP
のボリュームを作成します。ボリュームタイプがDP
なのでスナップショットポリシーやジャンクションパス、Storage Efficiencyが指定できないですね。
次にボリュームタイプがRW
のボリュームを作成します。スナップショットはDefault-1weekly
を指定しました。
作成したボリュームをONTAP CLIで確認します。
# FSx for ONTAPファイルシステムにSSHで接続
> ssh fsxadmin@management.fs-057bb6afad5d6a27f.fsx.us-east-1.amazonaws.com
Password:
This is your first recorded login.
Unsuccessful login attempts since last login: 5
# ボリューム一覧を確認
FsxId057bb6afad5d6a27f::> volume show
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
SVM SVM_root aggr1 online RW 1GB 972.5MB 0%
SVM dp aggr1 online DP 1GB 1023MB 0%
SVM rw aggr1 online RW 1GB 972.5MB 0%
# 各ボリュームのジャンクションパス、タイプ、スナップショットポリシーを確認
FsxId057bb6afad5d6a27f::> volume show -fields snapshot-policy, type, junction-path
vserver volume junction-path type snapshot-policy
------- -------- ------------- ---- ---------------
SVM SVM_root / RW default
SVM dp - DP none
SVM rw /rw RW default-1weekly
# DPのStorage Efficiencyが無効化されていることを確認
FsxId057bb6afad5d6a27f::> volume efficiency show
Vserver Volume State Status Progress Policy
---------- ---------------- --------- ----------- ------------------ ----------
SVM dp Disabled Idle Idle for 00:00:00 -
SVM rw Enabled Idle Idle for 00:02:58 auto
2 entries were displayed.
ちなみにタイプがDP
のボリュームにジャンクションパスを設定することはできません。設定しようとすると以下のように怒られます。
FsxId057bb6afad5d6a27f::> volume mount -vserver SVM -volume dp -junction-path /dp -active true
Error: command failed: Volume dp in Vserver "SVM" is not mountable until a "snapmirror initialize" has been completed.
また、各ボリュームで変更できる項目は以下の通りです。
- タイプが
DP
の場合 -
タイプが
RW
の場合
スナップショットポリシーの変更
次にボリュームに割り当てているスナップショットポリシーを変更します。
現在のスナップショットポリシーは以下の通りです。
FsxId057bb6afad5d6a27f::> snapshot policy show
Vserver: FsxId057bb6afad5d6a27f
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
default 3 true Default policy with hourly, daily & weekly schedules.
Schedule Count Prefix SnapMirror Label
---------------------- ----- ---------------------- -------------------
hourly 6 hourly -
daily 2 daily daily
weekly 2 weekly weekly
default-1weekly 3 true Default policy with 6 hourly, 2 daily & 1 weekly schedule.
Schedule Count Prefix SnapMirror Label
---------------------- ----- ---------------------- -------------------
hourly 6 hourly -
daily 2 daily -
weekly 1 weekly -
none 0 false Policy for no automatic snapshots.
Schedule Count Prefix SnapMirror Label
---------------------- ----- ---------------------- -------------------
- - - -
3 entries were displayed.
新しく5分間隔で6世代保持するスナップショットポリシーを作成します。
# スナップショットポリシーの作成
FsxId057bb6afad5d6a27f::> snapshot policy create -policy snapshot_policy_every_5_min -enabled true -schedule1 5min -count1 6 -prefix1 every_5_min
# 作成されたスナップショットポリシーの確認
FsxId057bb6afad5d6a27f::> snapshot policy show -policy snapshot_policy_every_5_min
Vserver: FsxId057bb6afad5d6a27f
Number of Is
Policy Name Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
snapshot_policy_every_5_min 1 true -
Schedule Count Prefix SnapMirror Label
---------------------- ----- ---------------------- -------------------
5min 6 every_5_min -
それでは、こちらのスナップショットポリシーをボリュームに適用します。
ボリュームを選択してアクション
-ボリュームを更新
をクリックします。スナップショットポリシーでカスタムポリシー
を選択し、テキストエリアに先ほど作成したスナップショットポリシーを入力します。
適用後、AWS CLIからボリュームの状態を確認します。
$ aws fsx describe-volumes \
--volume-ids fsvol-038052dda88b09f15
{
"Volumes": [
{
"CreationTime": 1669796577.333,
"FileSystemId": "fs-057bb6afad5d6a27f",
"Lifecycle": "CREATED",
"Name": "rw",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/rw",
"SecurityStyle": "NTFS",
"SizeInMegabytes": 1024,
"StorageEfficiencyEnabled": true,
"StorageVirtualMachineId": "svm-036a8896a2b36a1cd",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"CoolingPeriod": 31,
"Name": "AUTO"
},
"UUID": "41a51a58-7088-11ed-a102-3371ad725102",
"OntapVolumeType": "RW",
"SnapshotPolicy": "snapshot_policy_every_5_min",
"CopyTagsToBackups": false
},
"ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-057bb6afad5d6a27f/fsvol-038052dda88b09f15",
"VolumeId": "fsvol-038052dda88b09f15",
"VolumeType": "ONTAP"
}
]
}
SnapshotPolicy
がsnapshot_policy_every_5_min
になっていますね。
ONTAP CLIからもスナップショットポリシーがこちらのボリュームに適用されていることを確認します。
FsxId057bb6afad5d6a27f::> volume show -fields snapshot-policy
vserver volume snapshot-policy
------- -------- ---------------
SVM SVM_root default
SVM dp none
SVM rw snapshot_policy_every_5_min
3 entries were displayed.
マネジメントコンソールから指定したスナップショットポリシーがボリュームに適用されていることが分かります。
また、スナップショット一覧を確認すると、5分間隔で指定したスナップショットが作成されているのが確認できました。
FsxId057bb6afad5d6a27f::> snapshot show -volume rw
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
SVM rw
every_5_min.2022-11-30_1750 164KB 0% 46%
every_5_min.2022-11-30_1755 168KB 0% 46%
2 entries were displayed.
スナップショットのリストア確認
アップデートの確認は以上ですが、せっかくなのでスナップショットからファイルをリストアできることを確認します。
まず、cifs-share
というCIFSファイル共有を作成します。
# CIFSファイル共有を作成
FsxId057bb6afad5d6a27f::> cifs share create -vserver SVM -share-name cifs-share -path /rw
# CIFSファイル共有が作成されたことを確認
FsxId057bb6afad5d6a27f::> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
SVM c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
SVM cifs-share /rw oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
SVM ipc$ / browsable - -
3 entries were displayed.
作成されたCIFSファイル共有をAD DCのZドライブにマウントし、適当にファイルを作成します。
# 作成されたCIFSファイル共有をZドライブにマウント
> net use Z: \\SVM.corp.non-97.net\cifs-share
The command completed successfully.
# マウントされていることを確認
> Get-PSDrive
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Alias Alias
C 15.40 14.60 FileSystem C:\ Users\Administrator
Cert Certificate \
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
WSMan WSMan
Z 0.00 0.95 FileSystem \\SVM.corp.non-97.net\cifs-share
# 書き込みができることを確認
> echo "test1" > Z:\test.txt
# 読み込みができることを確認
> ls Z:\
Directory: Z:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/29/2022 11:10 PM 16 test.txt
> cat Z:\test.txt
test1
マウント及びテキストファイルの作成を行いました。
スナップショットが取得されるまで少し待ちます。
スナップショットが作成される時間になったら作成したファイルを削除します。
# ファイルを削除
> rm Z:\test.txt
# ファイルが削除されていることを確認
> ls Z:\
その後エクスプローラーでZドライブを開き、右クリックしてプロパティのPrevious Versions(以前のバージョン)
を選択すると、5分間隔で作成されたバージョン一覧を確認できました。スナップショットが積もり積もっていますね。ここから確認できるのはCIFSファイル共有のプロパティでshow-previous-versions
が付与されているためです。
最新のバージョンを開くと、削除したテキストファイルを確認できました。
こちらのファイルをリストアしましょう。リストアしたいバージョンを選択してRestore
をクリックします。
刻を戻しても良いか確認されるので、Restore
をクリックします。
以前のバージョンへのリストアが成功したとメッセージが表示されることを確認します。
テキストファイルがリストアされていることを確認します。
> ls Z:\
Directory: Z:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/29/2022 11:10 PM 16 test.txt
確かにリストアされていますね。
スナップショットディレクトリの確認
次にスナップショットディレクトリを確認しましょう。
PowerShell上ではZ:\.snapshot
、Z:\~snapshot
どちらの指定方法でもスナップショットディレクトリにアクセスできました。
> ls Z:\.snapshot
Directory: Z:\.snapshot
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1755
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1800
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1805
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1810
d----- 11/29/2022 11:10 PM every_5_min.2022-11-30_1815
d----- 11/29/2022 11:16 PM every_5_min.2022-11-30_1820
> ls Z:\~snapshot
Directory: Z:\~snapshot
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1755
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1800
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1805
d----- 11/29/2022 10:23 PM every_5_min.2022-11-30_1810
d----- 11/29/2022 11:10 PM every_5_min.2022-11-30_1815
d----- 11/29/2022 11:16 PM every_5_min.2022-11-30_1820
> ls Z:\.snapshot\every_5_min.2022-11-30_1815
Directory: Z:\.snapshot\every_5_min.2022-11-30_1815
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/29/2022 11:10 PM 16 test.txt
CIFSファイル共有のプロパティでshowsnapshot
を設定していないにも関わらずアクセスできましたね。
エクスプローラーからもスナップショットディレクトリにアクセスできるか確認してみます。確認したところZ:\.snapshot
、Z:\~snapshot
どちらもアクセスできませんでした。
PowerShellからはアクセスできて、エクスプローラーからはアクセスできないというのは要注意ですね。
試しにCIFSファイル共有のプロパティでshowsnapshot
を設定します。
# CIFSファイル共有のプロパティに showsnapshot を追加
FsxId057bb6afad5d6a27f::> cifs share properties add -share-name cifs-share -share-properties showsnapshot
# showsnapshot が追加されたことを確認
FsxId057bb6afad5d6a27f::> cifs share properties show
Vserver Share Properties
---------------- ------------------------- -----------------------------
SVM c$ oplocks
browsable
changenotify
show-previous-versions
SVM cifs-share oplocks
browsable
showsnapshot
changenotify
show-previous-versions
SVM ipc$ browsable
3 entries were displayed.
この状態で再度エクスプローラーからスナップショットディレクトリにアクセスしてみます。すると、Z:\.snapshot
にはアクセスできませんでしたが、Z:\~snapshot
にはアクセスできるようになりました。
スナップショットディレクトリにアクセスできないようにする
場合によってはスナップショットディレクトリを見せたくないこともあると思います。そのような場合はCIFSファイル共有ではなく、ボリュームで制御します。具体的にはsnapdir-access
をfalse
にします。
[-snapdir-access {true|false}] - Snapshot Directory Access Enabled
This optionally specifies whether clients have access to .snapshot directories. The default setting is true .
# 現在の設定を確認
FsxId057bb6afad5d6a27f::> volume show -volume rw -fields snapdir-access
vserver volume snapdir-access
------- ------ --------------
SVM rw true
# snapdir-access を false に変更
FsxId057bb6afad5d6a27f::> volume modify -vserver SVM -volume rw -snapdir-access false
Volume modify successful on volume rw of Vserver SVM.
# snapdir-access が false になったことを確認
FsxId057bb6afad5d6a27f::> volume show -volume rw -fields snapdir-access
vserver volume snapdir-access
------- ------ --------------
SVM rw false
# CIFSファイル共有のプロパティは変更されていないことを確認
FsxId057bb6afad5d6a27f::> cifs share properties show -share-name cifs-share
Vserver Share Properties
---------------- ------------------------- -----------------------------
SVM cifs-share oplocks
browsable
showsnapshot
changenotify
show-previous-versions
PowerShellでスナップショットディレクトリにアクセスしようとしたところ、そんなパスはないと怒られてしまいました。
> ls Z:\~snapshot
ls : Cannot find path 'Z:\~snapshot' because it does not exist.
At line:1 char:1
+ ls Z:\~snapshot
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Z:\~snapshot:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
> ls Z:\.snapshot
ls : Cannot find path 'Z:\.snapshot' because it does not exist.
At line:1 char:1
+ ls Z:\.snapshot
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Z:\.snapshot:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
エクスプローラーからアクセスした際も同様のエラーで怒られます。
また、Zドライブ上で以前のバージョンを確認しようとしましたが、こちらも確認できなくなっていました。
AWSから操作できることが増えるのは素直に嬉しいね
AWSのAPIでAmazon FSx for NetApp ONTAPのボリュームのタイプとスナップショットポリシーを指定できるようになったアップデートを紹介しました。
AWSから操作できることが増えるのは素直に嬉しいですね。次はエクスポートポリシーが指定できると嬉しいなと思います。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!