Amazon S3 への DB クラスタースナップショットデータのエクスポート - Amazon Aurora

Amazon S3 への DB クラスタースナップショットデータのエクスポート

DB クラスタースナップショットデータを Amazon S3 バケットにエクスポートできます。エクスポートプロセスはバックグラウンドで実行されるため、アクティブな DB クラスターのパフォーマンスには影響しません。

DB クラスタースナップショットをエクスポートすると、Amazon Aurora はスナップショットからデータを抽出して Amazon S3 バケットに保存します。手動スナップショットと自動システムスナップショットをエクスポートできます。デフォルトでは、スナップショット内のすべてのデータがエクスポートされます。ただし、特定のデータベース、スキーマ、またはテーブルのセットをエクスポートすることもできます。

データは Apache Parquet 形式で一貫して圧縮され、保存されます。個々の Parquet ファイルのサイズは通常、1 ~ 10 MB です。

データをエクスポートすると、Amazon Athena や Amazon Redshift Spectrum などのツールを使用して、エクスポートしたデータを直接分析できます。Athena を使用して Parquet データを読み取る方法の詳細については、Amazon Athena ユーザーガイドParquet SerDe を参照してください。Redshift Spectrum を使用して Parquet データを読み取る方法の詳細については、Amazon Redshift Database デベロッパーガイドの「列指向データ形式からの COPY」を参照してください。

機能の可用性とサポートは、各データベースエンジンの特定のバージョンと AWS リージョン によって異なります。S3 への DB クラスタースナップショットデータのエクスポートのバージョンとリージョンの可用性の詳細については、「Amazon S3 へのスナップショットデータのエクスポート」を参照してください。

制限事項

