[アップデート] AWS BackupがAmazon FSx for OpenZFSをサポートしました

FSxシリーズ全てのファイルシステムのバックアップをAWS Backupで管理できるようになったぞ
2022.07.14

FSxシリーズ全てのファイルシステムのバックアップをAWS Backupで管理できるぞ

こんにちは、のんピ(@non____97)です。

AWS BackupがAmazon FSx for OpenZFSをサポートしました。

これで、FSxシリーズ全てのファイルシステムのバックアップをAWS Backupで管理できるようになりました。やったね。

AWS Backupに対応したということで、以下のような悩みが解消できます。

  • 1時間ごとにバックアップを取得したい
  • バックアップの保持期間を1年にしたい
  • 指定のボリュームのみバックアップを取得する間隔をカスタマイズしたい
  • 別アカウントにバックアップをコピーしたい

AWS BackupがサポートしているFSx for OpenZFSのバックアップの機能は以下の通りです。

機能 対応状況
Cross-Region backup
Cross-account backup
AWS Backup Audit Manager
Incremental backup
Continuous backup and point-in-time restore (PITR)
Full AWS Backup management
Lifecycle to cold storage
Item-level restore

参考 : What is AWS Backup? - AWS Backup

早速AWS BackupでFSx for OpenZFSのバックアップを取得してみたので紹介します。

FSx for OpenZFSファイルシステムのデプロイ

FSx for OpenZFSファイルシステムをデプロイします。

デプロイはAWS CDKで行います。使用したコードは以下リポジトリに保存しています。

デプロイは7分ほどで完了しました。デプロイしたFSx for OpenZFSファイルシステムをAWS CLIで確認します。

$ aws fsx describe-file-systems
{
    "FileSystems": [
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-07-14T05:00:21.219000+00:00",
            "FileSystemId": "fs-057509d8c92f1cb4d",
            "FileSystemType": "OPENZFS",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 64,
            "StorageType": "SSD",
            "VpcId": "vpc-0148de084c4b0f41a",
            "SubnetIds": [
                "subnet-00da1a809e6109b5a"
            ],
            "NetworkInterfaceIds": [
                "eni-056ea97820e1f8fe6"
            ],
            "DNSName": "fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com",
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/<KMS ID>",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-057509d8c92f1cb4d",
            "Tags": [
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "OpenzfsStack"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "FSxforOpenZFS"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/OpenzfsStack/f7caf3e0-0330-11ed-8127-0ad888b702cf"
                },
                {
                    "Key": "Name",
                    "Value": "fsx-for-openzfs"
                }
            ],
            "OpenZFSConfiguration": {
                "AutomaticBackupRetentionDays": 31,
                "CopyTagsToBackups": true,
                "CopyTagsToVolumes": true,
                "DailyAutomaticBackupStartTime": "16:00",
                "DeploymentType": "SINGLE_AZ_1",
                "ThroughputCapacity": 64,
                "WeeklyMaintenanceStartTime": "6:17:00",
                "DiskIopsConfiguration": {
                    "Mode": "AUTOMATIC",
                    "Iops": 192
                },
                "RootVolumeId": "fsvol-0d8888da34de4774b"
            }
        }
    ]
}

ResourceARNは後で使用するので控えておきます。

テストファイルの作成

FSx for OpenZFSファイルシステムをマウントして、テストファイルを作成します。

# マウントポイントの作成
$ sudo mkdir /fsx

# マウント
$ sudo mount -t nfs -o nfsvers=4.1 fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com:/fsx /fsx

# マウントされたことを確認
$ df -hT
Filesystem                                            Type      Size  Used Avail Use% Mounted on
devtmpfs                                              devtmpfs  471M     0  471M   0% /dev
tmpfs                                                 tmpfs     479M     0  479M   0% /dev/shm
tmpfs                                                 tmpfs     479M  408K  478M   1% /run
tmpfs                                                 tmpfs     479M     0  479M   0% /sys/fs/cgroup
/dev/nvme0n1p1                                        xfs       8.0G  1.5G  6.5G  19% /
tmpfs                                                 tmpfs      96M     0   96M   0% /run/user/0
fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com:/fsx nfs4       64G     0   64G   0% /fsx

$ mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com:/fsx on /fsx type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.0.13,local_lock=none,addr=10.10.0.46)

# テストファイルの作成
$ mkdir /fsx/aws-backup-test
$ echo "This is a test file of AWS Backup." > /fsx/aws-backup-test/aws-backup-test.txt

# テストファイルの確認
$ ls -l /fsx/aws-backup-test/aws-backup-test.txt
-rw-r--r-- 1 ssm-user ssm-user 35 Jul 14 05:08 /fsx/aws-backup-test/aws-backup-test.txt

$ cat /fsx/aws-backup-test/aws-backup-test.txt
This is a test file of AWS Backup.

AWS Backupの動作確認

AWS Backupプランとルールの作成

AWS Backupプランとルールを作成します。

以前、AWS BackupがFSx for ONTAPをサポートした際はコンソールから作成しました。

同じでは面白くないので、AWS CLIで作成してみます。ちなみにFSx for OpenZFSのバックアップはボリューム単位ではなく、ファイルシステム単位です。

# バックアップ対象のFSx for OpenZFSファイルシステムのARNの指定
$ file_system_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-057509d8c92f1cb4d

# AWSアカウントIDの取得
$ aws_account=$(aws sts get-caller-identity \
  | jq -r ".Account"
)

# AWS Backupプランとルールのパラメータ
$ create_backup_plan_input=$(cat <<EOM
{
    "BackupPlan": {
        "BackupPlanName": "fsx-for-openzfs-backup-plan",
        "Rules": [
            {
                "RuleName": "fsx-for-openzfs-backup-rule",
                "TargetBackupVaultName": "Default",
                "ScheduleExpression": "cron(0 * * * ? *)",
                "StartWindowMinutes": 60,
                "CompletionWindowMinutes": 1440,
                "Lifecycle": {
                    "DeleteAfterDays": 31
                },
                "RecoveryPointTags": {
                    "KeyName": "fsx-for-openzfs-backup-rule"
                },
                "CopyActions": [
                    {
                        "Lifecycle": {
                            "DeleteAfterDays": 31
                        },
                        "DestinationBackupVaultArn": "arn:aws:backup:ap-northeast-1:$aws_account:backup-vault:Default"
                    }
                ]
            }
        ]
    },
    "BackupPlanTags": {
        "KeyName": "fsx-for-openzfs-backup-plan"
    }
}
EOM
)

# AWS Backupプランとルールの作成
$ create_backup_plan_output=$(aws backup create-backup-plan \
    --cli-input-json "$create_backup_plan_input"
)

リソースの割り当て

AWS Backupプランとルールの作成が完了したら、AWS Backupプランにバックアップ対象のFSx for OpenZFSファイルシステム割り当てます。

# AWS BackupプランのID取得
$ backup_plan_id=$(echo "$create_backup_plan_output" \
  | jq -r ".BackupPlanId"
)

# AWS Backupプランにバックアップ対象のFSx for OpenZFSファイルシステム割り当てる時のパラメータ
$ create_backup_selection_input=$(cat <<EOM
{
    "BackupPlanId": "$backup_plan_id",
    "BackupSelection": {
        "SelectionName": "fsx-for-openzfs",
        "IamRoleArn": "arn:aws:iam::$aws_account:role/service-role/AWSBackupDefaultServiceRole",
        "Resources": [
            "$file_system_arn"
        ]
    }
}
EOM
)

# AWS Backupプランにバックアップ対象のFSx for OpenZFSファイルシステム割り当て
$ create_backup_selection_output=$(aws backup create-backup-selection \
    --cli-input-json "$create_backup_selection_input"
)

