ブログ

AWS の Amazon FSx で shadow copy オプションを試す

AWS の Amazon FSx for Windows ファイルサーバー では、AWS 上の設定もあるのですが、PowerShell を利用し設定する箇所もあります。

そのうちの一つに shadow copy(シャドウコピー)があります。

AWS の Amazon FSx shadow copy とは  

通常、Amazon FSx はバックアップを取得可能です。その場合、ある時点のファイルを復元したい時には FSx を丸ごと復元する形になります。でも、間違って更新してしまったとかの場合は、単一ファイルのみを復元したいケースもあるかと思います。

Amazon FSx shadow copy を有効化しておくと、ファイル/フォルダ単位でのリストアが可能になります。いちいち FSx のリストアをしなくて良いので楽ですね。
ファイルシステム毎に最大500ファイルまで shadow copy に記憶でき、上限を超えると、古いものから順に消えていくそうです。

一応デメリットもあります。

FSx の一部の容量を shadow copy 用に利用するため、FSx に割り当てたディスク容量よりも、実際に保存するデータ容量は少なくなってしまいます。変更は可能で、デフォルトでは 10% を shadow copy 用に割り当てています。

Amazon FSx shadow copy 有効化方法  

よく利用しそうなコマンドを下記にまとめます。
Amazon FSx に接続できる Windows 端末から下記を PowerShell で実行します。

設定コマンド例  

(1) Windows Remote PowerShell Endpoint を設定する

#poweshell endpointを設定する
$FSxWindowsRemotePowerShellEndpoint="amznfsxxxxxxxxxx.fsx-test.local"

(2) shadow copy を有効化

#shadow copyを有効化
Invoke-Command -ComputerName $FSxWindowsRemotePowerShellEndpoint -ConfigurationName FSxRemoteAdmin -ScriptBlock { Set-FsxShadowStorage -Default }    

(3) shadow copy のスケジュール設定(スケジュールを明確に指定する場合)

#shadow copyのスケジュールを作成
$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     
invoke-command -ComputerName $FSxWindowsRemotePowerShellEndpoint -ConfigurationName FSxRemoteAdmin -scriptblock {
set-fsxshadowcopyschedule -scheduledtasktriggers $Using:trigger1,$Using:trigger2 -Confirm:$false }

(4) スケジュールを確認

# スケジュール確認
Invoke-Command -ComputerName $FSxWindowsRemotePowerShellEndpoint -ConfigurationName FSxRemoteAdmin -ScriptBlock { Get-FsxShadowCopySchedule }    

その他、より詳細の設定方法は AWS のドキュメントにも記載があります。
下記がわかりやすのではと思います。

また、他にも便利なオプション設定があり、同様に PowerShell で設定が可能ですので、
興味のある方は下記も参考になるかと思います。

Amazon FSx の AWS CloudFormation 設定例  

下記をまとめて作成する CloudFormation を作成してみました。

自己所有の AD を参照する Fsx 用の記述のため、Microsoft AD をご利用の場合は、その部分を書き換えが必要です。

あと、各種パラメータは読み替えてください。

  • fsx
  • security-group
  • SNS
  • cloudwatch
AWSTemplateFormatVersion: "2010-09-09"
Description: A templete for fsx for windows
Parameters:
  EnvPrefix:
    Type: String
    Default: "test"
  # KmsKeyId:
  #   Type: String
  StorageCapacity:
    Type: Number
    Default : 32
  VPCId:
    Type: AWS::EC2::VPC::Id
    Default: vpc-xxxxxxxxx
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
    Default: subnet-xxxxxxxxxx
  # ActiveDirectoryId:
  #   Type: String
  #   Default: d-96671b8248
  DailyAutomaticBackupStartTime:
    Type: String
    Default: "16:00"
  DeploymentType:
    Type: String
    Default: SINGLE_AZ_2
    # Default: MULTI_AZ_1
  ThroughputCapacity:
    Type: Number
    Default : 8
  WeeklyMaintenanceStartTime:
    Type: String
    Default: "6:17:00"
    
  OnpreDNS:
    Type: CommaDelimitedList
    Default: xxx.xxx.xxx.xxx
  OnpreDomainName:
    Type: String
    Default: fsx-test.local
  FileSystemAdministratorsGroup:
    Type: String
    Default: FSXAdmins
  UserName:
    Type: String
    Default: fsxservice
  Password: 
    Type: String
    Default: xxxxxxxxxxxxxxxxxxxxxxxxxx
    NoEcho: True
  OrganizationalUnitDistinguishedName:
    Type: String
    Default: "OU=FileSystems,DC=fsx-test,DC=local"
  FSXAllowedRange:
    Type: String
    Default: 172.30.0.0/16

  ThresholdFreeStorageCapacity:
    Type: Number
    Default: 3221225472

  endpointEmail:
    Type: String
    Default: 'xxxxxxxxxxxxxx@xxxxxx.com'   


