본문 바로가기
카테고리 없음

서버 옮기기 대장정(2) - 새 계정에 RDB, S3 백업하기

by socialcomputer 2025. 10. 1.
반응형

저번에 만든 aws 새 계정에 RDB와 S3의 데이터를 옮길 것이다.

미리 aws 계정의 숫자로된 id를 클립보드에 복사해두면 편하다

 

RDB 백업 순서

스냅샷 생성(old계정) -> 복사(old) -> 공유(old->new) -> 복사(new) -> 복원(new)

근데 스냅샷을 만들고 복사하는데 암호화키가 사용돼서 이 점을 유의해야 한다

 

1. 전 계정 RDB의 스냅샷을 만들고 이를 새로만든 KMS(고객 관리형 키)로 암호화 해 복사한다

 

2. 이때 새로 만든 KMS는 새계정이 스냅샷을 복사할 수 있는 정책을 넣어줘야 한다

-> aws계정을 추가하는 항목에서 계정추가를 해주면 된다

 

3. 복사한 스냅샷을 새계정으로 공유한다

 

4. 새 계정에서 공유받은 스냅샷을 KMS에서 만든 고객관리형키로 복사한다

처음엔 새 고객관리형키로 복사, 복원을 했는데 이 인스턴스의 스냅샷을 찍으면 또다시 그 키가 필요하다

이 키가 계속 필요하니 지우면 안되는데 유료요금이 발생하므로, 복사를 aws/rds키(기본)로 하는것이 좋다. 

 

그러나 공유받은 스냅샷을 복사하지 않고 바로 복원하는건 불가능하다

복사를 한 뒤에만 복원이 가능하다. 복사하지 않고 복원하면 아래 경고가 뜬다

5. 복사한 스냅샷을 복원하기

 

6. 복원하면 rdb 인스턴스가 생성되고 데이터가 잘 있는지 접속해 확인해보면 된다. 

 

S3 파일 옮기기

 s3는 rdb와는 좀 다르다. 기존계정의 파일을 새계정에 복사해줘야 한다. 

 IAM과 aws cli를 활용해 sync로 데이터를 복사할 것이다. 순서는 이렇다.

새 계정에 IAM 생성(정책추가) -> 기존 계정의 S3버킷 정책 수정 -> 새 계정의 S3버킷 생성 -> aws cli sync 복사

 

1. 새 계정의 IAM을 생성해 정책을 추가하고 엑세스키를 만든다. 

엑세스키는 사용사례 중  Command Line Interface(CLI) 를 선택해 생성하면 된다. 

IAM 사용자 정책은 아래 정책을 생성해주면 된다. SourceBucketName 은 기존 계정/데이터가있는곳 이고, DestinationBucketName은 새 계정, 대상버킷이다. 

이 정책은 IAM사용자에 소스버킷을 읽고, 대상버킷에 쓰는 권한을 준다.  

그러면 소스버킷의 파일을 복사해 대상버킷에 저장할 수 있다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucketName",
                "arn:aws:s3:::SourceBucketName/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::DestinationBucketName",
                "arn:aws:s3:::DestinationBucketName/*"
            ]
        }
    ]
}

 

2. 기존 계정의 S3버킷 정책을 수정한다.

새 계정(대상 계정)의 IAM이 접근할 수 있도록 수정한다.

DestinatitonAccountID 부분을 새 계정 ID로 바꿔넣으면 된다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::DestinationAccountID:root"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucketName/*",
                "arn:aws:s3:::SourceBucketName"
            ]
        }
    ]
}

 

3. 새 계정의 s3버킷을 만든다

sync 하기 전 미리 대상 버킷을 만들어 놔야 한다. 버킷이름 복사해두기

 

4. aws cli에서 aws sync 기존계정 새계정 해서 데이터를 옮긴다

나는 로컬 ubuntu에서 진행했는데 aws cli를 설치한 뒤에 aws configure로 로그인 후, sync 명령어를 실행하면 된다. 

aws cli 설치하기

# Ubuntu의 패키지 목록을 최신화하고, 다운로드와 압축 해제에 필요한 curl과 unzip을 설치합니다.
sudo apt update
sudo apt install curl unzip -y

# curl 명령어를 사용해 Linux용 AWS CLI 설치 파일을 다운로드합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

# 다운로드한 zip 파일의 압축을 풉니다.
unzip awscliv2.zip

# 압축 해제 후 생성된 aws 폴더 안의 설치 스크립트를 실행합니다.
sudo ./aws/install

# 설치 확인
aws --version

aws 설정하기

aws configure

AWS Access Key ID [None]: [여기에 액세스 키 ID를 붙여넣기]

AWS Secret Access Key [None]: [여기에 비밀 액세스 키를 붙여넣기]

Default region name [None]: ap-northeast-2 (서울 리전 기준)

Default output format [None]: json (보통 json을 사용)

데이터 동기화해 복사하기

aws s3 sync s3://SourceBucketName s3://DestinationBucketName

 

5. s3에 들어가서 확인해보면 파일이 있다. 끝!!

 

반응형

댓글