# AWS Backupプランにバックアップ対象のFSx for OpenZFSファイルシステム割り当てられたか確認
$ aws backup list-backup-selections \
    --backup-plan-id "$backup_plan_id"
{
    "BackupSelectionsList": [
        {
            "SelectionId": "6e5c4b1c-34b7-4c4e-bd4e-ffeaaa8a72cc",
            "SelectionName": "fsx-for-openzfs",
            "BackupPlanId": "29c9aaef-e1c1-4789-a23a-00f0d808bbb0",
            "CreationDate": "2022-07-14T05:40:33.171000+00:00",
            "IamRoleArn": "arn:aws:iam::<AWSアカウントID>:role/service-role/AWSBackupDefaultServiceRole"
        }
    ]
}

バックアップの確認

バックアップルールでcron(0 * * * ? *)と指定したので、3:00になるとバックアップジョブが動き始めました。

バックアップジョブ_作成しました

しばらくするとバックアップジョブのステータスが作成しましたから実行中完了に変わりました。

バックアップジョブ_実行中

バックアップジョブ_完了

バックアップボールトを確認すると、バックアップが作成されていることが分かります。

バックアップボールトの確認

バックアップをクリックすると、有効期限などの詳細を確認することができます。

バックアップの確認

FSxのコンソールからもバックアップを確認できます。

FSxのコンソールからバックアップの確認

コピージョブも確認します。

コピージョブのステータスも完了になっています。

コピージョブ_完了

バックアップの詳細を確認します。ソースリージョンやソースアカウントIDなどの情報が記載されています。

コピーされたバックアップの確認

FSxのコンソールからもコピーされたバックアップを確認できます。どれがコピーされたバックアップなのか分かりやすくて良いですね。

FSxのコンソールからコピーされたバックアップの確認

バックアップからのリストア

それではバックアップからリストアします。

保護されたリソースのFSx for OpenZFSファイルシステムから復旧ポイントを選択して、復元をクリックします。

復元

復元オプションは標準の復元を選択します。

復元オプション

セキュリティグループを選択して、その他の設定はデフォルトのままでバックアップを復元をクリックします。

ネットワークと暗号化とルートボリュームの設定

バックアップとメンテナンス及びロールを復元

リストアジョブが始まりました。

ジョブを復元

10分弱でリストアジョブのステータスが完了になりました。

リストアジョブの完了

FSxのコンソールを確認すると、ファイルシステムが追加されていました。

リストアしたファイルシステムの確認

AWS CLIからも確認してみます。

