기술스택을 쌓아보자/AWS
[RDS] aws cli로 스냅샷으로 똑같은 DB를 다른 VPC에 만들기 (production db와 staging db 값 맞추기)
소리331
2023. 9. 1. 22:07
반응형
DB 스냅샷 복원의 특징
- 사실은 스냅샷을 바탕으로 복구하는 것이 아니라, 스냅샷을 바탕으로한 DB를 새로 똑같이 만드는 것이다.
(그래서 실제로 restore 명령어를 쓰다보면, 이미 있는 db는 이름을 사용할 수 없게 나옴!)
요구사항
- 실시간으로 prod와 stg의 값이 동일할 필요는 없음
- DMS 등의 서비스를 사용할 필요가 없음.
최종 cmd
# 1 기존 db 삭제
/usr/bin/aws rds delete-db-instance --db-instance-identifier {{staging db}} --skip-final-snapshot
# 2 db 삭제 상태 확인 => 그냥 gateway로 15분 대기
aws rds describe-db-instances --db-instance-identifier {{staging db}} --query "DBInstances[0].DBInstanceStatus" --output text
deleting
# 2-1 삭제가 완료된 후에는 not found 에러가 뜬다.
aws rds describe-db-instances --db-instance-identifier {{staging db}} --query "DBInstances[0].DBInstanceStatus" --output text
An error occurred (DBInstanceNotFound) when calling the DescribeDBInstances operation: DBInstance {{staging db}} not found.
# 2 db 재생성
/usr/bin/aws rds restore-db-instance-from-db-snapshot \
--db-instance-class db.t3.micro \ # t 계열 머신 할당(개발계이므로)
--db-subnet-group-name {{STAGING VPC의 DB 서브넷}} \
--vpc-security-group-ids {{대상 보안그룹}} \
--option-group-name {{새롭게 만들어서 할당한 옵션그룹}} \
--db-instance-identifier {{내가 생성할 DB}} \
--db-snapshot-identifier $( \ # PROD DB의 가장 마지막 스냅샷만 가져옴.
aws rds describe-db-snapshots \
--query "DBSnapshots[?SnapshotType=='automated' && \
DBInstanceIdentifier=='{{복사원천 PROD DB}}'] \
| sort_by(@, &SnapshotCreateTime) \
| [-1].DBSnapshotId
디버깅기
An error occurred (DBInstanceAlreadyExists) when calling the RestoreDBInstanceFromDBSnapshot operation: DB instance already exists
=> 무작정 DB 를 복원하는 것이 아니라 사전에 지워주는 작업이 필요하다. 지우고 재생성 시 이름만 같으면 엔드포인트는 유지된다!
An error occurred (InvalidParameterCombination) when calling the RestoreDBInstanceFromDBSnapshot operation: The option group {{옵션그룹명}} is associated with a different VPC than the request.
=> PROD VPC에 있던 옵션 그룹을 디폴트로 사용한다. 이럴때에는 별도로 옵션그룹을 생성한뒤 cmd에서 할당해준다.
반응형