0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows Server EC2のファイルリストアをするCloudFormationテンプレート

Posted at

はじめに

以前、Windows ServerのEC2のスナップショットからファイルをリストアする方法を記事にしました。

スナップショットからボリュームを作って、新しくEC2を立てて、そこにアタッチさせて取り出す、ということをしました。

今回はそれをCloudFormationで出来るようにしました。

概要

CloudFormation実行時に、リストアしたいファイルを含むスナップショットIDを指定します。
するとリストアしたボリュームを、DドライブにアタッチしたEC2インスタンスが起動します。
EC2インスタンスがあるVPCやサブネット、RDPで接続可能としたセキュリティグループなどは作成済みの想定です。

参考

CloudFormationテンプレート

CloudFormationテンプレートは以下になります。
SnapshotId以外のパラメータに指定するリソースは、リストア用に用意しておき、Defaultで設定しておいています。

create_ec2ForFileRestore.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation template to create a Windows Server 2022 EC2 instance for File Restore

Parameters:
  # Restore Configuration
  SnapshotId:
    Type: String
  # EC2 Environment Configuration
  VPCID:
    Type: AWS::EC2::VPC::Id
    Default: "vpc-xxxxxxxxxx"
    Description: The VPC ID where the instance will be created
  SubnetId:
    Type: AWS::EC2::Subnet::Id
    Default: "subnet-xxxxxxxxxx"
    Description: The Subnet ID where the instance will be created
  SecurityGroups:
    Type: List<AWS::EC2::SecurityGroup::Id>
    Default: "sg-xxxxxxxxxx"
    Description: Security Groups for the instance
  AvailabilityZone:
    Type: String
    Default: "ap-northeast-1a"
    Description: The Availability Zone for the instance
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Default: "xxxxxxxxxx"
    Description: The name of the existing EC2 KeyPair to enable RDP access
  ImageId:
    Type: String
    Default: "ami-xxxxxxxxxx"
    Description: Windows Server 2022 EC2 image for File Restore

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: "Restore Configuration"
        Parameters:
          - SnapshotId
      - Label:
          default: "EC2 Environment Configuration"
        Parameters:
          - VPCID
          - SubnetId
          - SecurityGroups
          - AvailabilityZone
          - KeyName
          - ImageId

Resources:
  RestoreVolume:
    Type: AWS::EC2::Volume
    Properties: 
      AvailabilityZone: !Ref AvailabilityZone
      SnapshotId: !Ref SnapshotId
    DeletionPolicy: Delete

  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref ImageId
      InstanceType: t2.large
      KeyName: !Ref KeyName
      AvailabilityZone: !Ref AvailabilityZone
      NetworkInterfaces: 
        - AssociatePublicIpAddress: "true"
          DeleteOnTermination: true
          DeviceIndex: "0"
          SubnetId: !Ref SubnetId
          GroupSet: !Ref SecurityGroups
      Volumes:
        - Device: "xvdf"
          VolumeId: !GetAtt RestoreVolume.VolumeId
      UserData:
        Fn::Base64: !Sub |
          <powershell>
          echo 'select disk 1' 'attributes disk clear readonly' 'online disk noerr' 'select volume 1' 'assign letter=D' | diskpart
          </powershell>
    DeletionPolicy: Delete
    DependsOn: RestoreVolume

EC2起動時にユーザーデータで実行しているdiskpartのコマンドは以下になります。

select disk 1 
attributes disk clear readonly 
online disk noerr
select volume 1
assign letter=D

実行~削除

CloudFormationテンプレートを指定し、パラメータにSnapshotIdを指定します。

image.png

作成後RDPで接続し、リストアした内容がDドライブにあることを確認できました。
image.png

戻したいファイルも確認できました。
image.png

CloudFormationスタックを削除すれば、EC2インスタンスもボリュームも削除されます。
image.png

おわりに

前回コンソールで行ったファイルリストアを、CloudFormationで出来るようにしてみました。
Azureでは機能として可能でしたので、AWSでも簡単に出来るようにしてみました。
この記事がどなたかのお役に立てれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?