$ aws fsx describe-file-systems
{
    "FileSystems": [
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-07-14T05:00:21.219000+00:00",
            "FileSystemId": "fs-057509d8c92f1cb4d",
            "FileSystemType": "OPENZFS",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 64,
            "StorageType": "SSD",
            "VpcId": "vpc-0148de084c4b0f41a",
            "SubnetIds": [
                "subnet-00da1a809e6109b5a"
            ],
            "NetworkInterfaceIds": [
                "eni-056ea97820e1f8fe6"
            ],
            "DNSName": "fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com",
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/<KMS ID>",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-057509d8c92f1cb4d",
            "Tags": [
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "OpenzfsStack"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "FSxforOpenZFS"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/OpenzfsStack/f7caf3e0-0330-11ed-8127-0ad888b702cf"
                },
                {
                    "Key": "Name",
                    "Value": "fsx-for-openzfs"
                }
            ],
            "OpenZFSConfiguration": {
                "AutomaticBackupRetentionDays": 31,
                "CopyTagsToBackups": true,
                "CopyTagsToVolumes": true,
                "DailyAutomaticBackupStartTime": "16:00",
                "DeploymentType": "SINGLE_AZ_1",
                "ThroughputCapacity": 64,
                "WeeklyMaintenanceStartTime": "6:17:00",
                "DiskIopsConfiguration": {
                    "Mode": "AUTOMATIC",
                    "Iops": 192
                },
                "RootVolumeId": "fsvol-0d8888da34de4774b"
            }
        },
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-07-14T07:54:55.223000+00:00",
            "FileSystemId": "fs-0e04081bf17d57c30",
            "FileSystemType": "OPENZFS",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 64,
            "StorageType": "SSD",
            "VpcId": "vpc-0148de084c4b0f41a",
            "SubnetIds": [
                "subnet-00da1a809e6109b5a"
            ],
            "NetworkInterfaceIds": [
                "eni-02177e3ea01760539"
            ],
            "DNSName": "fs-0e04081bf17d57c30.fsx.us-east-1.amazonaws.com",
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/<KMS ID>",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-0e04081bf17d57c30",
            "Tags": [],
            "OpenZFSConfiguration": {
                "AutomaticBackupRetentionDays": 31,
                "CopyTagsToBackups": false,
                "CopyTagsToVolumes": false,
                "DailyAutomaticBackupStartTime": "16:00",
                "DeploymentType": "SINGLE_AZ_1",
                "ThroughputCapacity": 64,
                "WeeklyMaintenanceStartTime": "6:17:00",
                "DiskIopsConfiguration": {
                    "Mode": "AUTOMATIC",
                    "Iops": 192
                },
                "RootVolumeId": "fsvol-0ce12cb664190a046"
            }
        }
    ]
}

タグやCopyTagsToBackupsCopyTagsToVolumesの値が異なるようです。本番運用する際は、リストア後こちらの値を修正してあげる必要がありますね。

それではリストアしたファイルシステムをマウントして、テストファイルがあるか確認します。

# リストアしたFSx for OpenZFSファイルシステムをマウントするマウントポイントを作成
$ sudo mkdir /fsx_restore

# リストアしたFSx for OpenZFSファイルシステムをマウント
$ sudo mount -t nfs -o nfsvers=4.1 fs-0e04081bf17d57c30.fsx.us-east-1.amazonaws.com:/fsx/ /fsx_restore

# マウントされたことを確認
$ df -hT
Filesystem                                            Type      Size  Used Avail Use% Mounted on
devtmpfs                                              devtmpfs  471M     0  471M   0% /dev
tmpfs                                                 tmpfs     479M     0  479M   0% /dev/shm
tmpfs                                                 tmpfs     479M  352K  478M   1% /run
tmpfs                                                 tmpfs     479M     0  479M   0% /sys/fs/cgroup
/dev/nvme0n1p1                                        xfs       8.0G  1.5G  6.5G  19% /
fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com:/fsx nfs4       64G  256K   64G   1% /fsx
fs-0e04081bf17d57c30.fsx.us-east-1.amazonaws.com:/fsx nfs4       64G  256K   64G   1% /fsx_restore

$ mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
fs-057509d8c92f1cb4d.fsx.us-east-1.amazonaws.com:/fsx on /fsx type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.0.13,local_lock=none,addr=10.10.0.46)
fs-0e04081bf17d57c30.fsx.us-east-1.amazonaws.com:/fsx on /fsx_restore type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.0.13,local_lock=none,addr=10.10.0.43)

# テストファイルがあることを確認
$ ls -l /fsx/aws-backup-test/aws-backup-test.txt
-rw-r--r-- 1 ssm-user ssm-user 35 Jul 14 05:08 /fsx/aws-backup-test/aws-backup-test.txt

$ cat /fsx/aws-backup-test/aws-backup-test.txt
This is a test file of AWS Backup.

テストファイルの確認もできました。

バックアップのリージョン間コピーがありがたい

AWS BackupがAmazon FSx for OpenZFSをサポートしたアップデートを紹介しました。

個人的にはバックアップのリージョン間コピーがありがたいなと思いました。DRの対応もAWS Backupを活用すれば楽になるのではと考えます。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!