2018년 3월 22일 목요일
lambda를 이용하여 모든 EC2의 volume을 주기적으로 snapshot으로 백업하기
각 계정에 EC2의 EBS를 백업하려 할때는 두가지방법이 있다. AMI를 이용하거나 EBS Volume을 snapshot으로 주기적으로 생성하는 방법 오늘은 그중에서 EBS volume을 lambda를 이용하여 백업하는 방법을 정리한다.
절차는 아래와 같다.
1. lambda를 생성하기 위한 role을 생성
2. lambda 생성 소스 추가 및 삭제 정책일 등록
3. cloud watch event추가 및 event 설정
4. 테스트
5. 완료
lambda source
#===================
import boto3
import datetime
import os
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
print("\n\nAWS snapshot backups starting at %s" % datetime.datetime.now())
instances = ec2.instances.filter(
Filters=[{'Name': 'instance-state-name', 'Values': ['running']},{'Name': 'tag:BackupYN', 'Values': ['Y']}])
for instance in instances:
instance_name = filter(lambda tag: tag['Key'] == 'Name', instance.tags)[0]['Value']
print("instance_name [%s]" % instance_name)
for volume in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [instance.id]}]):
description = 'scheduled-%s.%s-%s' % (instance_name, volume.volume_id,
datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
response = volume.create_snapshot(Description=description, VolumeId=volume.volume_id)
if response:
print("Snapshot created with description [%s]" % description)
ec2.create_tags( Resources=[response.snapshot_id],
Tags=[
{'Key': 'Name', 'Value': description}
])
#snapshot = ec2.Snapshot(response.snapshot_id)
#snapshot.create_tags(Tags=[{'Key': 'Name','Value': description}])
for snapshot in volume.snapshots.all():
retention_days = int(os.environ['retention_days'])
if snapshot.description.startswith('scheduled-') and ( datetime.datetime.now().replace(tzinfo=None) - snapshot.start_time.replace(tzinfo=None) ) > datetime.timedelta(days=retention_days):
print("\t\tDeleting snapshot [%s - %s]" % ( snapshot.snapshot_id, snapshot.description ))
snapshot.delete()
print("\n\nAWS snapshot backups completed at %s" % datetime.datetime.now())
return True
#==========
2018년 3월 12일 월요일
EC2 장애시 백업한 root snapshot을 이용하여 EC2 복구 방법
EC2가 갑자기 장애가 발생했다.
복구방법은?
1. 주기적으로 백업받은 AMI를 이용하여 복구한다.
2. 주기적으로 백업받은 Snapshot을 이용하여 복구한다.
1번은 그냥 백업받은 AMI를 새로 lunch하면 된다.
2번의 경우에 snapshot을 EBS Volume으로 생성하고 EC2에 attache한다.
이때 Root Volume일 경우 Attach하고 EC2를 시작했을경우 다음과 같은 에러가 발생할것이다.
Root volume일 경우에는 그냥 EC2에 붙이면 동작을 안한다.
snapshot으로 생성한 Root Volume 을 attache할때에는 아래 그림2 처럼
Device 항목을 /dev/xvda로 설정 해야 EC2가 정상적으로 실행된다.(amazon linux기준)
참고>os가 Redhat일 경우에는 /dev/sda1으로 설정해야 함.
복구방법은?
1. 주기적으로 백업받은 AMI를 이용하여 복구한다.
2. 주기적으로 백업받은 Snapshot을 이용하여 복구한다.
1번은 그냥 백업받은 AMI를 새로 lunch하면 된다.
2번의 경우에 snapshot을 EBS Volume으로 생성하고 EC2에 attache한다.
이때 Root Volume일 경우 Attach하고 EC2를 시작했을경우 다음과 같은 에러가 발생할것이다.
<그림1>
Root volume일 경우에는 그냥 EC2에 붙이면 동작을 안한다.
snapshot으로 생성한 Root Volume 을 attache할때에는 아래 그림2 처럼
<그림2>
Device 항목을 /dev/xvda로 설정 해야 EC2가 정상적으로 실행된다.(amazon linux기준)
참고>os가 Redhat일 경우에는 /dev/sda1으로 설정해야 함.
피드 구독하기:
글 (Atom)
AWS Redis와 Tomcat Session Clustering
근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...

-
근 두달만에 글을 쓰는것 같다 블로그에 글을 올리는게 쉽지 않다는 생각을 해본다. 오늘은 Redis를 이용하여 Tomcat Session Clustering하는 방법을 알아보고자한다. 앞에서 작성했던 AWS DynamoDB를 이용하여 Sessi...
-
외부에서 AWS에 Virtual Private Network(VPC)에 있는 서버에 접속을 하려면 어떻게 해야 할까? AWS에서는 Public영역에 Bastion Server을 이용하여 점프 할 수 있도록 구성하는것을 권장한다. 아...
-
프로젝트를 진행하다보면 여러 AWS Account를 이용하여 서로 cross account 설정을 하여 동시에 사용한다. 여기서는 S3에 다른 계정에 S3 Bucket에 접근하는 방법을 알아보자. S3의 버킷 이름은 다른 어떤 리전에 있더라도 중...