Resources :
  fsx:
    Type: AWS::FSx::FileSystem
    Properties: 
      # KmsKeyId: kms
      FileSystemType: WINDOWS
      SecurityGroupIds: 
        - !Ref sg
      StorageCapacity: !Ref StorageCapacity
      StorageType: SSD
      # StorageType: HDD
      SubnetIds: !Ref SubnetIds
      WindowsConfiguration: 
        # ActiveDirectoryId: !Ref ActiveDirectoryId
        AutomaticBackupRetentionDays: 7
        CopyTagsToBackups: true
        DailyAutomaticBackupStartTime: !Ref DailyAutomaticBackupStartTime
        DeploymentType: !Ref DeploymentType
        # PreferredSubnetId: String
        SelfManagedActiveDirectoryConfiguration: 
          DnsIps: !Ref OnpreDNS
          DomainName: !Ref OnpreDomainName
          FileSystemAdministratorsGroup: !Ref FileSystemAdministratorsGroup
          OrganizationalUnitDistinguishedName: !Ref OrganizationalUnitDistinguishedName
          Password: !Ref Password
          UserName: !Ref UserName
        ThroughputCapacity: !Ref ThroughputCapacity
        WeeklyMaintenanceStartTime: !Ref WeeklyMaintenanceStartTime

  sg:
    Type: AWS::EC2::SecurityGroup
    Properties: 
      GroupDescription: !Sub ${EnvPrefix}-sg
      GroupName: !Sub ${EnvPrefix}-sg
      VpcId: !Ref VPCId
      SecurityGroupIngress:
        -
          CidrIp: !Ref FSXAllowedRange
          FromPort: 445
          ToPort: 445
          IpProtocol: tcp
        -
          CidrIp: !Ref FSXAllowedRange
          FromPort: 5985
          ToPort: 5985
          IpProtocol: tcp
      Tags:
        -
          Key: Name
          Value: FSX

  CloudWatchAlarmFreeStorageCapacity:
    Type: AWS::CloudWatch::Alarm
    Properties:
      ActionsEnabled: 'true'
      ComparisonOperator: LessThanOrEqualToThreshold 
      EvaluationPeriods: '1'
      MetricName: FreeStorageCapacity
      Namespace: AWS/FSx
      AlarmName: !Sub ${EnvPrefix}FreeStorageCapacity
      Period: '300'
      Statistic: Average
      Threshold: !Ref ThresholdFreeStorageCapacity
      AlarmActions:
        - !Ref SNSNotif
      Dimensions:
        -
          Name: FileSystemId
          Value: !Ref fsx

  SNSNotif:
      Type: AWS::SNS::Topic
      Properties:
        DisplayName: !Sub ${EnvPrefix}Topic
        Subscription:
          -
            Endpoint: !Ref endpointEmail
            Protocol: email
        TopicName: !Sub ${EnvPrefix}TopicTicket  

AWS の Amazon FSx shadow copy(まとめ)

Amazon FSx for Windows ファイルサーバー では shadow copy を有効化しておくことがベストプラクティスとして AWS の公式ドキュメントにも記載されています。

運用面で費用対効果が高そうですので上記参考になれば嬉しいです。

元記事発行日: 2022年06月24日、最終更新日: 2023年03月28日