この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
AWS Backup を利用したIAMのバックアップや Amazon EBS(Amazon Data Lifecycle Manager)によるスナップショットの取得などが不慣れのため、まずは AWS Backupを構築してみて リソースのサワリを体験したいと思います。
構成図
ハンズオン
構築のながれ
1.AWS Backup作成
1.AWS Backup作成
1.1.CFnによる構築リソース一覧
構築リソース名 | ざっくり概要 |
---|---|
BackupValut | バックアップを保存および整理するためのコンテナ |
BackupPlan | AWS リソースをいつどのようにバックアップするかを定義 |
BackSelection | 対象となる選択の範囲 |
IAM Role | アクセス許可 |
参考: AWS Backup とは?
1.2.テンプレート留意点
1.2.1.BackupPlan部分
・Cron式でバックアップを取得する時間はUTCとなるため、日本時間にする場合は修正ください
・非同期での実行のため、Cronで設定した時間調度に起動はしません
・バックアップのライフサイクルとして、作成後2日で削除されるように設定
1.2.2.BackupSelection部分
・タグ名(TagKey
,TagValue
)が付帯している、リソースのバックアップを取得する
1.3.CFnテンプレート
AWSTemplateFormatVersion: '2010-09-09'
Description: Create AWS Backup
# ------------------------------------------------------------#
# Metadata
# ------------------------------------------------------------#
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "AWS Backup Configuration"
Parameters:
- MyBackupName
- Cron
- TagKey
- TagValue
# ------------------------------------------------------------#
# InputParameters
# ------------------------------------------------------------#
Parameters:
MyBackupName:
Description: Backup plan name
Type: String
Default: EC2-Backupplan
Cron:
Description: type the cron.
Type: String
Default: cron(* 0 * * ? *)
TagKey:
Description: TagKey for backup
Type: String
Default: Backup
TagValue:
Description: TagValue for backup
Type: String
Default: True
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
# ------------------------------------------------------------#
# BackupVault
# ------------------------------------------------------------#
BackupVault:
Type: "AWS::Backup::BackupVault"
Properties:
BackupVaultName: !Sub ${MyBackupName}-vault
# ------------------------------------------------------------#
# BackupPlane
# ------------------------------------------------------------#
BackupPlan:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: !Ref MyBackupName
AdvancedBackupSettings:
-
ResourceType: EC2
BackupOptions:
WindowsVSS: enabled
BackupPlanRule:
- RuleName: !Sub ${MyBackupName}-rule
TargetBackupVault: !Ref BackupVault
ScheduleExpression: !Ref Cron
CompletionWindowMinutes: 720
StartWindowMinutes: 60
Lifecycle:
DeleteAfterDays: 2
# ------------------------------------------------------------#
# BackupSelection
# ------------------------------------------------------------#
BackupSelection:
Type: AWS::Backup::BackupSelection
Properties:
BackupPlanId: !Ref BackupPlan
BackupSelection:
SelectionName: !Ref MyBackupName
IamRoleArn: !GetAtt BackupIAMrole.Arn
ListOfTags:
- ConditionType: "STRINGEQUALS"
ConditionKey: !Ref TagKey
ConditionValue: !Ref TagValue
# ------------------------------------------------------------#
# IAM Role
# ------------------------------------------------------------#
BackupIAMrole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${MyBackupName}-Role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service: backup.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
- arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores
Path: "/service-role/"
挙動の確認
1.バックアップ取得用EC2を作成(VPC+サブネット+EC2)
AWSTemplateFormatVersion: "2010-09-09"
Description:
Create NetWork EC2 SSM
# ------------------------------------------------------------#
# Metadata
# ------------------------------------------------------------#
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "VPC Configuration"
Parameters:
- Name
- VPCCIDR
- PrivateSubnetCIDR
- Label:
default: "EC2 Configuration"
Parameters:
- AMIId
- InstanceType
- KeyPair
- Label:
default: "Tags"
Parameters:
- UserName
# ------------------------------------------------------------#
# InputParameters
# ------------------------------------------------------------#
Parameters:
Name:
Type: String
Default: 【リソースプレフィックス】
VPCCIDR:
Type: String
Default: 192.168.0.0/16
PrivateSubnetCIDR:
Type: String
Default: 192.168.0.0/24
AMIId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-Base
InstanceType:
Type: String
Default: t2.micro
KeyPair:
Type: String
Default: 【キーペア】
UserName:
Type: String
Default: 【ユーザタグ】
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
# ------------------------------------------------------------#
# VPC
# ------------------------------------------------------------#
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VPCCIDR
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub ${Name}-VPC
- Key: User
Value: !Ref UserName
# ------------------------------------------------------------#
# Subnet
# ------------------------------------------------------------#
PrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: !Select [0, !GetAZs ""]
CidrBlock: !Ref PrivateSubnetCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${Name}-PrivateSubnet
- Key: User
Value: !Ref UserName
# ------------------------------------------------------------#
# RouteTable
# ------------------------------------------------------------#
PrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${Name}-PrivateRouteTable
- Key: User
Value: !Ref UserName
PrivateSubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet
RouteTableId: !Ref PrivateRouteTable
# ------------------------------------------------------------#
# EC2
# ------------------------------------------------------------#
EC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
SubnetId: !Ref PrivateSubnet
ImageId: !Ref AMIId
SecurityGroupIds:
- !Ref EC2SecurityGroup
IamInstanceProfile: !Ref EC2InstanceProfile
KeyName: !Ref KeyPair
Tags:
- Key: Name
Value: !Sub ${Name}-EC2Instance
- Key: User
Value: !Ref UserName
- Key: Backup
Value: true
# ------------------------------------------------------------#
# EC2 Role
# ------------------------------------------------------------#
EC2IAMRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${Name}-SSM-role
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
EC2InstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: /
Roles:
- Ref: EC2IAMRole
InstanceProfileName: !Sub ${Name}-EC2InstanceProfile
# ------------------------------------------------------------#
# EC2 SG
# ------------------------------------------------------------#
EC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: EC2SecurityGroup
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub ${Name}-EC2SecurityGroup
- Key: User
Value: !Ref UserName
【EC2のタグを確認】
タグを確認するとBackup
,true
が含まれていることを確認できる
2.AWS Backのテンプレート更新
UTCを考えてCron
を修正、画面だと日本時刻21:15
から1時間以内にバックアップの取得を行うと指定しなおして更新をかける
3.AWS Backup に EC2のAMIが取得されていることを確認
AWS Backup
> 左ペイン バックアップボールト
> 構築したバックアップボールドの名前をクリックする
【復旧ポイント(バックアップ)取得前】
【復旧ポイント(バックアップ)取得後】
無事に取得できると、赤枠部分に取得した一覧が表示されます
※AWS Backup
リソースを削除する際は、取得した復旧ポイント(バックアップ)
を削除しないと、削除することができないので注意ください。
さいごに
運用があってこそ取得するべきものが決まってくると思うので、本当お触り程度の構築となってしまいましたが、今まで構築したものを組み合わせ個人的に運用をしていけば、今より深く利用方法を学んでいけるのかなと思います。