Amazon S3로 DB 클러스터 스냅샷 데이터 내보내기 - Amazon Aurora

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

DB 클러스터 스냅샷 데이터를 Amazon S3 버킷으로 내보낼 수 있습니다. 내보내기 프로세스는 백그라운드에서 실행되며 활성 DB 클러스터의 성능에는 영향을 주지 않습니다.

DB 클러스터 스냅샷을 내보낼 때 Amazon Aurora는 해당 스냅샷에서 데이터를 추출하여 Amazon S3 버킷에 저장합니다. 수동 스냅샷 및 자동화된 시스템 스냅샷을 내보낼 수 있습니다. 기본적으로 스냅샷의 모든 데이터가 내보내집니다. 그러나 특정한 데이터베이스, 스키마 또는 테이블 집합을 내보내도록 선택할 수 있습니다.

데이터는 압축되고 일관된 Apache Parquet 형식으로 저장됩니다. 개별 Parquet 파일은 일반적으로 크기가 1~10MB입니다.

데이터를 내보낸 후에는 Amazon Athena 또는 Amazon Redshift Spectrum 같은 도구를 통해 직접 내보낸 데이터를 분석할 수 있습니다. Parquet 데이터를 읽는 데 Athena를 사용하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서Parquet SerDe를 참조하세요. Parquet 데이터를 읽는 데 Redshift Spectrum을 사용하는 방법에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서에서 열 기반 데이터 형식의 COPY를 참조하세요.

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. DB 클러스터 스냅샷 데이터를 S3로 내보낼 때 사용할 수 있는 버전 및 리전에 대한 자세한 내용은 Amazon S3로 스냅샷 데이터 내보내기를 지원하는 리전 및 Aurora DB 엔진 단원을 참조하십시오.

제한 사항

