AWS

[AWS] RDS 스냅샷을 S3로 내보내기 관련 CLI

비번변경 2023. 5. 28. 17:13

RDS 스냅샷을 S3로 내보내기

RDS는 스냅샷을 S3로 저장할 수 있는 내보내기(export) 기능을 제공하고 있다. 스냅샷에서 데이터를 추출해 Apache Parquet 형식으로 데이터를 저장하는 기능으로 백그라운드로 동작해 RDS 성능에 영향을 주지 않는다. AWS에서 생성한 모든 유형의 스냅샷(수동 스냅샷, 자동화된 시스템 스냅샷, AWS Backup 서비스에서 생성된 수동 스냅샷)을 내보낼 수 있고, 모든 데이터뿐만 아니라 특정 데이터베이스나 특정 테이블만 내보내도록 할 수도 있다.

 

이 글에서는 내보내기 기능을 사용할 때 사용한 CLI 정도만 간단히 정리한다. 해당 기능을 사용하기 위해 어떤 부분이 필요한지는 공식 문서 Amazon S3로 DB 스냅샷 데이터 내보내기를 살펴보면 좋을 것 같다.

 

 

DB 스냅샷 찾기

 describe-db-snapshots 명령은 계정에 생성된 스냅샷 목록을 조회한다.

특정 DB에 대한 스냅샷 목록을 찾는다면  --db-instance-identifier 옵션으로 RDS 이름을 지정한다. --filter 옵션으로 찾아도 된다.

aws rds describe-db-snapshots \
    --db-instance-identifier 'RDS 이름'
    
aws rds describe-db-snapshots \
    --filters Name=db-instance-id,Values='RDS 이름'

 

가장 최근 생성된 스냅샷은 --query 옵션으로 찾을 수 있다.

aws rds describe-db-snapshots \
    --filters Name=db-instance-id,Values='RDS 이름' \
    --query="max_by(DBSnapshots, &SnapshotCreateTime)" \
    --region ap-northeast-2 \

 

실행 결과 (예시)

{
    "DBSnapshots": [
        {
            "DBSnapshotIdentifier": "mydbsnapshot",
            "DBInstanceIdentifier": "mysqldb",
            "SnapshotCreateTime": "2018-02-08T22:28:08.598Z",
            "Engine": "mysql",
            "AllocatedStorage": 20,
            "Status": "available",
            "Port": 3306,
            "AvailabilityZone": "us-east-1f",
            "VpcId": "vpc-6594f31c",
            "InstanceCreateTime": "2018-02-08T22:24:55.973Z",
            "MasterUsername": "mysqladmin",
            "EngineVersion": "5.6.37",
            "LicenseModel": "general-public-license",
            "SnapshotType": "manual",
            "OptionGroupName": "default:mysql-5-6",
            "PercentProgress": 100,
            "StorageType": "gp2",
            "Encrypted": false,
            "DBSnapshotArn": "arn:aws:rds:us-east-1:123456789012:snapshot:mydbsnapshot",
            "IAMDatabaseAuthenticationEnabled": false,
            "ProcessorFeatures": [],
            "DbiResourceId": "db-AKIAIOSFODNN7EXAMPLE"
        }
    ]
}

 

 

스냅샷 내보내기 

스냅샷 내보내기를 수행할 때는 작업 ID와 내보낼 스냅샷, 데이터를 저장할 S3, RDS가 내보내기 수행에 사용하는 ROLE과 KMS 키를 지정하여 실행한다.

aws rds start-export-task \
    --export-task-identifier 내보내기_작업_ID \
    --source-arn arn:aws:rds:us-west-2:077707500000:snapshot:rds:스냅샷_ARN \
    --s3-bucket-name thinq-care-library-us \
    --iam-role-arn arn:aws:iam::077707500000:role/RDS_수임_역할 \
    --kms-key-id 141be7d0-6661-4b0d-8d04-000000000000

 

만약 특정 테이블만 지정한 S3 prefix에 저장할 때는 --s3-prefix, --export-only 옵션을 포함하여 수행한다.

aws rds start-export-task \
    --export-task-identifier 내보내기_작업_ID \
    --source-arn arn:aws:rds:us-west-2:077707500000:snapshot:rds:스냅샷_ARN \
    --s3-bucket-name thinq-care-library-us \
    --s3-prefix database/ \
    --export-only database.TABLE_NAME \
    --iam-role-arn arn:aws:iam::077707500000:role/RDS_수임_역할 \
    --kms-key-id 141be7d0-6661-4b0d-8d04-000000000000

 

실행 결과 (예시)

{
    "ExportTaskIdentifier": "my-s3-export",
    "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
    "SnapshotTime": "2020-03-27T20:48:42.023Z",
    "S3Bucket": "mybucket",
    "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
    "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
    "Status": "STARTING",
    "PercentProgress": 0,
    "TotalExtractedDataInGB": 0
}

 

 

내보내기 작업 찾기

task가 특정 스냅샷으로 내보내기를 수행 중이면, 즉 task의 status가 STARTING, IN_PROGRESS, CANSCELING이면 사용 중인 스냅샷은 추가로 내보내기를 수행할 수 없다. 즉, 하나의 스냅샷은 동시에 여러 내보내기 작업을 수행할 수 없다. 만약 내보내기 작업을 자동화한다면 task의 상태 체크도 필요하다. 

aws rds describe-export-tasks \
--source-arn arn:aws:rds:eu-west-1:077707500000:snapshot:rds:스냅샷_ARN \
--region eu-west-1

 

실행 결과 (예시)

{
    "ExportTasks": [
        {
            "ExportTaskIdentifier": "test-snapshot-export",
            "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:test-snapshot",
            "SnapshotTime": "2020-03-02T18:26:28.163Z",
            "TaskStartTime": "2020-03-02T18:57:56.896Z",
            "TaskEndTime": "2020-03-02T19:10:31.985Z",
            "S3Bucket": "mybucket",
            "S3Prefix": "",
            "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
            "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
            "Status": "COMPLETE",
            "PercentProgress": 100,
            "TotalExtractedDataInGB": 0
        },
        {
            "ExportTaskIdentifier": "my-s3-export",
            "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
            "SnapshotTime": "2020-03-27T20:48:42.023Z",
            "S3Bucket": "mybucket",
            "S3Prefix": "",
            "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
            "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
            "Status": "STARTING",
            "PercentProgress": 0,
            "TotalExtractedDataInGB": 0
        }
    ]
}

 

 

내보내기 작업 취소

내보내기 작업의 ID를 지정하여 실행 중인 작업을 취소할 수 있다.

aws rds cancel-export-task \
    --export-task-identifier my-s3-export-1

 

실행 결과 (예시)

{
    "ExportTaskIdentifier": "my-s3-export-1",
    "SourceArn": "arn:aws:rds:us-east-1:123456789012:snapshot:publisher-final-snapshot",
    "SnapshotTime": "2019-03-24T20:01:09.815Z",
    "S3Bucket": "mybucket",
    "S3Prefix": "",
    "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/export-snap-S3-role",
    "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcd0000-7bfd-4594-af38-aabbccddeeff",
    "Status": "CANCELING",
    "PercentProgress": 0,
    "TotalExtractedDataInGB": 0
}

 

 

참고 문서

Amazon S3로 DB 스냅샷 데이터 내보내기

 

 

728x90