Amazon S3로 DB 스냅샷 데이터 내보내기
DB 스냅샷 데이터를 Amazon S3 버킷으로 내보낼 수 있습니다. 내보내기 프로세스는 백그라운드에서 실행되며 활성 DB 인스턴스의 성능에는 영향을 주지 않습니다.
DB 스냅샷을 내보낼 때 Amazon RDS는 스냅샷에서 데이터를 추출하여 Amazon S3 버킷에 저장합니다. 데이터는 압축되고 일관된 Apache Parquet 형식으로 저장됩니다.
수동 스냅샷, 자동화된 시스템 스냅샷, AWS Backup 서비스에서 생성된 수동 스냅샷을 포함하여 모든 유형의 DB 스냅샷을 내보낼 수 있습니다. 기본적으로 스냅샷의 모든 데이터가 내보내집니다. 그러나 특정한 데이터베이스, 스키마 또는 테이블 집합을 내보내도록 선택할 수 있습니다.
데이터를 내보낸 후에는 Amazon Athena 또는 Amazon Redshift Spectrum 같은 도구를 통해 직접 내보낸 데이터를 분석할 수 있습니다. Parquet 데이터를 읽는 데 Athena를 사용하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서의 Parquet SerDe를 참조하세요. Parquet 데이터를 읽는 데 Redshift Spectrum을 사용하는 방법에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서에서 열 기반 데이터 형식의 COPY를 참조하세요.
주제
리전 및 버전 사용 가능 여부
기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. 스냅샷을 S3로 내보낼 때 사용할 수 있는 버전 및 리전 가용성에 대한 자세한 내용은 S3로 스냅샷 내보내기을 참조하십시오.
제한 사항
DB 스냅샷 데이터를 Amazon S3로 내보내는 데는 다음과 같은 제한 사항이 적용됩니다.
-
동일한 DB 스냅샷에 대해 여러 내보내기 작업을 동시에 실행할 수 없습니다. 이는 전체 및 부분 내보내기에 모두 적용됩니다.
-
마그네틱 스토리지를 사용하는 DB 인스턴스에서 스냅샷을 내보내는 것은 지원되지 않습니다.
-
내보내는 동안 S3 파일 경로의 다음 문자는 밑줄(_)로 변환됩니다.
\ ` " (space)
-
데이터베이스, 스키마 또는 테이블의 이름에 다음 문자가 아닌 문자가 있으면 부분 내보내기가 지원되지 않습니다. 그러나 전체 DB 스냅샷을 내보낼 수는 있습니다.
-
라틴 문자(A–Z)
-
숫자(0–9)
-
달러 기호($)
-
밑줄(_)
-
-
공백( )과 특정 문자는 데이터베이스 테이블 열 이름에서 지원되지 않습니다. 열 이름에 다음 문자가 포함되어 있는 테이블은 내보내기를 수행하는 동안 건너뛰기가 됩니다.
, ; { } ( ) \n \t = (space)
-
이름에 슬래시(/)가 포함되어 있는 테이블은 내보내기를 수행하는 동안 생략됩니다.
-
RDS for PostgreSQL 임시 테이블과 로깅되지 않는 테이블은 내보내기 중에 건너뛰게 됩니다.
-
데이터에 500MB에 근접하거나 이보다 큰 객체(예: BLOB 또는 CLOB)가 포함되어 있으면 내보내기가 실패합니다.
-
테이블에 2GB에 가깝거나 그보다 큰 행이 있으면 내보내기 중 테이블을 건너뜁니다.
-
각 내보내기 작업에 고유한 이름을 사용하는 것이 좋습니다. 고유한 작업 이름을 사용하지 않으면 다음 오류 메시지가 표시될 수 있습니다.
ExportTaskAlreadyExistsFault: StartExportTask 작업을 호출하는 동안 오류(ExportTaskAlreadyExists)가 발생했습니다. ID가
xxxxx
인 내보내기 작업이 이미 존재합니다. -
데이터를 S3로 내보내는 동안 스냅샷을 삭제할 수 있지만, 내보내기 태스크가 완료될 때까지 해당 스냅샷에 대한 스토리지 비용은 계속 청구됩니다.
-
내보낸 스냅샷 데이터를 S3에서 새 DB 인스턴스로 복원할 수 없습니다.
스냅샷 데이터 내보내기 개요
다음 프로세스를 사용하여 DB 스냅샷 데이터를 Amazon S3 버킷으로 내보냅니다. 자세한 내용은 다음 섹션을 참조하십시오.
-
내보낼 스냅샷을 식별합니다.
기존의 자동 또는 수동 스냅샷을 사용하거나 DB 인스턴스의 수동 스냅샷을 생성합니다.
-
Amazon S3 버킷에 대한 액세스를 설정합니다.
버킷은 Amazon S3 객체 또는 파일에 대한 컨테이너입니다. 버킷에 액세스하기 위한 정보를 제공하려면 다음 단계를 수행하십시오.
-
스냅샷을 내보낼 S3 버킷을 식별합니다. S3 버킷은 스냅샷과 같은 AWS 리전에 있어야 합니다. 자세한 내용은 내보낼 Amazon S3 버킷 식별 단원을 참조하십시오.
-
스냅샷 내보내기 태스크에 S3 버킷에 대한 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 자세한 내용은 IAM 역할을 사용하여 Amazon S3 버킷에 대한 액세스 권한 제공 단원을 참조하십시오.
-
-
서버 측 암호화를 위한 대칭 암호화 AWS KMS key를 생성합니다. KMS 키는 스냅샷 내보내기 작업에서 S3에 내보내기 데이터를 기록할 때 AWS KMS 서버 측 암호화를 설정하는 데 사용됩니다. KMS 키 정책에는
kms:Encrypt
및kms:Decrypt
권한이 모두 포함되어야 합니다. Amazon RDS에서 KMS 키를 사용하는 자세한 방법은 AWS KMS key 관리 단원을 참조하십시오.KMS 키 정책에 거부 문이 있는 경우 AWS 서비스 보안 주체
export.rds.amazonaws.com
을 명시적으로 제외해야 합니다.AWS 계정 안에서 KMS 키를 사용할 수 있으며, 또는 교차 계정 KMS 키를 사용할 수 있습니다. 자세한 내용은 Amazon S3 내보내기 암호화를 위한 교차 계정 AWS KMS key 사용하기 단원을 참조하십시오.
-
콘솔 또는
start-export-task
CLI 명령을 사용하여 Amazon S3로 스냅샷을 내보냅니다. 자세한 내용은 Amazon S3 버킷으로 DB 스냅샷 내보내기 단원을 참조하십시오. -
Amazon S3 버킷에서 내보낸 데이터에 액세스하려면 Amazon Simple Storage Service 사용 설명서의 객체 업로드, 다운로드 및 관리를 참조하세요.
Amazon S3 버킷에 대한 액세스 권한 설정
DB 스냅샷 데이터를 Amazon S3 파일로 내보내려면 먼저 스냅샷에 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 그런 다음 Amazon RDS 서비스가 Amazon S3 버킷에 쓰기 작업을 할 수 있게 허용하는 IAM 역할을 생성합니다.
주제
내보낼 Amazon S3 버킷 식별
DB 스냅샷을 내보낼 Amazon S3 버킷을 식별합니다. 기존 S3 버킷을 사용하거나 새 S3 버킷을 생성합니다.
참고
내보낼 S3 버킷은 스냅샷과 동일한 AWS 리전에 있어야 합니다.
Amazon S3 버킷 작업에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 다음을 참조하세요.
IAM 역할을 사용하여 Amazon S3 버킷에 대한 액세스 권한 제공
DB 스냅샷 데이터를 Amazon S3로 내보내기 전에 스냅샷 내보내기 작업에 Amazon S3 버킷에 대한 쓰기-액세스 권한을 부여하십시오.
이 권한을 부여하려면 버킷에 대한 액세스 권한을 부여하는 IAM 정책을 생성한 다음 IAM 역할을 생성하고 정책을 역할에 연결해야 합니다. 나중에 스냅샷 내보내기 작업에 IAM 역할을 할당합니다.
중요
AWS Management Console을 사용하여 스냅샷을 내보내려는 경우 스냅샷을 내보낼 때 IAM 정책 및 역할을 자동으로 생성하도록 선택할 수 있습니다. 지침은 Amazon S3 버킷으로 DB 스냅샷 내보내기 섹션을 참조하세요.
DB 스냅샷 작업에 Amazon S3에 대한 액세스 권한을 부여하려면
-
IAM 정책을 생성합니다. 이 정책은 스냅샷 내보내기 작업에서 Amazon S3 액세스를 허용하는 버킷 및 객체 권한을 제공합니다.
정책에서 Amazon RDS에서 S3 버킷으로의 파일 전송을 허용하려면 다음과 같은 필수 작업을 포함시킵니다.
-
s3:PutObject*
-
s3:GetObject*
-
s3:ListBucket
-
s3:DeleteObject*
-
s3:GetBucketLocation
정책에 다음 리소스를 포함하여 버킷에 있는 S3 버킷과 객체를 식별합니다. 다음 리소스 목록은 Amazon S3에 액세스하기 위한 Amazon 리소스 이름(ARN) 형식을 보여 줍니다.
-
arn:aws:s3:::
your-s3-bucket
-
arn:aws:s3:::
your-s3-bucket
/*
Amazon RDS에 대한 IAM 정책을 생성하는 방법에 대한 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 섹션을 참조하세요. IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결도 참조하십시오.
다음 AWS CLI 명령은 이 옵션으로
ExportPolicy
라는 IAM 정책을 만듭니다.your-s3-bucket
이라는 버킷에 대한 액세스 권한을 부여합니다.참고
정책을 생성한 후 정책의 ARN을 기록해 둡니다. IAM 역할에 정책을 연결할 때 이후 단계에 ARN이 필요합니다.
aws iam create-policy --policy-name ExportPolicy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::
your-s3-bucket
", "arn:aws:s3:::your-s3-bucket
/*" ] } ] }' -
-
Amazon RDS가 사용자 대신 이 IAM 역할을 수임하여 Amazon S3 버킷에 액세스할 수 있도록 IAM 역할을 생성합니다. 자세한 내용은 IAM 사용 설명서의 IAM 사용자에게 권한을 위임하기 위한 역할 생성을 참조하세요.
다음 예제에서는 AWS CLI 명령을 사용해
rds-s3-export-role
이라는 역할을 생성하는 방법을 보여줍니다.aws iam create-role --role-name rds-s3-export-role --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
-
생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.
다음 AWS CLI 명령은 앞서 생성한 정책을
rds-s3-export-role
이라는 역할에 연결합니다.
을 이전 단계에서 기록해 둔 정책 ARN으로 바꿉니다.your-policy-arn
aws iam attach-role-policy --policy-arn
your-policy-arn
--role-name rds-s3-export-role
교차 계정 Amazon S3 버킷 사용하기
Amazon S3 버킷 교차 AWS 계정을 사용할 수 있습니다. 교차 계정 버킷을 사용하려면 S3 내보내기에 사용 중인 IAM 역할에 대한 액세스를 허용하는 버킷 정책을 추가합니다. 자세한 내용은 예제 2: 버킷 소유자가 교차 계정 버킷 권한 부여를 참조하세요.
-
다음 예에 표시된 대로 버킷에 버킷 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:role/Admin" }, "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::mycrossaccountbucket
", "arn:aws:s3:::mycrossaccountbucket
/*" ] } ] }
Amazon S3 내보내기 암호화를 위한 교차 계정 AWS KMS key 사용하기
Amazon S3 내보내기 암호화를 위해 교차 계정 AWS KMS key를 사용할 수 있습니다. 먼저 로컬 계정에 키 정책을 추가한 다음 외부 계정에 IAM 정책을 추가합니다. 자세한 내용은 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하세요.
교차 계정 KMS 키 사용
-
로컬 계정에 키 정책을 추가합니다.
다음 예는 로컬 계정 123456789012의 권한을 외부 계정 444455556666의
ExampleRole
과ExampleUser
에 부여합니다.{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole", "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "*" }
-
외부 계정에서 IAM 정책 추가
다음 IAM 정책 예시는 보안 주체가 계정 123456789012의 KMS 키를 암호화 작업에 사용하도록 허용합니다. 이 권한을 계정 444455556666의
ExampleRole
및ExampleUser
에 부여하려면 계정에서 정책을 연결합니다.{ "Sid": "Allow use of KMS key in account 123456789012", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey", "kms:RetireGrant" ], "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }
Amazon S3 버킷으로 DB 스냅샷 내보내기
AWS 계정당 최대 5개의 DB 스냅샷 내보내기 작업을 동시에 수행할 수 있습니다.
참고
RDS 스냅샷 내보내기는 데이터베이스 유형 및 크기에 따라 다소 시간이 걸릴 수 있습니다. 내보내기 작업은 먼저 전체 데이터베이스를 복원하고 크기를 조정하여 Amazon S3로 데이터를 추출합니다. 이 단계 동안의 작업 진행 상황은 Starting으로 표시됩니다. 작업이 S3로 데이터 내보내기로 전환되면 진행 상황이 진행 중(In progress)으로 표시됩니다.
내보내기를 완료하는 데 걸리는 시간은 데이터베이스에 저장된 데이터에 따라 다릅니다. 예를 들어 숫자로 된 기본 키 또는 인덱스 열이 잘 분산되어 있는 테이블은 가장 빠르게 내보냅니다. 분할에 적합한 열을 포함하지 않는 테이블과 문자열 기반 열에 인덱스가 하나만 있는 테이블은 더 오래 걸립니다. 내보내기가 느린 단일 스레드 프로세스를 사용하기 때문에 이렇게 더 긴 내보내기 시간이 발생합니다.
AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷을 Amazon S3로 내보낼 수 있습니다.
Lambda 함수를 사용하여 스냅샷을 내보내는 경우 Lambda 함수 정책에 kms:DescribeKey
작업을 추가합니다. 자세한 내용은 AWS Lambda 권한을 참조하세요.
Amazon S3로 내보내기 옵션은 Amazon S3로 내보낼 수 있는 스냅샷에 대해서만 나타납니다. 다음과 같은 이유로 스냅샷을 내보내기에 사용하지 못할 수 있습니다.
-
DB 엔진이 S3 내보내기를 지원하지 않습니다.
-
DB 인스턴스 버전이 S3 내보내기에 지원되지 않습니다.
-
스냅샷이 생성된 AWS 리전에서 S3 내보내기가 지원되지 않습니다.
DB 스냅샷을 내보내려면
-
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 [Snapshots]를 선택합니다.
-
이 탭에서 내보낼 스냅샷 유형을 선택합니다.
-
스냅샷 목록에서 내보낼 스냅샷을 선택합니다.
-
작업에서 Export to Amazon S3(Amazon S3로 내보내기)를 선택합니다.
Export to Amazon S3(Amazon S3로 내보내기) 창이 나타납니다.
-
Export identifier(내보내기 식별자)에 내보내기 작업을 식별할 이름을 입력합니다. 이 값은 S3 버킷에 생성된 파일의 이름에도 사용됩니다.
-
내보낼 데이터를 선택합니다.
-
스냅샷의 모든 데이터를 내보내려면 모두를 선택합니다.
-
스냅샷의 특정 부분을 내보내려면 Partial(부분)을 선택합니다. 스냅샷에서 내보낼 부분을 식별하려면 [식별자(Identifiers)]에 공백으로 구분된 하나 이상의 데이터베이스, 스키마 또는 테이블을 입력합니다.
다음 형식을 사용합니다.
database
[.schema
][.table
]database2
[.schema2
][.table2
] ...database
n[.schema
n][.table
n]예:
mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
-
-
S3 버킷에서 내보낼 버킷을 선택합니다.
내보낸 데이터를 S3 버킷의 폴더 경로에 할당하려면 S3 prefix(S3 접두사)에 선택적 경로를 입력합니다.
-
IAM 역할에서 선택한 S3 버킷에 대한 쓰기 액세스 권한을 부여하는 역할을 선택하거나 새 역할을 생성합니다.
-
IAM 역할을 사용하여 Amazon S3 버킷에 대한 액세스 권한 제공의 단계에 따라 역할을 생성한 경우에는 해당 역할을 선택합니다.
-
선택한 S3 버킷에 대한 쓰기 액세스 권한을 부여하는 역할을 생성하지 않은 경우 Create a new role(새 역할 생성)을 선택하여 역할을 자동으로 생성합니다. 그런 다음 IAM 역할 이름에 해당 역할의 이름을 입력합니다.
-
-
AWS KMS key에 내보낸 데이터를 암호화하는 데 사용할 키의 ARN을 입력합니다.
-
Amazon S3로 내보내기를 선택합니다.
AWS CLI를 사용하여 DB 스냅샷을 Amazon S3로 내보내려면 start-export-task 명령을 다음과 같은 필수 옵션과 함께 사용합니다.
-
--export-task-identifier
-
--source-arn
-
--s3-bucket-name
-
--iam-role-arn
-
--kms-key-id
다음 예에서 스냅샷 내보내기 작업의 이름은 my_snapshot_export
이고, 이 작업은 스냅샷을 my_export_bucket
이라는 S3 버킷으로 내보냅니다.
Linux, macOS 또는 Unix의 경우:
aws rds start-export-task \ --export-task-identifier
my-snapshot-export
\ --source-arn arn:aws:rds:AWS_Region
:123456789012:snapshot:snapshot-name
\ --s3-bucket-namemy-export-bucket
\ --iam-role-arniam-role
\ --kms-key-idmy-key
Windows의 경우:
aws rds start-export-task ^ --export-task-identifier
my-snapshot-export
^ --source-arn arn:aws:rds:AWS_Region
:123456789012:snapshot:snapshot-name
^ --s3-bucket-namemy-export-bucket
^ --iam-role-arniam-role
^ --kms-key-idmy-key
샘플 출력은 다음과 같습니다.
{ "Status": "STARTING", "IamRoleArn": "iam-role", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "my-export-bucket", "PercentProgress": 0, "KmsKeyId": "my-key", "ExportTaskIdentifier": "my-snapshot-export", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name" }
스냅샷 내보내기를 위해 S3 버킷에 폴더 경로를 제공하려면 start-export-task 명령에 --s3-prefix
옵션을 포함시킵니다.
Amazon RDS API를 사용하여 DB 스냅샷을 Amazon S3로 내보내려면 다음 필수 파라미터와 함께 StartExportTask 작업을 사용합니다.
-
ExportTaskIdentifier
-
SourceArn
-
S3BucketName
-
IamRoleArn
-
KmsKeyId
스냅샷 내보내기 모니터링
AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷 내보내기를 모니터링할 수 있습니다.
DB 스냅샷 내보내기를 모니터링하려면
-
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 [Snapshots]를 선택합니다.
-
스냅샷 내보내기 목록을 보려면 Amazon S3에서 내보내기 탭을 선택합니다.
-
특정 스냅샷 내보내기에 대한 정보를 보려면 해당 내보내기 작업을 선택합니다.
AWS CLI을 사용하여 DB 스냅샷 내보내기를 모니터링하려면 describe-export-tasks 명령을 사용합니다.
다음 예제에서는 모든 스냅샷 내보내기에 대한 현재 정보를 표시하는 방법을 보여 줍니다.
aws rds describe-export-tasks { "ExportTasks": [ { "Status": "CANCELED", "TaskEndTime": "2019-11-01T17:36:46.961Z", "S3Prefix": "something", "ExportTime": "2019-10-24T20:23:48.364Z", "S3Bucket": "examplebucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:
AWS_Region
:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "anewtest", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-25T19:10:58.885Z", "SourceArn": "arn:aws:rds:AWS_Region
:123456789012:snapshot:parameter-groups-test" }, { "Status": "COMPLETE", "TaskEndTime": "2019-10-31T21:37:28.312Z", "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}", "S3Prefix": "", "ExportTime": "2019-10-31T06:44:53.452Z", "S3Bucket": "examplebucket1", "PercentProgress": 100, "KmsKeyId": "arn:aws:kms:AWS_Region
:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "thursday-events-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 263, "TaskStartTime": "2019-10-31T20:58:06.998Z", "SourceArn": "arn:aws:rds:AWS_Region
:123456789012:snapshot:rds:example-1-2019-10-31-06-44" }, { "Status": "FAILED", "TaskEndTime": "2019-10-31T02:12:36.409Z", "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.", "S3Prefix": "", "ExportTime": "2019-10-30T06:45:04.526Z", "S3Bucket": "examplebucket2", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:AWS_Region
:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "ExportTaskIdentifier": "wednesday-afternoon-test", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-10-30T22:43:40.034Z", "SourceArn": "arn:aws:rds:AWS_Region
:123456789012:snapshot:rds:example-1-2019-10-30-06-45" } ] }
특정 스냅샷 내보내기에 대한 정보를 표시하려면 --export-task-identifier
명령과 함께 describe-export-tasks
옵션을 포함시킵니다. 출력을 필터링하려면 --Filters
옵션을 포함시킵니다. 자세한 옵션은 describe-export-tasks 명령을 참조하십시오.
Amazon RDS API를 사용하여 DB 스냅샷 내보내기에 대한 정보를 표시하려면 DescribeExportTasks 작업을 사용합니다.
내보내기 워크플로우의 완료를 추적하거나 다른 워크플로우를 시작하려면 Amazon Simple Notification Service 주제를 구독하십시오. Amazon SNS에 대한 자세한 내용은 Amazon RDS 이벤트 알림 작업 단원을 참조하십시오.
스냅샷 내보내기 작업 취소
AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷 내보내기 작업을 취소할 수 있습니다.
참고
스냅샷 내보내기 작업을 취소해도 Amazon S3로 내보낸 데이터는 제거되지 않습니다. 콘솔을 사용하여 데이터를 삭제하는 방법에 대한 자세한 내용은 S3 버킷에서 객체를 삭제하려면 어떻게 해야 합니까?를 참조하십시오. CLI를 사용하여 데이터를 삭제하려면 delete-object 명령을 사용합니다.
스냅샷 내보내기 작업을 취소하려면
-
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 [Snapshots]를 선택합니다.
-
Exports in Amazon S3(Amazon S3에서 내보내기) 탭을 선택합니다.
-
취소할 스냅샷 내보내기 작업을 선택합니다.
-
취소를 선택합니다.
-
확인 페이지에서 Cancel export task(내보내기 작업 취소)를 선택합니다.
AWS CLI를 사용하여 스냅샷 내보내기 작업을 취소하려면 cancel-export-task 명령을 사용합니다. 이 명령에는 --export-task-identifier
옵션이 필요합니다.
aws rds cancel-export-task --export-task-identifier my_export { "Status": "CANCELING", "S3Prefix": "", "ExportTime": "2019-08-12T01:23:53.109Z", "S3Bucket": "examplebucket", "PercentProgress": 0, "KmsKeyId": "arn:aws:kms:
AWS_Region
:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", "ExportTaskIdentifier": "my_export", "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", "TotalExtractedDataInGB": 0, "TaskStartTime": "2019-11-13T19:46:00.173Z", "SourceArn": "arn:aws:rds:AWS_Region
:123456789012:snapshot:export-example-1" }
Amazon RDS API를 사용하여 스냅샷 내보내기 작업을 취소하려면 ExportTaskIdentifier
파라미터와 함께 CancelExportTask 작업을 사용합니다.
Amazon S3 내보내기 작업에 대한 실패 메시지
다음 표에서는 Amazon S3 내보내기 작업이 실패할 때 반환되는 메시지에 대해 설명합니다.
오류 메시지 | 설명 |
---|---|
알 수 없는 내부 오류가 발생했습니다. |
알 수 없는 오류, 예외 또는 장애 때문에 요청 처리가 실패했습니다. |
내보내기 작업의 메타데이터를 S3 버킷 [버킷 이름]에 쓰는 중에 알 수 없는 내부 오류가 발생했습니다. |
알 수 없는 오류, 예외 또는 장애 때문에 요청 처리가 실패했습니다. |
RDS 내보내기가 IAM 역할 [역할 ARN]을 수임할 수 없기 때문에 내보내기 작업의 메타데이터를 작성하지 못했습니다. |
내보내기 작업은 S3 버킷에 메타데이터를 쓸 수 있는지 여부를 검증하는 IAM 역할을 가정합니다. 작업이 IAM 역할을 맡을 수 없으면 실패합니다. |
RDS 내보내기가 KMS 키 [키 ID] 와 함께 IAM 역할[역할 ARN]을 사용하여 S3 버킷 [버킷 이름]에 내보내기 작업의 메타데이터를 쓰지 못했습니다. 오류 코드: [오류 코드] |
하나 이상의 권한이 누락되어 내보내기 작업이 S3 버킷에 액세스할 수 없습니다. 이 실패 메시지는 다음 오류 코드 중 하나를 수신할 때 발생합니다.
이러한 오류 코드는 IAM 역할, S3 버킷 또는 KMS 키에 대한 설정이 잘못 구성되었음을 의미합니다. |
IAM 역할 [역할 ARN]은 S3 버킷 [버킷 이름]에서 [S3 작업]을 호출할 권한이 없습니다. 권한을 검토하고 내보내기를 다시 시도해 주세요. |
IAM 정책이 잘못 구성되었습니다. S3 버킷의 특정 S3 작업에 대한 권한이 없어 내보내기 작업이 실패하게 됩니다. |
KMS 키 확인이 실패했습니다. KMS 키의 자격 증명을 확인하고 다시 시도해 주세요. |
KMS 키 자격 증명 확인에 실패했습니다. |
S3 자격 증명 확인이 실패했습니다. S3 버킷 및 IAM 정책에서 권한을 확인합니다. |
S3 자격 증명 확인이 실패했습니다. |
S3 버킷 [버킷 이름]이 유효하지 않습니다. 현재 AWS 리전에 위치하지 않거나 존재하지 않습니다. S3 버킷 이름을 검토하고 내보내기를 다시 시도해 주세요. |
S3 버킷이 유효하지 않습니다. |
S3 버킷 [버킷 이름]이 현재 AWS 리전에 위치하지 않습니다. S3 버킷 이름을 검토하고 내보내기를 다시 시도해 주세요. |
S3 버킷이 잘못된 AWS 리전에 있습니다. |
PostgreSQL 권한 오류 문제 해결
PostgreSQL 데이터베이스를 Amazon S3으로 내보낼 때 특정 테이블을 건너뛰었다는 PERMISSIONS_DO_NOT_EXIST
오류가 표시될 수 있습니다. 이 오류는 대부분 DB 인스턴스를 생성할 때 지정한 수퍼유저에게 이러한 테이블에 액세스할 권한이 없을 때 발생합니다.
이 오류를 해결하려면 다음 명령을 실행합니다.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA
schema_name
TOsuperuser_name
수퍼유저 권한에 대한 자세한 내용은 마스터 사용자 계정 권한 단원을 참조하십시오.
파일 명명 규칙
특정 테이블에 대해 내보낸 데이터는
형식으로 저장됩니다. 여기서 기본 접두사는 다음과 같습니다.base_prefix
/files
export_identifier
/database_name
/schema_name
.table_name
/
예:
export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/
파일의 명명 규칙은 두 가지가 있습니다. 현재 규칙은 다음과 같습니다.
partition_index
/part-00000-random_uuid
.format-based_extension
예:
1/part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet 2/part-00000-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet 3/part-00000-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
이전 규칙은 다음과 같습니다.
part-
partition_index
-random_uuid
.format-based_extension
예:
part-00000-c5a881bb-58ff-4ee6-1111-b41ecff340a3-c000.gz.parquet part-00001-d7a881cc-88cc-5ab7-2222-c41ecab340a4-c000.gz.parquet part-00002-f5a991ab-59aa-7fa6-3333-d41eccd340a7-c000.gz.parquet
파일 명명 규칙은 변경될 수 있습니다. 따라서 대상 테이블을 읽을 때 테이블의 기본 접두사 내에 있는 모든 내용을 읽는 것이 좋습니다.
Amazon S3 버킷으로 내보내기를 할 때 데이터 변환
DB 스냅샷을 Amazon S3 버킷으로 내보낼 때 Amazon RDS는 데이터를 Parquet 형식으로 변환하고, 데이터를 Parquet 형식으로 내보내며, 데이터를 Parquet 형식으로 저장합니다. Parquet에 대한 자세한 내용은 Apache Parquet
Apache Parquet은 다음과 같은 프리미티브 유형 중 하나로 모든 데이터를 저장합니다.
-
BOOLEAN
-
INT32
-
INT64
-
INT96
-
FLOAT
-
DOUBLE
-
BYTE_ARRAY – 가변 길이 바이트 배열(이진수라고도 함)
-
FIXED_LEN_BYTE_ARRAY – 값이 일정한 크기를 가질 때 사용되는 고정 길이 바이트 배열
Parquet 데이터 유형은 형식을 읽고 쓸 때 복잡성을 줄이기 위한 것입니다. Parquet은 프리미티브 유형을 확장할 수 있도록 논리적 유형을 제공합니다. 논리적 유형은 LogicalType
메타 데이터 필드의 데이터를 이용으로 주석으로 구현됩니다. 논리적 유형 주석은 프리미티브 유형을 해석하는 방법을 설명합니다.
STRING
논리적 유형에 BYTE_ARRAY
유형이 주석으로 달려 있으면 바이트 배열이 UTF-8로 인코딩된 문자열로 해석되어야 한다는 뜻입니다. 내보내기 태스크가 완료되면 Amazon RDS에서 문자열 변환이 발생했는지를 알려줍니다. 내보낸 기초 데이터는 항상 소스의 데이터와 동일합니다. 그러나 UTF-8에서의 인코딩 차이로 인해 일부 문자는 Athena 같은 도구에서 읽을 때 소스와 다르게 나타날 수 있습니다.
자세한 내용은 Parquet 설명서의 Parquet 논리적 유형 정의
Parquet로 MySQL 및 MariaDB 데이터 유형 매핑
다음 표는 데이터를 변환해 Amazon S3로 내보낼 때 MySQL 및 MariaDB 데이터 유형에서 Parquet 데이터 유형으로의 매핑을 보여줍니다.
소스 데이터 유형 | Parquet 프리미티브 유형 | 논리적 유형 주석 | 변환 노트 |
---|---|---|---|
숫자 데이터 유형 | |||
BIGINT | INT64 | ||
BIGINT UNSIGNED | FIXED_LEN_BYTE_ARRAY(9) | DECIMAL(20,0) | Parquet는 서명된 유형만 지원하므로 매핑에는 BIGINT_UNSIGNED 유형을 저장하기 위해 추가 바이트(8 + 1)가 필요합니다. |
BIT | BYTE_ARRAY | ||
DECIMAL | INT32 | DECIMAL (p,s) | 소스 값이 231 미만이면 INT32로 저장됩니다. |
INT64 | DECIMAL (p,s) | 소스 값이 231 이상이지만 263 미만인 경우 INT64로 저장됩니다. | |
FIXED_LEN_BYTE_ARRAY(N) | DECIMAL (p,s) | 소스 값이 263 이상이면 FIXED_LEN_BYTE_ARRAY(N)로 저장됩니다. | |
BYTE_ARRAY | STRING | Parquet는 38보다 큰 십진수 정밀도를 지원하지 않습니다. 십진수 값은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. | |
DOUBLE | DOUBLE | ||
FLOAT | DOUBLE | ||
INT | INT32 | ||
INT UNSIGNED | INT64 | ||
MEDIUMINT | INT32 | ||
MEDIUMINT UNSIGNED | INT64 | ||
NUMERIC | INT32 | DECIMAL (p,s) |
소스 값이 231 미만이면 INT32로 저장됩니다. |
INT64 | DECIMAL (p,s) | 소스 값이 231 이상이지만 263 미만인 경우 INT64로 저장됩니다. | |
FIXED_LEN_ARRAY(N) | DECIMAL (p,s) | 소스 값이 263 이상이면 FIXED_LEN_BYTE_ARRAY(N)로 저장됩니다. | |
BYTE_ARRAY | STRING | Parquet는 38보다 큰 숫자 정밀도를 지원하지 않습니다. 이 숫자 값은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. | |
SMALLINT | INT32 | ||
SMALLINT UNSIGNED | INT32 | ||
TINYINT | INT32 | ||
TINYINT UNSIGNED | INT32 | ||
문자열 데이터 유형 | |||
BINARY | BYTE_ARRAY | ||
BLOB | BYTE_ARRAY | ||
CHAR | BYTE_ARRAY | ||
ENUM | BYTE_ARRAY | STRING | |
LINESTRING | BYTE_ARRAY | ||
LONGBLOB | BYTE_ARRAY | ||
LONGTEXT | BYTE_ARRAY | STRING | |
MEDIUMBLOB | BYTE_ARRAY | ||
MEDIUMTEXT | BYTE_ARRAY | STRING | |
MULTILINESTRING | BYTE_ARRAY | ||
SET | BYTE_ARRAY | STRING | |
TEXT | BYTE_ARRAY | STRING | |
TINYBLOB | BYTE_ARRAY | ||
TINYTEXT | BYTE_ARRAY | STRING | |
VARBINARY | BYTE_ARRAY | ||
VARCHAR | BYTE_ARRAY | STRING | |
날짜 및 시간 데이터 유형 | |||
DATE | BYTE_ARRAY | STRING | 날짜는 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. |
DATETIME | INT64 | TIMESTAMP_MICROS | |
TIME | BYTE_ARRAY | STRING | TIME 유형은 BYTE_ARRAY의 문자열로 변환되고 UTF8로 인코딩됩니다. |
TIMESTAMP | INT64 | TIMESTAMP_MICROS | |
YEAR | INT32 | ||
기하학적 데이터 유형 | |||
GEOMETRY | BYTE_ARRAY | ||
GEOMETRYCOLLECTION | BYTE_ARRAY | ||
MULTIPOINT | BYTE_ARRAY | ||
MULTIPOLYGON | BYTE_ARRAY | ||
POINT | BYTE_ARRAY | ||
POLYGON | BYTE_ARRAY | ||
JSON 데이터 유형 | |||
JSON | BYTE_ARRAY | STRING |
Parquet로 PostgreSQL 데이터 유형 매핑
다음 표는 데이터를 변환해 Amazon S3로 내보낼 때 PostgreSQL 데이터 유형에서 Parquet 데이터 유형으로의 매핑을 보여줍니다.
PostgreSQL 데이터 형식 | Parquet 프리미티브 유형 | 논리적 유형 주석 | 매핑 노트 |
---|---|---|---|
숫자 데이터 유형 | |||
BIGINT | INT64 | ||
BIGSERIAL | INT64 | ||
DECIMAL | BYTE_ARRAY | STRING | DECIMAL 유형은 BYTE_ARRAY 유형의 문자열로 변환되고 UTF8로 인코딩됩니다. 이 변환은 데이터 정밀도와 숫자(NaN)가 아닌 데이터 값으로 인해 복잡해지는 것을 피하기 위한 것입니다. |
DOUBLE PRECISION | DOUBLE | ||
INTEGER | INT32 | ||
MONEY | BYTE_ARRAY | STRING | |
REAL | FLOAT | ||
SERIAL | INT32 | ||
SMALLINT | INT32 | INT_16 | |
SMALLSERIAL | INT32 | INT_16 | |
문자열 및 관련 데이터 유형 | |||
ARRAY | BYTE_ARRAY | STRING |
배열은 문자열로 변환되고 BINARY(UTF8)로 인코딩됩니다. 이 변환은 데이터 정밀도와 숫자(NaN)가 아닌 데이터 값, 그리고 시간 데이터 값으로 인해 복잡해지는 것을 피하기 위한 것입니다. |
BIT | BYTE_ARRAY | STRING | |
BIT VARYING | BYTE_ARRAY | STRING | |
BYTEA | BINARY | ||
CHAR | BYTE_ARRAY | STRING | |
CHAR(N) | BYTE_ARRAY | STRING | |
ENUM | BYTE_ARRAY | STRING | |
NAME | BYTE_ARRAY | STRING | |
TEXT | BYTE_ARRAY | STRING | |
TEXT SEARCH | BYTE_ARRAY | STRING | |
VARCHAR(N) | BYTE_ARRAY | STRING | |
XML | BYTE_ARRAY | STRING | |
날짜 및 시간 데이터 유형 | |||
DATE | BYTE_ARRAY | STRING | |
INTERVAL | BYTE_ARRAY | STRING | |
TIME | BYTE_ARRAY | STRING | |
TIME WITH TIME ZONE | BYTE_ARRAY | STRING | |
TIMESTAMP | BYTE_ARRAY | STRING | |
TIMESTAMP(시간대 사용) | BYTE_ARRAY | STRING | |
기하학적 데이터 유형 | |||
BOX | BYTE_ARRAY | STRING | |
CIRCLE | BYTE_ARRAY | STRING | |
LINE | BYTE_ARRAY | STRING | |
LINESEGMENT | BYTE_ARRAY | STRING | |
PATH | BYTE_ARRAY | STRING | |
POINT | BYTE_ARRAY | STRING | |
POLYGON | BYTE_ARRAY | STRING | |
JSON 데이터 유형 | |||
JSON | BYTE_ARRAY | STRING | |
JSONB | BYTE_ARRAY | STRING | |
기타 데이터 유형 | |||
BOOLEAN | BOOLEAN | ||
CIDR | BYTE_ARRAY | STRING | 네트워크 데이터 유형 |
COMPOSITE | BYTE_ARRAY | STRING | |
DOMAIN | BYTE_ARRAY | STRING | |
INET | BYTE_ARRAY | STRING | 네트워크 데이터 유형 |
MACADDR | BYTE_ARRAY | STRING | |
OBJECT IDENTIFIER | 해당 사항 없음 | ||
PG_LSN | BYTE_ARRAY | STRING | |
RANGE | BYTE_ARRAY | STRING | |
UUID | BYTE_ARRAY | STRING |