DB スナップショットデータの Amazon S3 へのエクスポートには、次の制限があります。

  • 同じ DB クラスタースナップショットに対して複数のエクスポートタスクを同時に実行することはできません。これは、フルエクスポートと部分エクスポートの両方に当てはまります。

  • Aurora Serverless v1 DB クラスターから S3 にスナップショットデータをエクスポートできません。

  • S3 へのエクスポートでは、コロン (:) を含む S3 プレフィックスをサポートしていません。

  • S3 ファイルパスの次の文字は、エクスポート時にアンダースコア (_) に変換されます。

    \ ` " (space)
  • データベース、スキーマ、またはテーブルの名前に次の文字以外の文字が含まれている場合、部分的なエクスポートはサポートされません。ただし、DB スナップショット全体をエクスポートすることはできます。

    • ラテン文字 (A-Z)

    • 数字 (0-9)

    • ドル記号 ($)

    • 下線 (_)

  • データベーステーブルの列名では、一部の文字と空白文字の使用はサポートされていません。列名に次の文字が含まれるテーブルは、エクスポート時にスキップされます。

    , ; { } ( ) \n \t = (space)
  • 名前にスラッシュ (/) が含まれるテーブルは、エクスポート時にスキップされます。

  • Aurora PostgreSQL の一時テーブルとログに記録されていないテーブルは、エクスポート中にスキップされます。

  • データに BLOB や CLOB などの大きいオブジェクト (500 MB に近いか、それ以上) が含まれている場合、エクスポートは失敗します。

  • テーブルに、2 GB に近いか、それ以上のサイズの大きな行が含まれている場合、そのテーブルはエクスポート時にスキップされます。

  • エクスポートタスクごとに一意の名前を使用することを強くお勧めします。一意のタスク名を使用しない場合、次のエラーメッセージが表示されることがあります。

    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:Encryptkms:Decrypt の両方のアクセス許可を含める必要があります。Amazon Aurora での KMS キーの使用方法の詳細については、「AWS KMS key 管理」を参照してください。

    KMS キーポリシーに deny ステートメントがある場合は、必ず 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 バケットへのスナップショットのエクスポート を参照してください。

Amazon S3 へのアクセスを DB スナップショットタスクに許可するには
  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. IAM ロールを作成して、Aurora がこの IAM ロールがユーザーに代わって Amazon S3 バケットにアクセスすると見なすことができるようにします。詳細については、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 を使用する

AWS KMS keyAmazon S3 エクスポートの暗号化にクロスアカウントを使用できます。まずローカルアカウントにキーポリシーを追加し、次に外部アカウントに IAM ポリシーを追加してください。詳細については、「その他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。

クロスアカウント KMS キーを使用するには
  1. ローカルアカウントにキーポリシーを追加します。

    次の例は、外部アカウント 444455556666 のExampleRoleExampleUserに、ローカルアカウント 123456789012 のアクセス許可を付与します。

    { "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 バケットへのスナップショットのエクスポート

1 つの AWS アカウント につき、最大 5 つの DB スナップショットエクスポートタスクを同時に実行できます。

注記

データベースのタイプとサイズによっては、RDS スナップショットのエクスポートに時間がかかることがあります。エクスポートタスクでは、Amazon S3 にデータを抽出する前に、データベース全体を復元およびスケールします。このフェーズでのタスクの進捗状況は、[起動中] と表示されます。タスクが S3 へのデータのエクスポートに切り替わると、進捗状況は [進行中] と表示されます。

エクスポートが完了するまでにかかる時間は、データベースに格納されているデータによって異なります。例えば、数値のプライマリキーまたはインデックス列が適切に配信されているテーブルは、最も速くエクスポートされます。パーティション化に適した列が含まれていないテーブルや、文字列ベースの列に1つのインデックスしかないテーブルは処理に時間がかかります。エクスポートに低速のシングルスレッドプロセスを使用するため、このような長いエクスポート時間となります。

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 にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[スナップショット] を選択します。

  3. タブから、エクスポートするスナップショットのタイプを選択します。

  4. スナップショットのリストで、エクスポートするスナップショットを選択します。

  5. [アクション] で、[Amazon S3 にエクスポート] を選択します。

    [EAmazon S3 にエクスポート] ウィンドウが表示されます。

  6. [エクスポート識別子] に、エクスポートタスクを識別する名前を入力します。この値は、S3 バケットで作成されるファイルの名前としても使用されます。

  7. エクスポートするデータを選択します。

    • [すべて] を選択すると、スナップショット内のすべてのデータがエクスポートされます。

    • [部分的] を選択すると、スナップショットの特定部分がエクスポートされます。スナップショットのどの部分をエクスポートするかを特定するには、[識別子] に 1 つ以上のデータベース、スキーマ、またはテーブルをスペースで区切って入力します。

      次の形式を使用します。

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

      次に例を示します。

      mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
  8. [S3 バケット] で、エクスポート先のバケットを選択します。

    エクスポートされたデータを S3 バケット内のフォルダパスに割り当てるには、[S3 プレフィックス] にオプションのパスを入力します。

  9. IAM ロール の場合は、選択した S3 バケットへの書き込みアクセスを許可するロールを選択するか、新しいロールを作成します。

    • IAM ロールを使用した Amazon S3 バケットへのアクセスの提供」のステップに従ってロールを作成した場合は、そのロールを選択します。

    • 選択した S3 バケットへの書き込みアクセス権を付与するロールを作成しなかった場合は、[Create a new role] (新しいロールの作成) を選択して、ロールを自動的に作成します。次に、[IAM role name] (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 バケットにエクスポートします。

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-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 のパラレルクエリの使用」を参照してください。

パフォーマンスの最適化を適用すると、Aurora MySQL バージョン 2 と 3 のエクスポート用のかなり大きな (200 GB まで) Parquet ファイルが表示されることもあります。

データ型や値の互換性がないなどの理由で、より高速なエクスポートプロセスを使用できない場合、Aurora はパラレルクエリなしで自動的にシングルスレッドエクスポートモードに切り替わります。使用するプロセスやエクスポートするデータの量に応じて、エクスポートのパフォーマンスは異なります。

スナップショットのエクスポートのモニタリング

DB スナップショットのエクスポートは、AWS Management Console、AWS CLI、または RDS API を使用してモニタリングできます。

DB スナップショットのエクスポートをモニタリングするには
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. ナビゲーションペインで [Exports in Amazon S3] (Amazon S3 にエクスポート) を選択します。

    DB スナップショットのエクスポートは [Source type] (ソースタイプ) 列に表示されます。エクスポートのステータスは [Status] (ステータス) 列に表示されます。

  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 イベント通知の操作」を参照してください。

スナップショットのエクスポートタスクのキャンセル

DB スナップショットのエクスポートタスクをキャンセルするには、AWS Management Console、AWS CLI、または RDS API を使用できます。

注記

スナップショットのエクスポートタスクをキャンセルしても、Amazon S3 にエクスポート済みのデータは削除されません。コンソールを使用してデータを削除する方法については、「S3 バケットからオブジェクトを削除する方法」を参照してください。CLI を使用してデータを削除するには、delete-object コマンドを使用します。

スナップショットのエクスポートタスクをキャンセルするには
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. ナビゲーションペインで [Exports in Amazon S3] (Amazon S3 にエクスポート) を選択します。

    DB スナップショットのエクスポートは [Source type] (ソースタイプ) 列に表示されます。エクスポートのステータスは [Status] (ステータス) 列に表示されます。

  3. キャンセルするスナップショットのエクスポートタスクを選択します。

  4. [キャンセル] を選択します。

  5. 確認ページで [エクスポートタスクをキャンセル] を選択します。

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」を引き受けることができないため、エクスポートタスクのメタデータを書き込めませんでした。

エクスポートタスクは IAM ロールを引き受け、S3 バケットへのメタデータの書き込みが許可されているかどうかを検証します。タスクが IAM ロールを引き受けられない場合は失敗します。

RDS エクスポートで、KMS キー 「キー ID」 を持つ IAM ロール 「ロール ARN」 を使用した S3 バケット 「バケット名」へのエクスポートタスクのメタデータの書き込みに失敗しました。エラーコード:「エラーコード」

1 つ以上のアクセス許可が不足しているため、エクスポートタスクが S3 バケットにアクセスできません。この障害メッセージは、次のいずれかのエラーコードを受信したときにレイズされます。

  • エラーコードAccessDeniedAWSSecurityTokenServiceException

  • エラーコードNoSuchBucketAccessDeniedKMS.KMSInvalidStateException403 Forbidden、またはKMS.DisabledExceptionAmazonS3Exception

これらのエラーコードは、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/

ファイルを名付ける方法には、次の 2 つの規則があります。

  • 現在の規則:

    batch_index/part-partition_index-random_uuid.format-based_extension

    バッチインデックスは、テーブルから読み込まれたデータのバッチを表すシーケンス番号です。テーブルを小さなチャンクに分割し、並列でエクスポートできない場合は、複数のバッチインデックスになります。テーブルが複数のテーブルにパーティション化されている場合にも同じことが起こります。メインテーブルのテーブルパーティションごとに 1 つずつ、複数のバッチインデックスがあります。

    テーブルを小さなチャンクに分割し、並列で読み取ることができない場合は、バッチインデックス 1 フォルダのみになります。

    バッチインデックスフォルダ内には、テーブルのデータを含む 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 つのファイルが生成されます。ただし、200350 の間に ID を持つ行がない場合、完了したパーティションの 1 つが空になり、それに対するファイルも作成されません。前の例では、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 の詳細については、Apache Parquet のウェブサイトを参照してください。

Parquet は、すべてのデータを次のプリミティブ型の 1 つとして格納します。

  • 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 Logical Type Definitions」を参照してください。

MySQL データ型の Parquet へのマッピング

次の表は、データが変換されて 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 を超える 10 進精度をサポートしていません。10 進値は、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

PostgreSQL データ型の Parquet へのマッピング

次の表は、データが変換されて 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 WITH TIME ZONE 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