Amazon Web Services 한국 블로그

Amazon DynamoDB 지속적 백업 및 특정 시점으로 복구(PITR) 기능 출시

Amazon DynamoDB 팀이 저장 시 암호화 기능에 이어 또 하나의 유용한 기능을 선보입니다. AWS re:Invent 2017에서 글로벌 테이블과 DynamoDB 테이블의 온디맨드 백업 및 복구 기능을 선보였고, 오늘은 특정 시점으로 복구(PITR)를 지원하는 지속적 백업 기능을 발표합니다.

지속적 백업은 AWS Management Console에서 클릭 한 번으로, 간단한 API 호출을 통해, 또는 AWS 명령줄 인터페이스를 사용하여 활성화할 수 있습니다. DynamoDB는 초 단위로 데이터를 백업하고 PITR을 활성화한 시점부터 이전 35일까지 어느 시점으로든 초 단위로 복원할 수 있습니다. 이 기능은 실수로 데이터를 쓰거나 삭제할 경우에 대비해 만들어졌습니다. 개발자가 준비 환경이 아니라 운영 환경에서 스크립트를 실행하거나 누군가 실수로 DeleteItem 호출을 실행할 경우 PITR로 복구할 수 있습니다. 또한 통상적으로 예측이 불가능한 시나리오에서도 이 기능을 이용할 수 있습니다. 온디맨드 백업을 보관용으로 필요한 만큼 얼마든지 오래 보존할 수 있지만, PITR은 실수로 데이터가 손실되지 않도록 추가적으로 보장하는 역할을 합니다. 이 기능이 어떻게 작동하는지 살펴보겠습니다.

지속적 백업

이 기능을 활성화하려면 콘솔에서 테이블로 이동한 후 Backups 탭을 선택합니다. 이 탭에서 Enable을 클릭하기만 하면 기능이 활성화됩니다. UpdateContinuousBackups API 호출을 통해서도 지속적 백업을 활성화할 수 있습니다.

지속적 백업을 활성화하고 나면 Earliest restore dateLatest restore date가 표시됩니다.

삭제할 이전 사용자 프로필이 많이 있는 시나리오를 가정해 보겠습니다.

사용자의 last_update 날짜를 기준으로 활성 사용자에게만 서비스 업데이트를 전송하려고 합니다. 그래서 일정 기간 동안 내 서비스를 이용하지 않은 사용자를 모두 삭제하는 간단한 Python 스크립트를 작성하기로 했습니다.

import boto3
table = boto3.resource("dynamodb").Table("VerySuperImportantTable")
items = table.scan(
    FilterExpression="last_update >= :date",
    ExpressionAttributeValues={":date": "2014-01-01T00:00:00"},
    ProjectionExpression="ImportantId"
)['Items']
print("Deleting {} Items! Dangerous.".format(len(items)))
with table.batch_writer() as batch:
    for item in items:
        batch.delete_item(Key=item)

자, 이 코드를 통해 2013년 이래 한 번도 로그인하지 않고 내 서비스를 사용하지 않는 성가신 사용자가 모두 삭제됩니다. CTRL+C CTRL+C CTRL+C CTRL+C(현재 실행 중인 명령 중지)를 반복해서 누릅니다.

엇! 어디서 잘못되었는지 아시나요? 가장 중요한 사용자를 삭제해 버렸습니다! 아이고! ‘<‘ 기호를 입력해야 하는데 ‘>’ 기호를 입력하는 실수를 저질렀네요. 상사가 보기 전에 얼른 테이블을 복구해야 할 듯 합니다. (Boto 3의 유용한 DynamoDB 조건: Attr("last_update").lt("2014-01-01T00:00:00")을 사용했다면 오타를 방지할 수 있었을 겁니다.)

복원

다행히 테이블은 쉽게 복원할 수 있습니다. 콘솔에서 테이블의 Backups 탭으로 이동한 후 Restore to point-in-time을 클릭합니다.

복원하려는 시간(삭제를 시작하기 몇 초 전)과 테이블의 이름을 지정합니다.

이것과 같이 비교적 작고 고르게 분산된 테이블의 경우 상당히 빠르게 복원됩니다.

테이블을 복원하는 데 걸리는 시간은 다양한 요인에 따라 달라지며, 복원 시간이 테이블 크기에 반드시 비례하는 것은 아닙니다. 데이터 세트가 모든 기본 키에 고르게 분산되어 있는 경우 복원 속도를 높이는 병렬화 이점을 활용할 수 있습니다.

자세히 알아보기 및 사용해 보기
설명서에서 이 새로운 기능에 대해 자세히 알아볼 수 있습니다.

지속적 백업의 요금은 리전마다 다르며 테이블과 모든 인덱스의 현재 크기를 기준으로 합니다.

주의 사항:

  • PITR은 암호화된 테이블에도 적용됩니다.
  • PITR을 비활성화한 후 나중에 다시 활성화하면 복구할 수 있는 시작 시간이 재설정됩니다.
  • 온디맨드 백업과 마찬가지로 이 기능을 활성화하더라도 성능이나 가용성에는 영향을 미치지 않습니다.
  • Stream 설정, Time To Live 설정, PITR 설정, 태그, Amazon CloudWatch 경보 및 Auto Scaling 정책은 복구된 테이블로 복사되지 않습니다.
  • 모든 PITR API 호출은 AWS CloudTrail에 기록되기 때문에 Jeff 씨는 내가 테이블을 복구한 사실을 애초에 알고 있었습니다.

Randall;