Amazon S3에 원격 백업하기

안녕하세요, 누리클라우드입니다. 이번 글에서는 파일 혹은 데이터의 원격 백업 구성을 Amazon S3를 스토리지로 하여 구성하는 방법에 대해서 알아보겠습니다.

사실 EC2 인스턴스의 경우는 스냅샷이 S3에 저장되기 때문에 스냅샷으로 백업을 하는 것으로도 원격지 백업을 했다라고 할 수 있는데요, 물리서버의 경우는 백업솔루션 혹은 백업서비스를 통해 원격백업을 해야 했습니다. 이 때 원격백업 스토리지를 잘 관리해야 하고 용량, 성능 등 여러가지 운영상 이슈가 발생할 수 있습니다. 이 원격백업의 스토리지로 S3를 이용한다면 S3의 장점을 충분히 활용할 수 있어서 보다 안정적인 원격백업을 관리할 수 있습니다.

S3를 이용한 원격백업을 수행하는 방법은 크게 S3 자체 기능을 이용하는 방법과 S3는 저장소로만 이용하고 백업 기능은 자체 솔루션을 가지고 하는 방법으로 크게 두가지로 나누어 볼 수 있습니다.

S3 기능을 이용한 원격백업 방법

AWS CLI는 AWS 서비스를 command line으로 관리하는 도구입니다. 명령줄에서 서비스를 제어하고 스크립트를 통해 관리를 자동화할 수 있습니다. AWL CLI는 각 서비스의 고유 기능을 CLI 옵션을 통해 사용할 수 있는데 그 중 S3의 sync 커맨드를 활용하면 기본적인 백업을 수행하는 작업을 구현할 수 있습니다.

백업솔루션을 이용한 원격백업 방법

Acronis는 백업 솔루션으로 강력한 백업/복구 기능을 제공합니다. Acronis의 백업기능과 저장장치로 S3를 조합하여 견고한 원격백업을 구성할 수 있습니다.

참고링크: http://dl.acronis.com/u/storage2/html/AcronisStorage_2_users_guide_en-US/accessing-s3/index.html

여기서는 S3 기능을 이용한 원격백업 방법에 대해 소개하고 S3의 보관 옵션 중 Life Cycle 동작에 대해 알아보겠습니다.

AWS CLI 설정

먼저 AWS CLI를 백업 대상 서버에 설치합니다. 리눅스의 경우 설치 전에 Python 2.6.5 이상을 설치해야 합니다. 설치 방법은 간단히 ‘pip install awscli’를 실행하면 됩니다.

AWS CLI로 Amazon 리소스에 접근하기 위해서는 인증수단으로 Access Key와 Secret Access Key를 사용합니다. 인증수단을 AWS 계정에서 생성하고 사용하는 자세한 방법은 아래 링크를 참고하세요.

참고링크: https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_access-keys.html

AWS CLI 접속 인증 설정

# aws configure

AWS Access Key ID:

AWS Secret Access Key:

Default region name:

Default output format:

Default region name은 리전 목록 이곳에서 확인하여 등록합니다.

Default output format형식은 json, text, table을 사용할 수 있습니다.

확인

#aws configure list

스크립트 구성 및 동작테스트

Crontab 예약 명령어를 통하여 local에 있는 파일을 자동으로 S3버킷으로 백업하는 과정을 테스트합니다.

1) 백업 소스 파일 생성

테스트를 위해 /usr/local/src/Test 경로 안에 아래와 같은 파일들을 생성해 둡니다.

2) 스크립트 구성

~/.aws/config

[default]

region = ap-northeast-2

aws_access_key_id = AKIAJXXXXXXXXXXXXXXXXX

aws_secret_access_key = ENuMhLVXXXXXXXXMkXXXXXXXXXXXXXXXXXXX

/root/bin/sync-s3.sh

#!/bin/sh

export AWS_CONFIG_FILE=/root/.aws/config

/usr/sbin/aws s3 sync /usr/local/src/Test s3://sangrok.site/backup_test/ –delete –debug

Test안에 있는 파일을 sync명령어로 s3://sangrok.site/backup_test/ 경로에 동기화합니다.

3) 스케줄 설정

# View /etc/crontab

0 2 * * * root /root/bin/sync-s3.sh >> /tmp/sync-s3.log

실행 후 로그는 /tmp/sync-s3.log 파일로 따로 수집합니다.

매일 02:00 시에 스크립트를 실행하도록 설정합니다.

4) S3버킷 정상 백업 확인

S3 버킷에서 로컬에서 백업이 정상적으로 되었는지 확인합니다.

AWS S3 sync옵션

Sync 세부 옵션: https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

–delete: 목적지에는 존재하는 파일이지만 출발지에는 없는 파일이라면 싱크 중 삭제

–delete옵션이 없이 명령어 사용 시 소스파일에서 삭제된 파일이 목적 대상이 되는 경로에 삭제가 안됩니다. 완벽한 동기화를 할 때에는 –delete옵션을 주고 사용하여야 됩니다.

–debug: API 호출 시 어떤 API를 호출하는지 확인할 수 있습니다.

S3 백업파일 장기 보관

lifecycle 설정

1) 이름 및 범위

S3 버킷 -> 관리 -> 수명 주기 규칙 추가

규칙 이름을 정하고 범위 및 필터를 설정합니다.

2) 이전

Amazon S3 스토리지 클래스: https://aws.amazon.com/ko/s3/storage-classes/?nc=bc&pg=sc

현재 버전: 현재 객체 버전에 적용되는 전환

이전 버전: 모든 이전 객체에 적용되는 전환

현재는 versioning 기능을 활성화하지 않았기 때문에 현재 버전만 체크합니다.

객체 생성 후 3일후 이전 설정합니다.

3) 만료

Glacier로 이전된 객체는 5일 후에 자동으로 삭제됩니다.

4) 검토 및 저장

맺음말

지금까지 S3를 활용한 원격백업에 대해서 알아보았습니다. S3는 다양한 기능들을 갖춘 활용도가 매우 높은 AWS 최고의 걸작품인만큼, 대부분의 서비스 아키텍처에 필수 구성요소가 되고 있습니다. 여러분도 자기만의 활용분야를 발견해가시길 바랍니다~