DB 스냅샷 데이터를 Amazon S3로 내보내는 데는 다음과 같은 제한 사항이 적용됩니다.

  • 동일한 DB 클러스터 스냅샷에 대해 여러 내보내기 작업을 동시에 실행할 수 없습니다. 이는 전체 및 부분 내보내기에 모두 적용됩니다.

  • 스냅샷 데이터를 Aurora Serverless v1 DB 클러스터에서 S3으로 내보낼 수 없습니다.

  • S3로 내보내는 경우 콜론(:)이 포함된 S3 접두사를 지원하지 않습니다.

  • 내보내는 동안 S3 파일 경로의 다음 문자는 밑줄(_)로 변환됩니다.

    \ ` " (space)
  • 데이터베이스, 스키마 또는 테이블의 이름에 다음 문자가 아닌 문자가 있으면 부분 내보내기가 지원되지 않습니다. 그러나 전체 DB 스냅샷을 내보낼 수는 있습니다.

    • 라틴 문자(A–Z)

    • 숫자(0–9)

    • 달러 기호($)

    • 밑줄(_)

  • 공백( )과 특정 문자는 데이터베이스 테이블 열 이름에서 지원되지 않습니다. 열 이름에 다음 문자가 포함되어 있는 테이블은 내보내기를 수행하는 동안 건너뛰기가 됩니다.

    , ; { } ( ) \n \t = (space)
  • 이름에 슬래시(/)가 포함되어 있는 테이블은 내보내기를 수행하는 동안 생략됩니다.

  • Aurora PostgreSQL 임시 테이블과 로깅되지 않는 테이블은 내보내기 중에 건너뛰게 됩니다.

  • 데이터에 500MB에 근접하거나 이보다 큰 객체(예: BLOB 또는 CLOB)가 포함되어 있으면 내보내기가 실패합니다.

  • 테이블에 2GB에 가깝거나 그보다 큰 행이 있으면 내보내기 중 테이블을 건너뜁니다.

  • 부분 내보내기의 경우 ExportOnly 목록의 최대 크기는 200KB입니다.

  • 각 내보내기 작업에 고유한 이름을 사용하는 것이 좋습니다. 고유한 작업 이름을 사용하지 않으면 다음 오류 메시지가 표시될 수 있습니다.

    ExportTaskAlreadyExistsFault: StartExportTask 작업을 호출하는 동안 오류(ExportTaskAlreadyExists)가 발생했습니다. ID가 xxxxx인 내보내기 작업이 이미 존재합니다.

  • 데이터를 S3로 내보내는 동안 스냅샷을 삭제할 수 있지만, 내보내기 태스크가 완료될 때까지 해당 스냅샷에 대한 스토리지 비용은 계속 청구됩니다.

  • 내보낸 스냅샷 데이터를 S3에서 새 DB 클러스터로 복원할 수 없습니다.

스냅샷 데이터 내보내기 개요

다음 프로세스를 사용하여 DB 스냅샷 데이터를 Amazon S3 버킷으로 내보냅니다. 자세한 내용은 다음 섹션을 참조하십시오.

  1. 내보낼 스냅샷을 식별합니다.

    기존의 자동 또는 수동 스냅샷을 사용하거나 DB 인스턴스의 수동 스냅샷을 생성합니다.

  2. Amazon S3 버킷에 대한 액세스를 설정합니다.

    버킷은 Amazon S3 객체 또는 파일에 대한 컨테이너입니다. 버킷에 액세스하기 위한 정보를 제공하려면 다음 단계를 수행하십시오.

    1. 스냅샷을 내보낼 S3 버킷을 식별합니다. S3 버킷은 스냅샷과 같은 AWS 리전에 있어야 합니다. 자세한 내용은 내보낼 Amazon S3 버킷 식별 단원을 참조하십시오.

    2. 스냅샷 내보내기 태스크에 S3 버킷에 대한 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 자세한 내용은 IAM 역할을 사용하여 Amazon S3 버킷에 대한 액세스 권한 제공 단원을 참조하십시오.

  3. 서버 측 암호화를 위한 대칭 암호화 AWS KMS key를 생성합니다. KMS 키는 스냅샷 내보내기 작업에서 S3에 내보내기 데이터를 기록할 때 AWS KMS 서버 측 암호화를 설정하는 데 사용됩니다.

    KMS 키 정책에는 kms:CreateGrantkms:DescribeKey 권한이 모두 포함되어야 합니다. Amazon Aurora에서 KMS 키를 사용하는 자세한 방법은 AWS KMS key 관리 섹션을 참조하세요.

    KMS 키 정책에 거부 문이 있는 경우 AWS 서비스 보안 주체 export.rds.amazonaws.com을 명시적으로 제외해야 합니다.

    AWS 계정 안에서 KMS 키를 사용할 수 있으며, 또는 교차 계정 KMS 키를 사용할 수 있습니다. 자세한 내용은 교차 계정 AWS KMS key 사용 단원을 참조하십시오.

  4. 콘솔 또는 start-export-task CLI 명령을 사용하여 Amazon S3로 스냅샷을 내보냅니다. 자세한 내용은 Amazon S3 버킷으로 스냅샷 내보내기 단원을 참조하십시오.

  5. Amazon S3 버킷에서 내보낸 데이터에 액세스하려면 Amazon Simple Storage Service 사용 설명서객체 업로드, 다운로드 및 관리를 참조하세요.

Amazon S3 버킷에 대한 액세스 권한 설정

Amazon S3 버킷을 식별한 다음 버킷에 액세스할 수 있는 권한을 스냅샷에 부여합니다.

내보낼 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 스냅샷 작업에 Amazon S3에 대한 액세스 권한을 부여하려면
  1. IAM 정책을 생성합니다. 이 정책은 스냅샷 내보내기 작업에서 Amazon S3 액세스를 허용하는 버킷 및 객체 권한을 제공합니다.

    정책에 다음 필수 작업을 포함하여 Amazon Aurora에서 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 Aurora에 대한 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/*" ] } ] }'
  2. Aurora가 사용자 대신 이 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" } ] }'
  3. 생성한 IAM 역할에 생성한 IAM 정책을 연결합니다.

    다음 AWS CLI 명령은 앞서 생성한 정책을 rds-s3-export-role이라는 역할에 연결합니다. your-policy-arn을 이전 단계에서 기록해 둔 정책 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/*" ] } ] }

교차 계정 AWS KMS key 사용

Amazon S3 내보내기 암호화를 위해 교차 계정 AWS KMS key를 사용할 수 있습니다. 먼저 로컬 계정에 키 정책을 추가한 다음 외부 계정에 IAM 정책을 추가합니다. 자세한 내용은 다른 계정의 사용자가 KMS 키를 사용하도록 허용을 참조하세요.

교차 계정 KMS 키 사용
  1. 로컬 계정에 키 정책을 추가합니다.

    다음 예는 로컬 계정 123456789012의 권한을 외부 계정 444455556666의 ExampleRoleExampleUser에 부여합니다.

    { "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": "*" }
  2. 외부 계정에서 IAM 정책 추가

    다음 IAM 정책 예시는 보안 주체가 계정 123456789012의 KMS 키를 암호화 작업에 사용하도록 허용합니다. 이 권한을 계정 444455556666의 ExampleRoleExampleUser에 부여하려면 계정에서 정책을 연결합니다.

    { "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 버킷으로 스냅샷 내보내기

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 스냅샷을 내보내려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 [Snapshots]를 선택합니다.

  3. 이 탭에서 내보낼 스냅샷 유형을 선택합니다.

  4. 스냅샷 목록에서 내보낼 스냅샷을 선택합니다.

  5. 작업에서 Export to Amazon S3(Amazon S3로 내보내기)를 선택합니다.

    Export to Amazon S3(Amazon S3로 내보내기) 창이 나타납니다.

  6. Export identifier(내보내기 식별자)에 내보내기 작업을 식별할 이름을 입력합니다. 이 값은 S3 버킷에 생성된 파일의 이름에도 사용됩니다.

  7. 내보낼 데이터를 선택합니다.

    • 스냅샷의 모든 데이터를 내보내려면 모두를 선택합니다.

    • 스냅샷의 특정 부분을 내보내려면 Partial(부분)을 선택합니다. 스냅샷에서 내보낼 부분을 식별하려면 [식별자(Identifiers)]에 공백으로 구분된 하나 이상의 데이터베이스, 스키마 또는 테이블을 입력합니다.

      다음 형식을 사용합니다.

      database[.schema][.table] database2[.schema2][.table2] ... databasen[.scheman][.tablen]

      예:

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. S3 버킷에서 내보낼 버킷을 선택합니다.

    내보낸 데이터를 S3 버킷의 폴더 경로에 할당하려면 S3 prefix(S3 접두사)에 선택적 경로를 입력합니다.

  9. IAM 역할에서 선택한 S3 버킷에 대한 쓰기 액세스 권한을 부여하는 역할을 선택하거나 새 역할을 생성합니다.

    • IAM 역할을 사용하여 Amazon S3 버킷에 대한 액세스 권한 제공의 단계에 따라 역할을 생성한 경우에는 해당 역할을 선택합니다.

    • 선택한 S3 버킷에 대한 쓰기 액세스 권한을 부여하는 역할을 생성하지 않은 경우 Create a new role(새 역할 생성)을 선택하여 역할을 자동으로 생성합니다. 그런 다음 IAM 역할 이름에 해당 역할의 이름을 입력합니다.

  10. AWS KMS key에 내보낸 데이터를 암호화하는 데 사용할 키의 ARN을 입력합니다.

  11. 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 버킷으로 내보냅니다.

대상 LinuxmacOS, 또는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-name my-export-bucket \ --iam-role-arn iam-role \ --kms-key-id my-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-name my-export-bucket ^ --iam-role-arn iam-role ^ --kms-key-id my-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

Aurora MySQL에서의 내보내기 성능

Aurora MySQL 버전 2 및 버전 3 DB 클러스터 스냅샷은 고급 내보내기 메커니즘을 사용하여 성능을 개선하고 내보내기 시간을 단축합니다. 이 메커니즘에는 Aurora 공유 스토리지 아키텍처를 활용하기 위한 최적화(예: 다중 내보내기 스레드 및 Aurora MySQL 병렬 쿼리)가 포함됩니다. 최적화는 데이터 세트 크기 및 구조에 맞게 적용됩니다.

병렬 쿼리를 켜지 않아도 더 빠른 내보내기 프로세스를 사용할 수 있지만, 프로세스에는 병렬 쿼리와 동일한 제한이 적용됩니다. 또한 일이 0이거나 연도가 0000인 날짜 같은 일부 데이터 값이 지원되지 않습니다. 자세한 내용은 Amazon Aurora MySQL용 Parallel Query 처리 단원을 참조하십시오.

성능 최적화를 적용하면 훨씬 큰 Aurora MySQL 버전 2 및 3 내보내기용 Parquet 파일(최대 200GB)도 표시됩니다.

데이터 유형이나 값이 호환되지 않는 등의 이유로 더 빠른 내보내기 프로세스를 사용할 수 없다면, Aurora는 병렬 쿼리를 사용하지 않는 단일 스레드 내보내기 모드로 자동 전환됩니다. 사용하는 프로세스와 내보낼 데이터 양에 따라 내보내기 성능이 달라질 수 있습니다.

스냅샷 내보내기 모니터링

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷 내보내기를 모니터링할 수 있습니다.

DB 스냅샷 내보내기를 모니터링하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 Amazon S3에서 내보내기를 선택합니다.

    DB 스냅샷 내보내기는 소스 유형 열에 표시됩니다. 내보내기 상태는 상태 열에 표시됩니다.

  3. 특정 스냅샷 내보내기에 대한 상세 정보를 보려면 해당 내보내기 작업을 선택합니다.

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 my-exports 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 명령을 사용합니다.

스냅샷 내보내기 작업을 취소하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 Amazon S3에서 내보내기를 선택합니다.

    DB 스냅샷 내보내기는 소스 유형 열에 표시됩니다. 내보내기 상태는 상태 열에 표시됩니다.

  3. 취소할 스냅샷 내보내기 작업을 선택합니다.

  4. 취소를 선택합니다.

  5. 확인 페이지에서 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 버킷에 액세스할 수 없습니다. 이 실패 메시지는 다음 오류 코드 중 하나를 수신할 때 발생합니다.

  • AWSSecurityTokenServiceException, 오류 코드 AccessDenied

  • AmazonS3Exception, 오류 코드 NoSuchBucket, AccessDenied, KMS.KMSInvalidStateException, 403 Forbidden 또는 KMS.DisabledException

이러한 오류 코드는 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 TO superuser_name

수퍼유저 권한에 대한 자세한 내용은 마스터 사용자 계정 권한 단원을 참조하십시오.

파일 명명 규칙

특정 테이블에 대해 내보낸 데이터는 base_prefix/files 형식으로 저장됩니다. 여기서 기본 접두사는 다음과 같습니다.

export_identifier/database_name/schema_name.table_name/

예:

export-1234567890123-459/rdststdb/rdststdb.DataInsert_7ADB5D19965123A2/

파일의 명명 규칙은 두 가지가 있습니다.

  • 현행 규칙:

    batch_index/part-partition_index-random_uuid.format-based_extension

    배치 인덱스는 테이블에서 읽은 데이터 배치를 나타내는 시퀀스 번호입니다. 테이블을 병렬로 내보낼 작은 청크로 파티셔닝할 수 없는 경우에는 배치 인덱스가 여러 개 생성됩니다. 테이블이 여러 테이블로 파티셔닝된 경우에도 마찬가지입니다. 기본 테이블의 각 테이블 파티션마다 하나씩, 배치 인덱스가 여러 개 생성됩니다.

    테이블을 병렬로 읽을 작은 청크로 파티셔닝할 수 있는 경우에는 배치 인덱스 1 폴더 하나만 생성됩니다.

    배치 인덱스 폴더에는 테이블 데이터를 포함하는 하나 이상의 Parquet 파일이 있습니다. Parquet 파일 이름의 접두사는 part-partition_index입니다. 테이블이 파티셔닝된 경우 파티션 인덱스 00000으로 시작되는 여러 개의 파일이 생성됩니다.

    파티션 인덱스 시퀀스에 간격이 있을 수 있습니다. 이러한 간격은 테이블의 범위 지정 쿼리에서 각 파티션을 가져오기 때문에 발생합니다. 해당 파티션 범위에 데이터가 없는 경우 해당 시퀀스 번호는 건너뛰게 됩니다.

    예를 들어 id열이 테이블의 프라이머리 키이고 최소값과 최대값이 1001000이라고 가정해 보겠습니다. 9개의 파티션이 있는 이 테이블을 내보내려고 하면 다음과 같은 병렬 쿼리를 사용하여 테이블을 읽습니다.

    SELECT * FROM table WHERE id <= 100 AND id < 200 SELECT * FROM table WHERE id <= 200 AND id < 300

    여기에서 part-00000-random_uuid.gz.parquet~part-00008-random_uuid.gz.parquet에 해당하는 9개의 파일이 생성됩니다. 그러나 200~350 사이의 ID가 있는 행이 없으면 완료된 파티션 중 하나가 비어 있게 되고 해당 파티션에 대한 파일이 생성되지 않습니다. 이전 예제에서는 part-00001-random_uuid.gz.parquet이 생성되지 않았습니다.

  • 이전 규칙:

    part-partition_index-random_uuid.format-based_extension

    이는 현재 규칙과 동일하지만 batch_index 접두사는 없습니다. 예를 들면 다음과 같습니다.

    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 Aurora는 데이터를 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 Aurora에서 문자열 변환이 발생했는지를 알려줍니다. 내보낸 기초 데이터는 항상 소스의 데이터와 동일합니다. 그러나 UTF-8에서의 인코딩 차이로 인해 일부 문자는 Athena 같은 도구에서 읽을 때 소스와 다르게 나타날 수 있습니다.

자세한 내용은 Parquet 설명서의 Parquet 논리적 유형 정의를 참고하세요.

Parquet로 MySQL 데이터 유형 매핑

다음 테이블은 데이터를 변환하여 Amazon S3로 내보낼 때 MySQL 데이터 유형에서 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