Amazon S3 for Amazon RDS로 DB 스냅샷 데이터 내보내기 - Amazon Relational Database Service

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

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

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를 참조하세요.

DB 스냅샷을 Amazon S3로 내보내는 방법에 대한 자세한 내용은 다음 주제를 참조하세요.

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

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

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

    기존의 자동 또는 수동 스냅샷을 사용하거나 DB 인스턴스 또는 다중 AZ 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 RDS에서 KMS 키를 사용하는 자세한 방법은 AWS KMS key 관리 단원을 참조하십시오.

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

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

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

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

    정책에서 Amazon RDS에서 S3 버킷으로의 파일 전송을 허용하려면 다음과 같은 필수 작업을 포함시킵니다.

    • s3:PutObject*

    • s3:GetObject*

    • s3:ListBucket

    • s3:DeleteObject*

    • s3:GetBucketLocation

    정책에 다음 리소스를 포함하여 버킷에 있는 S3 버킷과 객체를 식별합니다. 다음 리소스 목록은 Amazon S3에 액세스하기 위한 Amazon 리소스 이름(ARN) 형식을 보여 줍니다.

    • arn:aws:s3:::amzn-s3-demo-bucket

    • arn:aws:s3:::amzn-s3-demo-bucket/*

    Amazon RDS에 대한 IAM 정책을 생성하는 방법에 대한 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 섹션을 참조하세요. IAM 사용 설명서자습서: 첫 번째 고객 관리형 정책 생성 및 연결도 참조하십시오.

    다음 AWS CLI 명령은 이 옵션으로 ExportPolicy라는 IAM 정책을 만듭니다. amzn-s3-demo-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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. 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" } ] }'
  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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }

Amazon S3 내보내기 암호화를 위한 교차 계정 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 버킷으로 DB 스냅샷 내보내기

AWS 계정당 최대 5개의 DB 스냅샷 내보내기 작업을 동시에 수행할 수 있습니다.

참고

RDS 스냅샷 내보내기는 데이터베이스 유형 및 크기에 따라 다소 시간이 걸릴 수 있습니다. 내보내기 작업은 먼저 전체 데이터베이스를 복원하고 크기를 조정하여 Amazon S3로 데이터를 추출합니다. 이 단계 동안의 작업 진행 상황은 Starting으로 표시됩니다. 작업이 S3로 데이터 내보내기로 전환되면 진행 상황이 진행 중(In progress)으로 표시됩니다.

내보내기를 완료하는 데 걸리는 시간은 데이터베이스에 저장된 데이터에 따라 다릅니다. 예를 들어 숫자로 된 기본 키 또는 인덱스 열이 잘 분산되어 있는 테이블은 가장 빠르게 내보냅니다. 분할에 적합한 열을 포함하지 않는 테이블과 문자열 기반 열에 인덱스가 하나만 있는 테이블은 더 오래 걸립니다. 내보내기가 느린 단일 스레드 프로세스를 사용하기 때문에 이렇게 더 긴 내보내기 시간이 발생합니다.

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 DB 스냅샷을 Amazon S3로 내보낼 수 있습니다. DB 스냅샷을 교차 계정 Amazon S3 버킷으로 내보내려면 AWS CLI 또는 RDS API를 사용합니다.

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이고, 이 작업은 스냅샷을 amzn-s3-demo-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 amzn-s3-demo-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 amzn-s3-demo-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

리전 및 버전 사용 가능 여부

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

제한 사항

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

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

  • 마그네틱 스토리지를 사용하는 데이터베이스에서 스냅샷을 내보내는 것은 지원되지 않습니다.

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

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

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

    • 라틴 문자(A–Z)

    • 숫자(0–9)

    • 달러 기호($)

    • 밑줄(_)

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

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

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

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

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

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

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

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

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

  • S3에서 내보낸 스냅샷 데이터를 새 DB 인스턴스로 복원하거나 S3의 스냅샷 데이터를 기존 DB 인스턴스로 가져올 수 없습니다.

  • AWS 계정당 최대 5개의 DB 스냅샷 내보내기 작업을 동시에 수행할 수 있습니다.

  • DB 스냅샷을 교차 계정 Amazon S3 버킷으로 내보내려면 AWS CLI 또는 RDS API를 사용해야 합니다.