

# Amazon RDS の Amazon S3 への DB スナップショットデータのエクスポート
<a name="USER_ExportSnapshot"></a>

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

DB スナップショットをエクスポートすると、Amazon RDS はスナップショットからデータを抽出して Amazon S3 バケットに保存します。データは Apache Parquet 形式で一貫して圧縮され、保存されます。

すべてのタイプの DB スナップショット (手動スナップショット、自動システムスナップショット、AWS Backup サービスで作成されたスナップショットなど) をエクスポートできます。デフォルトでは、スナップショット内のすべてのデータがエクスポートされます。ただし、特定のデータベース、スキーマ、またはテーブルのセットをエクスポートすることもできます。

データをエクスポートすると、Amazon Athena や Amazon Redshift Spectrum などのツールを使用して、エクスポートしたデータを直接分析できます。Athena を使用して Parquet データを読み取る方法の詳細については、*Amazon Athena ユーザーガイド* の [Parquet SerDe](https://docs.aws.amazon.com/athena/latest/ug/parquet-serde.html) を参照してください。Redshift Spectrum を使用して Parquet データを読み取る方法の詳細については、[Amazon Redshift Database デベロッパーガイド](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-columnar.html)の「*列指向データ形式からの COPY*」を参照してください。

**警告**  
エクスポートされたスナップショットデータを S3 から新しい DB インスタンスに復元したり、S3 から既存の DB インスタンスにスナップショットデータをインポートしたりすることはできません。ただし、分析のために Amazon Athena または Redshift Spectrum を使用してデータを処理することはできます。さらに、AWS Glue を使用してデータを変換し、AWS DMS やカスタムスクリプトなどのツールを使用して Amazon RDS にインポートできます。

DB スナップショットの Amazon S3 へのエクスポートの詳細については、以下のトピックを参照してください。

**トピック**
+ [Amazon RDS のスナップショットエクスポートのモニタリング](USER_ExportSnapshot.Monitoring.md)
+ [Amazon RDS のスナップショットのエクスポートタスクのキャンセル](USER_ExportSnapshot.Canceling.md)
+ [Amazon RDS の Amazon S3 エクスポートタスクの障害メッセージ](USER_ExportSnapshot.failure-msg.md)
+ [RDS for PostgreSQL のアクセス許可エラーのトラブルシューティング](USER_ExportSnapshot.postgres-permissions.md)
+ [Amazon RDS の Amazon S3 へのエクスポートのファイル命名規則](USER_ExportSnapshot.FileNames.md)
+ [Amazon RDS の Amazon S3 バケットにエクスポートする際のデータ変換](USER_ExportSnapshot.data-types.md)

## スナップショットデータのエクスポートの概要
<a name="USER_ExportSnapshot.Overview"></a>

次のプロセスを使用して、DB スナップショットデータを Amazon S3 バケットにエクスポートします。詳細については、次のセクションを参照してください。

1. エクスポートするスナップショットを特定します。

   既存の自動スナップショットまたは手動スナップショットを使用するか、DB インスタンスまたはマルチ AZ DB クラスターの手動スナップショットを作成します。

1. Amazon S3 バケットへのアクセスを設定します。

   *バケット*とは、Amazon S3 オブジェクトまたはファイルのコンテナです。バケットにアクセスするための情報を指定するには、次のステップに従います。

   1. スナップショットのエクスポート先の S3 バケットを特定します。S3 バケットはスナップショット同じ AWS リージョンに存在する必要があります。詳細については、「[エクスポート先の Amazon S3 バケットの特定](#USER_ExportSnapshot.SetupBucket)」を参照してください。

   1. スナップショットエクスポートタスクに対して S3 バケットへのアクセスを許可する AWS Identity and Access Management (IAM) ロールを作成します。詳細については、「[IAM ロールを使用した Amazon S3 バケットへのアクセスの提供](#USER_ExportSnapshot.SetupIAMRole)」を参照してください。

1. サーバー側の暗号化用の対称暗号化 AWS KMS key を作成します。KMS キーは、エクスポートデータを S3 に書き込むときに AWS KMS サーバー側の暗号化を設定するために、スナップショットエクスポートタスクによって使用されます。

   KMS キーポリシーには、`kms:CreateGrant` と `kms:DescribeKey` の両方のアクセス許可を含める必要があります。Amazon RDS での KMS キーの使用方法の詳細については、「[AWS KMS key 管理](Overview.Encryption.Keys.md)」を参照してください。

   KMS キーポリシーに deny ステートメントがある場合は、必ず AWS サービスプリンシパル `export.rds.amazonaws.com` を明示的に除外してください。

   AWSアカウント内で KMS キーを使用することも、クロスアカウント KMS キーを使用することもできます。詳細については、「[AWS KMS keyAmazon S3 エクスポートの暗号化にクロスアカウントを使用する](#USER_ExportSnapshot.CMK)」を参照してください。

1. コンソールまたは `start-export-task` CLI コマンドを使用して、スナップショットを Amazon S3 にエクスポートします。詳細については、「[Amazon S3 バケットへの DB スナップショットのエクスポート](#USER_ExportSnapshot.Exporting)」を参照してください。

1. Amazon S3 バケット内のエクスポートされたデータにアクセスするには、*Amazon Simple Storage Service ユーザーガイド*の「[オブジェクトのアップロード、ダウンロード、管理](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-download-objects.html)」を参照してください。

## Amazon S3 バケットへのアクセスを設定する
<a name="USER_ExportSnapshot.Setup"></a>

DB スナップショットデータを Amazon S3 ファイルにエクスポートするには、まず Amazon S3 バケットにアクセスするためのアクセス許可をスナップショットに付与します。次に、Amazon S3 バケットへの書き込みを Amazon RDS サービスに許可するための IAM ロールを作成します。

**Topics**
+ [エクスポート先の Amazon S3 バケットの特定](#USER_ExportSnapshot.SetupBucket)
+ [IAM ロールを使用した Amazon S3 バケットへのアクセスの提供](#USER_ExportSnapshot.SetupIAMRole)
+ [クロスアカウント Amazon S3 バケットを使用する](#USER_ExportSnapshot.Setup.XAcctBucket)
+ [AWS KMS keyAmazon S3 エクスポートの暗号化にクロスアカウントを使用する](#USER_ExportSnapshot.CMK)

### エクスポート先の Amazon S3 バケットの特定
<a name="USER_ExportSnapshot.SetupBucket"></a>

DB スナップショットをエクスポートする先の Amazon S3 バケットを特定します。既存の S3 バケットを使用するか、新しい S3 バケットを作成します。

**注記**  
エクスポート先の S3 バケットは、スナップショットと同じ AWS リージョンに存在している必要があります。

Amazon S3 バケットの操作の詳細については、*Amazon Simple Storage Service ユーザーガイド*で次のトピックを参照してください。
+ [S3 バケットのプロパティを表示する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/view-bucket-properties.html)
+ [Amazon S3 バケットのデフォルト暗号化を有効にする方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html)
+ [S3 バケットを作成する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)

### IAM ロールを使用した Amazon S3 バケットへのアクセスの提供
<a name="USER_ExportSnapshot.SetupIAMRole"></a>

DB スナップショットデータを Amazon S3 にエクスポートする前に、スナップショットエクスポートタスクに対して Amazon S3 バケットへの書き込みアクセス権限を付与します。

このアクセス権限を付与するには、バケットへのアクセスを可能にする IAM ポリシーを作成し、次に IAM ロールを作成して、このロールにポリシーをアタッチします。後で IAM ロールをスナップショットエクスポートタスクに割り当てます。

Amazon S3 のその他の管理ツールの詳細については、「*Amazon S3 ユーザーガイド*」の「[Amazon S3 でのアクセスコントロール](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-management.html)」を参照してください。

**重要**  
AWS マネジメントコンソール を使用してスナップショットをエクスポートしようとする場合は、スナップショットをエクスポートするときに IAM ポリシーとロールを自動的に作成するように選択できます。手順については、「[Amazon S3 バケットへの DB スナップショットのエクスポート](#USER_ExportSnapshot.Exporting)」を参照してください。

**Amazon S3 へのアクセスを DB スナップショットタスクに許可するには**

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 ポリシーの作成と使用](UsingWithRDS.IAMDBAuth.IAMPolicy.md)」を参照してください。*IAM ユーザーガイド*の「[チュートリアル: はじめてのカスタマー管理ポリシーの作成とアタッチ](https://docs.aws.amazon.com//IAM/latest/UserGuide/tutorial_managed-policies.html)」も参照してください。

   以下の 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/*"
               ]
           }
       ]
   }'
   ```

1. IAM ロールを作成することで、お客様に代わって Amazon RDS が IAM ロールを引き受け、Amazon S3 バケットにアクセスできるようにします。詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

   以下の例は、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"
          }
        ] 
      }'
   ```

1. 作成した 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 バケットを使用する
<a name="USER_ExportSnapshot.Setup.XAcctBucket"></a>

Amazon S3 バケットはAWSアカウント全体で使用できます。クロスアカウントバケットを使用するには、S3 エクスポートに使用している IAM ロールへのアクセスを許可するバケットポリシーを追加してください。詳細については、「[例 2: クロスアカウントバケット権限を付与するバケット所有者](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)」を参照してください。

次の例のように、バケットポリシーをバケットに添付します。

------
#### [ JSON ]

****  

```
{
    "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/*"
            ]
        }
    ]
}
```

------

### AWS KMS keyAmazon S3 エクスポートの暗号化にクロスアカウントを使用する
<a name="USER_ExportSnapshot.CMK"></a>

AWS KMS keyAmazon S3 エクスポートの暗号化にクロスアカウントを使用できます。まずローカルアカウントにキーポリシーを追加し、次に外部アカウントに IAM ポリシーを追加してください。詳細については、「[その他のアカウントのユーザーに KMS キーの使用を許可する](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)」を参照してください。

**クロスアカウント KMS キーを使用するには**

1. ローカルアカウントにキーポリシーを追加します。

   次の例は、外部アカウント 444455556666 の`ExampleRole`と`ExampleUser`に、ローカルアカウント 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": "*"
   }
   ```

1. 外部アカウントに IAM ポリシーを追加する

   以下の IAM ポリシーの例では、プリンシパルがアカウント 123456789012 の KMS キーを暗号化オペレーションに使用することを許可します。アカウント 444455556666 の`ExampleRole`と`ExampleUser`にこの許可を与えるには、そのアカウントに[ポリシーをアタッチします](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)。

   ```
   {
       "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 スナップショットのエクスポート
<a name="USER_ExportSnapshot.Exporting"></a>

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

**注記**  
データベースのタイプとサイズによっては、RDS スナップショットのエクスポートに時間がかかることがあります。エクスポートタスクでは、Amazon S3 にデータを抽出する前に、データベース全体を復元およびスケールします。このフェーズでのタスクの進捗状況は、[**起動中**] と表示されます。タスクが S3 へのデータのエクスポートに切り替わると、進捗状況は [**進行中**] と表示されます。  
エクスポートが完了するまでにかかる時間は、データベースに格納されているデータによって異なります。例えば、数値のプライマリキーまたはインデックス列が適切に配信されているテーブルは、最も速くエクスポートされます。パーティション化に適した列が含まれていないテーブルや、文字列ベースの列に１つのインデックスしかないテーブルは処理に時間がかかります。エクスポートに低速のシングルスレッドプロセスを使用するため、このような長いエクスポート時間となります。

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して DB スナップショットを Amazon S3 にエクスポートできます。DB スナップショットをクロスアカウント Amazon S3 バケットにエクスポートするには、AWS CLI または RDS API を使用します。

Lambda 関数を使用してスナップショットをエクスポートする場合は、Lambda 関数ポリシーに `kms:DescribeKey` アクションを追加します。詳細については、「[AWS Lambda のアクセス許可](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)」を参照してください。

### コンソール
<a name="USER_ExportSnapshot.ExportConsole"></a>

[**Amazon S3 へのエクスポート**] コンソールオプションは、Amazon S3 にエクスポートできるスナップショットに対してのみ表示されます。スナップショットは、次の理由により、エクスポートに使用できない場合があります。
+ DB エンジンが S3 エクスポートでサポートされていない。
+ DB エンジンのバージョンが S3 エクスポートでサポートされていません。
+ スナップショットを作成した AWS リージョンで S3 エクスポートがサポートされていない。

**DB スナップショットをエクスポートするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

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

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

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

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

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

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

     次の形式を使用します。

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

     次に例を示します。

     ```
     mydatabase mydatabase2.myschema1 mydatabase2.myschema2.mytable1 mydatabase2.myschema2.mytable2
     ```

1. [**S3 バケット**] で、エクスポート先のバケットを選択します。

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

1. **IAM ロール** の場合は、選択した S3 バケットへの書き込みアクセスを許可するロールを選択するか、新しいロールを作成します。
   + 「[IAM ロールを使用した Amazon S3 バケットへのアクセスの提供](#USER_ExportSnapshot.SetupIAMRole)」のステップに従ってロールを作成した場合は、そのロールを選択します。
   + 選択した S3 バケットへの書き込みアクセス権を付与するロールを作成しなかった場合は、**[Create a new role]** (新しいロールの作成) を選択して、ロールを自動的に作成します。次に、**[IAM role name]** (IAM ロール名) にロールの名前を入力します。

1. [**AWS KMS key**] で、エクスポートされたデータの暗号化に使用するキーの ARN を入力します。

1. [**Amazon S3 にエクスポート**] を選択します。

### AWS CLI
<a name="USER_ExportSnapshot.ExportCLI"></a>

AWS CLI を使用して DB スナップショットを Amazon S3 にエクスポートするには、以下の必須オプションを指定して [start-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) コマンドを使用します。
+ `--export-task-identifier` 
+ `--source-arn` 
+ `--s3-bucket-name` 
+ `--iam-role-arn` 
+ `--kms-key-id` 

以下の例では、スナップショットエクスポートタスクは *my\$1snapshot\$1export* と名前が付けられ、スナップショットを *amzn-s3-demo-bucket* という名前の S3 バケットにエクスポートします。

**Example**  
Linux、macOS、Unix の場合:  

```
1. aws rds start-export-task \
2.     --export-task-identifier my-snapshot-export \
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \
4.     --s3-bucket-name amzn-s3-demo-bucket \
5.     --iam-role-arn iam-role \
6.     --kms-key-id my-key
```
Windows の場合:  

```
1. aws rds start-export-task ^
2.     --export-task-identifier my-snapshot-export ^
3.     --source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name ^
4.     --s3-bucket-name amzn-s3-demo-bucket ^
5.     --iam-role-arn iam-role ^
6.     --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](https://docs.aws.amazon.com/cli/latest/reference/rds/start-export-task.html) コマンドに `--s3-prefix` オプションを含めます。

### RDS API
<a name="USER_ExportSnapshot.ExportAPI"></a>

Amazon RDS API を使用して DB スナップショットを Amazon S3 にエクスポートするには、以下の必須パラメータを指定して [StartExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartExportTask.html) オペレーションを使用します。
+ `ExportTaskIdentifier`
+ `SourceArn`
+ `S3BucketName`
+ `IamRoleArn`
+ `KmsKeyId`

## 利用可能なリージョンとバージョン
<a name="USER_ExportSnapshot.RegionVersionAvailability"></a>

機能の可用性とサポートは、各データベースエンジンの特定のバージョンと AWS リージョン によって異なります。S3 へのスナップショットのエクスポートによるバージョンとリージョンの可用性の詳細については、「[Amazon RDS の S3 へのスナップショットデータエクスポートでサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.ExportSnapshotToS3.md)」を参照してください。

## 制限事項
<a name="USER_ExportSnapshot.Limits"></a>

DB スナップショットデータの Amazon S3 へのエクスポートには、次の制限があります。
+ 同じ DB クラスタースナップショットに対して複数のエクスポートタスクを同時に実行することはできません。これは、フルエクスポートと部分エクスポートの両方に当てはまります。
+ 磁気ストレージを使用するデータベースからのスナップショットのエクスポートはサポートされていません。
+ S3 へのエクスポートでは、コロン (:) を含む S3 プレフィックスをサポートしていません。
+ S3 ファイルパスの次の文字は、エクスポート時にアンダースコア (\$1) に変換されます。

  ```
  \ ` " (space)
  ```
+ データベース、スキーマ、またはテーブルの名前に次の文字以外の文字が含まれている場合、部分的なエクスポートはサポートされません。ただし、DB スナップショット全体をエクスポートすることはできます。
  + ラテン文字 (A-Z)
  + 数字 (0-9)
  + ドル記号 (\$1)
  + 下線 (\$1)
+ データベーステーブルの列名では、一部の文字と空白文字の使用はサポートされていません。列名に次の文字が含まれるテーブルは、エクスポート時にスキップされます。

  ```
  , ; { } ( ) \n \t = (space)
  ```
+ 名前にスラッシュ (/) が含まれるテーブルは、エクスポート時にスキップされます。
+ RDS for PostgreSQL の一時テーブルとログに記録されていないテーブルは、エクスポート中にスキップされます。
+ データに BLOB や CLOB などの大きいオブジェクト (500 MB に近いか、それ以上) が含まれている場合、エクスポートは失敗します。
+ テーブルに、2 GB に近いか、それ以上のサイズの大きな行が含まれている場合、そのテーブルはエクスポート時にスキップされます。
+ 部分エクスポートの場合、`ExportOnly` リストの最大サイズは 200 KB です。
+ エクスポートタスクごとに一意の名前を使用することを強くお勧めします。一意のタスク名を使用しない場合、次のエラーメッセージが表示されることがあります。

  ExportTaskAlreadyExistsFault: StartExportTask オペレーションを呼び出すときにエラー (ExportTaskAlreadyExists) が発生しました。ID *xxxxx* のエクスポートタスクは既に存在します。
+ データを S3 にエクスポートしている間はスナップショットを削除できますが、エクスポートタスクが完了するまで、そのスナップショットのストレージコストは引き続き課金されます。
+ エクスポートされたスナップショットデータを S3 から新しい DB インスタンスに復元したり、S3 から既存の DB インスタンスにスナップショットデータをインポートしたりすることはできません。
+ 1 つの AWS アカウント につき、最大 5 つの DB スナップショットエクスポートタスクを同時に実行できます。
+ DB スナップショットをクロスアカウント Amazon S3 バケットにエクスポートするには、AWS CLI または RDS API を使用する必要があります。
+ Amazon RDS のエクスポートタスクが完了したら、同じ DB スナップショットから別のエクスポートタスクが開始されるまで少し待つことが必要な場合があります。
+ ビューまたはマテリアライズドビューをエクスポートすることはできません。
+ RDS から S3 へのエクスポートでは、GuardDuty Malware Protection for S3 のタグベースのアクセスコントロールがサポートされません。

# Amazon RDS のスナップショットエクスポートのモニタリング
<a name="USER_ExportSnapshot.Monitoring"></a>

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

## コンソール
<a name="USER_ExportSnapshot.MonitorConsole"></a>

**DB スナップショットのエクスポートをモニタリングするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Snapshots**] を選択します。

1. スナップショットのエクスポート一覧を表示するには、[**Exports in Amazon S3**] タブを選択します。

1. 特定のスナップショットのエクスポートに関する情報を表示するには、エクスポートタスクを選択します。

## AWS CLI
<a name="USER_ExportSnapshot.MonitorCLI"></a>

AWS CLI を使用して DB スナップショットのエクスポートをモニタリングするには、[describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) コマンドを使用します。

次の例は、すべてのスナップショットのエクスポートに関する最新情報を表示する方法を示しています。

**Example**  

```
 1. aws rds describe-export-tasks
 2. 
 3. {
 4.     "ExportTasks": [
 5.         {
 6.             "Status": "CANCELED",
 7.             "TaskEndTime": "2019-11-01T17:36:46.961Z",
 8.             "S3Prefix": "something",
 9.             "ExportTime": "2019-10-24T20:23:48.364Z",
10.             "S3Bucket": "amzn-s3-demo-bucket",
11.             "PercentProgress": 0,
12.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY",
13.             "ExportTaskIdentifier": "anewtest",
14.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
15.             "TotalExtractedDataInGB": 0,
16.             "TaskStartTime": "2019-10-25T19:10:58.885Z",
17.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:parameter-groups-test"
18.         },
19. {
20.             "Status": "COMPLETE",
21.             "TaskEndTime": "2019-10-31T21:37:28.312Z",
22.             "WarningMessage": "{\"skippedTables\":[],\"skippedObjectives\":[],\"general\":[{\"reason\":\"FAILED_TO_EXTRACT_TABLES_LIST_FOR_DATABASE\"}]}",
23.             "S3Prefix": "",
24.             "ExportTime": "2019-10-31T06:44:53.452Z",
25.             "S3Bucket": "amzn-s3-demo-bucket1",
26.             "PercentProgress": 100,
27.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
28.             "ExportTaskIdentifier": "thursday-events-test", 
29.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
30.             "TotalExtractedDataInGB": 263,
31.             "TaskStartTime": "2019-10-31T20:58:06.998Z",
32.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-31-06-44"
33.         },
34.         {
35.             "Status": "FAILED",
36.             "TaskEndTime": "2019-10-31T02:12:36.409Z",
37.             "FailureCause": "The S3 bucket edgcuc-export isn't located in the current AWS Region. Please, review your S3 bucket name and retry the export.",
38.             "S3Prefix": "",
39.             "ExportTime": "2019-10-30T06:45:04.526Z",
40.             "S3Bucket": "amzn-s3-demo-bucket2",
41.             "PercentProgress": 0,
42.             "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
43.             "ExportTaskIdentifier": "wednesday-afternoon-test",
44.             "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3",
45.             "TotalExtractedDataInGB": 0,
46.             "TaskStartTime": "2019-10-30T22:43:40.034Z",
47.             "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:rds:example-1-2019-10-30-06-45"
48.         }
49.     ]
50. }
```
特定のスナップショットのエクスポートに関する情報を表示するには、`--export-task-identifier` コマンドに `describe-export-tasks` オプションを含めます。出力をフィルタリングするには、`--Filters` オプションを含めます。その他のオプションについては、[ describe-export-tasks](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-export-tasks.html) コマンドを参照してください。

## RDS API
<a name="USER_ExportSnapshot.MonitorAPI"></a>

Amazon RDS API を使用して DB スナップショットのエクスポートに関する情報を表示するには、[DescribeExportTasks](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeExportTasks.html) オペレーションを使用します。

エクスポートワークフローの完了を追跡したり、別のワークフローを開始したりするには、Amazon Simple Notification Service トピックをサブスクライブします。Amazon SNS の詳細については、「[Amazon RDS イベント通知の操作](USER_Events.md)」を参照してください。

# Amazon RDS のスナップショットのエクスポートタスクのキャンセル
<a name="USER_ExportSnapshot.Canceling"></a>

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

**注記**  
スナップショットのエクスポートタスクをキャンセルしても、Amazon S3 にエクスポート済みのデータは削除されません。コンソールを使用してデータを削除する方法については、「[S3 バケットからオブジェクトを削除する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/delete-objects.html)」を参照してください。CLI を使用してデータを削除するには、[delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) コマンドを使用します。

## コンソール
<a name="USER_ExportSnapshot.CancelConsole"></a>

**スナップショットのエクスポートタスクをキャンセルするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

1. [**Exports in Amazon S3**] タブを選択します。

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

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

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

 

## AWS CLI
<a name="USER_ExportSnapshot.CancelCLI"></a>

AWS CLI を使用してスナップショットのエクスポートタスクをキャンセルするには、[cancel-export-task](https://docs.aws.amazon.com/cli/latest/reference/rds/cancel-export-task.html) コマンドを使用します。このコマンドには、`--export-task-identifier` オプションが必要です。

**Example**  

```
 1. aws rds cancel-export-task --export-task-identifier my_export
 2. {
 3.     "Status": "CANCELING", 
 4.     "S3Prefix": "", 
 5.     "ExportTime": "2019-08-12T01:23:53.109Z", 
 6.     "S3Bucket": "amzn-s3-demo-bucket", 
 7.     "PercentProgress": 0, 
 8.     "KmsKeyId": "arn:aws:kms:AWS_Region:123456789012:key/K7MDENG/bPxRfiCYEXAMPLEKEY", 
 9.     "ExportTaskIdentifier": "my_export", 
10.     "IamRoleArn": "arn:aws:iam::123456789012:role/export-to-s3", 
11.     "TotalExtractedDataInGB": 0, 
12.     "TaskStartTime": "2019-11-13T19:46:00.173Z", 
13.     "SourceArn": "arn:aws:rds:AWS_Region:123456789012:snapshot:export-example-1"
14. }
```

## RDS API
<a name="USER_ExportSnapshot.CancelAPI"></a>

Amazon RDS API を使用してスナップショットのエクスポートタスクをキャンセルするには、`ExportTaskIdentifier` パラメータを指定して [CancelExportTask](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CancelExportTask.html) オペレーションを使用します。

# Amazon RDS の Amazon S3 エクスポートタスクの障害メッセージ
<a name="USER_ExportSnapshot.failure-msg"></a>

次の表では、Amazon S3 エクスポートタスクに障害が発生したときに返されるメッセージについて説明します。


| 障害メッセージ | 説明 | 
| --- | --- | 
| 不明な内部エラーが発生しました。 |  不明なエラー、例外、または障害により、タスクが失敗しました。  | 
| エクスポートタスクのメタデータを S3 バケット 「バケット名」 に書き込む際に、不明な内部エラーが発生しました。 |  不明なエラー、例外、または障害により、タスクが失敗しました。  | 
| RDS エクスポートは、IAM ロール「ロール ARN」を引き受けることができないため、エクスポートタスクのメタデータを書き込めませんでした。 |  エクスポートタスクは IAM ロールを引き受け、S3 バケットへのメタデータの書き込みが許可されているかどうかを検証します。タスクが IAM ロールを引き受けられない場合は失敗します。  | 
| RDS エクスポートで、KMS キー 「キー ID」 を持つ IAM ロール 「ロール ARN」 を使用した S3 バケット 「バケット名」へのエクスポートタスクのメタデータの書き込みに失敗しました。エラーコード:「エラーコード」 |  1 つ以上のアクセス許可が不足しているため、エクスポートタスクが S3 バケットにアクセスできません。この障害メッセージは、次のいずれかのエラーコードを受信したときにレイズされます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.failure-msg.html) これらのエラーコードは、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リージョンにあります。 | 

# RDS for PostgreSQL のアクセス許可エラーのトラブルシューティング
<a name="USER_ExportSnapshot.postgres-permissions"></a>

PostgreSQL データベースを Amazon S3 にエクスポートするときに、特定のテーブルがスキップされたことを示す `PERMISSIONS_DO_NOT_EXIST` エラーが表示される場合があります。このエラーは、通常、データベースの作成時に指定したスーパーユーザーが、これらのテーブルにアクセスする許可を持っていない場合に発生します。

このエラーを修正するには、次のコマンドを実行します。

```
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name
```

スーパーユーザー権限の詳細については、「[マスターユーザーアカウント権限](UsingWithRDS.MasterAccounts.md)」を参照してください。

# Amazon RDS の Amazon S3 へのエクスポートのファイル命名規則
<a name="USER_ExportSnapshot.FileNames"></a>

特定のテーブルのエクスポートされたデータは、`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` 列がテーブルのプライマリキーで、その最小値と最大値が `100` と `1000` であるとします。このテーブルを 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 を持つ行がない場合、完了したパーティションの 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 RDS の Amazon S3 バケットにエクスポートする際のデータ変換
<a name="USER_ExportSnapshot.data-types"></a>

DB スナップショットを Amazon S3 バケットにエクスポートすると、Amazon RDS はデータを Parquet 形式に変換してエクスポートし、保存します。Parquet の詳細については、[Apache Parquet](https://parquet.apache.org/docs/) のウェブサイトを参照してください。

Parquet は、すべてのデータを次のプリミティブ型の 1 つとして格納します。
+ BOOLEAN
+ INT32
+ INT64
+ INT96
+ FLOAT
+ DOUBLE
+ BYTE\$1ARRAY - バイナリとも呼ばれる可変長のバイト配列
+ FIXED\$1LEN\$1BYTE\$1ARRAY - 値が一定のサイズを持つ場合に使用される固定長のバイト配列

Parquet のデータ型はほとんど存在せず、この形式の読み書きに伴う複雑さが軽減されるようになっています。Parquet は、プリミティブ型を拡張するための論理的な型を提供します。*論理的な型*は、`LogicalType` メタデータフィールドにデータを持つ注釈として実装されます。論理的な型の注釈は、プリミティブ型の解釈方法を示します。

`STRING` 論理的な型が `BYTE_ARRAY` 型に注釈を付けた場合は、このバイト配列を UTF-8 でエンコードされた文字列として解釈する必要があることを示します。エクスポートタスクが完了すると、Amazon RDS は文字列変換が発生したかどうかを通知します。エクスポートされた基になるデータは、常に送信元データと同じです。ただし、UTF-8 のエンコーディングに伴う差異により、Athena などのツールで読み取ると、一部の文字はソースと異なるように表示される場合があります。

詳細については、Parquet ドキュメントの「[Parquet Logical Type Definitions](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md)」を参照してください。

**Topics**
+ [MySQL およびMariaDB データ型の Parquet へのマッピング](#USER_ExportSnapshot.data-types.MySQL)
+ [PostgreSQL データ型の Parquet へのマッピング](#USER_ExportSnapshot.data-types.PostgreSQL)

## MySQL およびMariaDB データ型の Parquet へのマッピング
<a name="USER_ExportSnapshot.data-types.MySQL"></a>

次の表は、データが変換されて Amazon S3 にエクスポートされる際の MySQL および MariaDB データ型から Parquet データ型へのマッピングを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.data-types.html)

## PostgreSQL データ型の Parquet へのマッピング
<a name="USER_ExportSnapshot.data-types.PostgreSQL"></a>

次の表は、データが変換されて Amazon S3 にエクスポートされる際の PostgreSQL データ型から Parquet データ型へのマッピングを示しています。


| PostgreSQL のデータ型 | Parquet プリミティブ型 | 論理的な型の注釈 | マッピングに関するメモ | 
| --- | --- | --- | --- | 
| 数値データ型 | 
| BIGINT | INT64 |  |   | 
| BIGSERIAL | INT64 |  |   | 
| DECIMAL | BYTE\$1ARRAY | STRING | DECIMAL 型は BYTE\$1ARRAY 型の文字列に変換され、UTF8 としてエンコードされます。この変換は、データ精度や、数値ではないデータ値 (NaN) に伴う複雑さを回避するためのものです。 | 
| DOUBLE PRECISION | DOUBLE |  |   | 
| INTEGER | INT32 |  |   | 
| MONEY | BYTE\$1ARRAY | STRING |   | 
| REAL | FLOAT |  |   | 
| SERIAL | INT32 |  |   | 
| SMALLINT | INT32 | INT(16, true) |   | 
| SMALLSERIAL | INT32 | INT(16, true) |   | 
| 文字列および関連データ型 | 
| ARRAY | BYTE\$1ARRAY | STRING |  配列は文字列に変換され、BINARY (UTF8) としてエンコードされます。 この変換は、データ精度、数値ではないデータ値 (NaN)、および時間データ値に伴う複雑さを回避するためのものです。  | 
| BIT | BYTE\$1ARRAY | STRING |   | 
| BIT VARYING | BYTE\$1ARRAY | STRING |   | 
| BYTEA | BINARY |  |   | 
| CHAR | BYTE\$1ARRAY | STRING |   | 
| CHAR(N) | BYTE\$1ARRAY | STRING |   | 
| ENUM | BYTE\$1ARRAY | STRING |   | 
| NAME | BYTE\$1ARRAY | STRING |   | 
| TEXT | BYTE\$1ARRAY | STRING |   | 
| TEXT SEARCH | BYTE\$1ARRAY | STRING |   | 
| VARCHAR(N) | BYTE\$1ARRAY | STRING |   | 
| XML | BYTE\$1ARRAY | STRING |   | 
| 日付と時刻のデータ型 | 
| DATE | BYTE\$1ARRAY | STRING |   | 
| INTERVAL | BYTE\$1ARRAY | STRING |   | 
| TIME | BYTE\$1ARRAY | STRING |  | 
| TIME WITH TIME ZONE | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP | BYTE\$1ARRAY | STRING |  | 
| TIMESTAMP WITH TIME ZONE | BYTE\$1ARRAY | STRING |  | 
| ジオメトリデータ型 | 
| BOX | BYTE\$1ARRAY | STRING |   | 
| CIRCLE | BYTE\$1ARRAY | STRING |   | 
| LINE | BYTE\$1ARRAY | STRING |   | 
| LINESEGMENT | BYTE\$1ARRAY | STRING |   | 
| PATH | BYTE\$1ARRAY | STRING |   | 
| POINT | BYTE\$1ARRAY | STRING |   | 
| POLYGON | BYTE\$1ARRAY | STRING |   | 
| JSON データ型 | 
| JSON | BYTE\$1ARRAY | STRING |   | 
| JSONB | BYTE\$1ARRAY | STRING |   | 
| その他のデータ型 | 
| BOOLEAN | BOOLEAN |  |   | 
| CIDR | BYTE\$1ARRAY | STRING |  ネットワークデータ型 | 
| COMPOSITE | BYTE\$1ARRAY | STRING |   | 
| DOMAIN | BYTE\$1ARRAY | STRING |   | 
| INET | BYTE\$1ARRAY | STRING |  ネットワークデータ型 | 
| MACADDR | BYTE\$1ARRAY | STRING |   | 
| OBJECT IDENTIFIER | 該当なし |  |  | 
| PG\$1LSN | BYTE\$1ARRAY | STRING |   | 
| RANGE | BYTE\$1ARRAY | STRING |   | 
| UUID | BYTE\$1ARRAY | STRING |   | 