

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon QLDB からのジャーナルデータのエクスポート
<a name="export-journal"></a>

**重要**  
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了まで Amazon QLDB を使用できます。詳細については、[「Amazon QLDB 台帳を Amazon Aurora PostgreSQL に移行する](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)」を参照してください。

Amazon QLDB では、イミュータブルトランザクションログ (**ジャーナル) をデータストレージに使用します。ジャーナルは、コミット済みデータへの変更をすべて追跡し、完全かつ検証可能な変更履歴を一定の期間にわたって維持します。

台帳のジャーナルのコンテンツには、分析、監査、データ保持、検証、他のシステムへのエクスポートなど、さまざまな目的でアクセスできます。以下のトピックでは、ジャーナル[ブロック](journal-contents.md)を、台帳から AWS アカウントの Amazon Simple Storage Service (Amazon S3) バケットにエクスポートする方法について説明します。ジャーナルエクスポートジョブは、[Amazon Ion](ion.md) 形式のテキストまたはバイナリ表現、または JSON Lines テキスト形式のオブジェクトとして Amazon S3 にデータを書き込みます。

JSON Lines 形式では、エクスポートされたデータオブジェクトの各ブロックは、改行で区切られた有効な JSON オブジェクトです。この形式を使用して、JSON エクスポートを Amazon Athena などの分析ツールと直接統合できます。 AWS Glue これらのサービスは改行で区切られた JSON を自動的に解析できるためです。形式の詳細については、[JSON Lines](https://jsonlines.org/) を参照してください。

Amazon S3 に関する詳細は、「[Amazon Simple Storage Service ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)」を参照してください。

**注記**  
エクスポートジョブの出力形式として JSON を指定すると、QLDB はエクスポートされたデータオブジェクトの Ion ジャーナルデータを JSON にダウンコンバートします。詳細については、「[JSON へのダウンコンバート](export-journal.output.md#export-journal.output.json)」を参照してください。

**Topics**
+ [

# QLDB でのジャーナルエクスポートのリクエスト
](export-journal.request.md)
+ [

# QLDB のジャーナルエクスポート出力
](export-journal.output.md)
+ [

# QLDB のジャーナルエクスポート権限
](export-journal.perms.md)
+ [

# ジャーナルエクスポートの一般的なエラー
](export-journal.errors.md)

# QLDB でのジャーナルエクスポートのリクエスト
<a name="export-journal.request"></a>

**重要**  
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了まで Amazon QLDB を使用できます。詳細については、[「Amazon QLDB 台帳を Amazon Aurora PostgreSQL に移行する](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)」を参照してください。

Amazon QLDB は、指定した日時範囲で指定した Amazon S3 バケット送信先へのジャーナルブロックエクスポートをリクエストするための API を提供します。ジャーナルエクスポートジョブは、[Amazon Ion](ion.md) 形式のテキストまたはバイナリ表現、または [JSON Lines](https://jsonlines.org/) テキスト形式でデータオブジェクトを書き込むことができます。 AWS マネジメントコンソール、 AWS SDK、または AWS Command Line Interface （AWS CLI) を使用してエクスポートジョブを作成できます。

**Topics**
+ [

## AWS マネジメントコンソール
](#export-journal.request.con)
+ [

## QLDB API
](#export-journal.request.api)
+ [

## エクスポートジョブの有効期限
](#export-journal.request.expiration)

## AWS マネジメントコンソール
<a name="export-journal.request.con"></a>

QLDB コンソールを使用して QLDB でジャーナルエクスポートリクエストを送信するには、以下の手順に従います。

**エクスポートをリクエストするには (コンソール)**

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

1. ナビゲーションペインの [**Export (エクスポート)**] を選択します。

1. [**Create export job (エクスポートジョブの作成)**] を選択します。

1. [**Create export job (エクスポートジョブの作成)**] ページで、次のエクスポート設定を入力します。
   + **[Ledger]** (台帳) – エクスポートするジャーナルブロックを含む台帳。
   + **[Start date and time]** (開始日時) – エクスポートするジャーナルブロックの範囲の開始タイムスタンプ (UTC、協定世界時)。この日時は範囲内に含まれます。このタイムスタンプは、[**End date and time (終了日時)**] よりも前の日時にしてください。タイムスタンプの開始日時を台帳の `CreationDateTime` 以前に指定した場合、QLDB によって開始日時が台帳の `CreationDateTime` にデフォルト設定されます。
   + **[End date and time]** (終了日時) – エクスポートするジャーナルブロックの範囲の終了タイムスタンプ (UTC、協定世界時)。この日時は範囲内に含まれません。現在の日時よりも先の日時を指定することはできません。
   + **[Destination for journal blocks]** (ジャーナルブロックの送信先) – エクスポートジョブでデータオブジェクトに書き込む Simple Storage Service (Amazon S3) バケット名とプレフィックス名。次の Simple Storage Service (Amazon S3) URI 形式を使用します。

     ```
     s3://amzn-s3-demo-qldb-cloudtrail/prefix/
     ```

     出力するオブジェクトの S3 バケット名とオプションのプレフィックス名を指定してください。以下に例を示します。

     ```
     s3://amzn-s3-demo-qldb-cloudtrail/journalExport/
     ```

     バケット名とプレフィックスは Simple Storage Service (Amazon S3) の命名規則と表記規則に準拠する必要があります。バケット命名規則の詳細については、「Amazon S3 デベロッパーガイド**」の「[バケットの制約と制限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」を参照してください。キー名のプレフィックスの詳細については、「[オブジェクトキーとメタデータ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html)」を参照してください。
**注記**  
クロスリージョンエクスポートはサポートされていません。指定された Amazon S3 バケットは、台帳 AWS リージョン と同じ にある必要があります。
   + **[S3 Encryption Configuration]** (S3 暗号化設定) – Simple Storage Service (Amazon S3) バケットにデータを書き込むエクスポートジョブで使用される暗号化設定。Simple Storage Service (Amazon S3) のサーバー側の暗号化オプションの詳細については、「Amazon S3 デベロッパーガイド**」の「[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)」を参照してください。
     + **[Bucket default encryption]** (バケットのデフォルト暗号化) – 指定した Simple Storage Service (Amazon S3) バケットのデフォルトの暗号化設定を使用します。
     + **[AES-256]** ‐ Simple Storage Service (Amazon S3) マネージドキーによるサーバー側の暗号化 (SSE-S3) を使用します。
     + **AWS-KMS** – AWS KMS マネージドキーによるサーバー側の暗号化 (SSE-KMS) を使用します。

       このタイプとともに、**[異なる AWS KMS keyキーを選択]** オプションを選択した場合は、次の Amazon リソースネーム (ARN) 形式で対称暗号化 KMS キーも指定する必要があります。

       ```
       arn:aws:kms:aws-region:account-id:key/key-id
       ```
   + **[Service access]** (サービスへのアクセス) — Simple Storage Service (Amazon S3) バケットへの書き込みアクセス許可を QLDB に付与する IAM ロール。該当する場合、この IAM ロールによって、KMS キーを使用するためのアクセス許可も QLDB に付与する必要があります。

     *ジャーナルエクスポートをリクエストするときに QLDB にロールを渡すには、IAM ロールリソースで `iam:PassRole` アクションを実行するためのアクセス許可が必要です。*
     + **[Create and use a new service role]** (新しいサービスロールを作成して使用する) - 指定された Simple Storage Service (Amazon S3) バケットに必要なアクセス許可を持つ新しいロールをコンソールで作成できます。
     + **[Use an existing service role]** (既存のサービスロールを使用する) - IAM でこのロールを手動で作成する方法については、「[エクスポートアクセス許可](export-journal.perms.md)」を参照してください。
   + **出力形式** – エクスポートされたジャーナルデータの出力形式
     + **Ion テキスト** – (デフォルト) Amazon Ion のテキスト表現
     + **Ion バイナリ** – Amazon Ion のバイナリ表現
     + **JSON** – 改行で区切られた JSON テキスト形式

       JSON を選択した場合、QLDB はエクスポートされたデータオブジェクトの Ion ジャーナルデータを JSON にダウンコンバートします。詳細については、「[JSON へのダウンコンバート](export-journal.output.md#export-journal.output.json)」を参照してください。

1. すべての設定が正しいことを確認したら、[**Create export job (エクスポートジョブの作成)**] を選択します。

   エクスポートジョブにかかる時間はデータの大きさにより異なります。リクエストの送信が正常に完了すると、コンソールがメインの [**Export (エクスポート)**] ページに戻り、エクスポートジョブが最新のステータスで一覧表示されます。

1. エクスポートオブジェクトは Simple Storage Service (Amazon S3) コンソールで確認できます。

   Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

   これらの出力オブジェクトの形式の詳細については、「[QLDB のジャーナルエクスポート出力](export-journal.output.md)」を参照してください。

**注記**  
エクスポートジョブは、完了後 7 日で期限切れになります。詳細については、「[エクスポートジョブの有効期限](#export-journal.request.expiration)」を参照してください。

## QLDB API
<a name="export-journal.request.api"></a>

 AWS SDK または で Amazon QLDB API を使用してジャーナルエクスポートをリクエストすることもできます AWS CLI。QLDB API は、アプリケーションプログラムで使用する、以下のオペレーションを提供します。
+ `ExportJournalToS3` – 日時範囲内のジャーナル内容を、特定の台帳から指定先の Simple Storage Service (Amazon S3) バケットにエクスポートします。エクスポートジョブは、Amazon Ion 形式のテキストまたはバイナリ表現、または JSON Lines テキスト形式のいずれかのオブジェクトとしてデータを書き込むことができます。
+ `DescribeJournalS3Export` – ジャーナルエクスポートジョブに関する詳細情報を返します。出力には、現在のステータス、作成時刻、および元のエクスポートリクエストのパラメータが含まれます。
+ `ListJournalS3Exports` – 現在の AWS アカウント およびリージョンに関連付けられているすべての台帳について、ジャーナルエクスポートジョブの説明のリストを返します。各エクスポートジョブの説明の出力は、`DescribeJournalS3Export` から返される詳細と同じ内容です。
+ `ListJournalS3ExportsForLedger` – 特定の台帳について、ジャーナルエクスポートジョブの説明のリストを返します。各エクスポートジョブの説明の出力は、`DescribeJournalS3Export` から返される詳細と同じ内容です。

これらの API オペレーションの詳細については、[Amazon QLDB API リファレンス](api-reference.md) を参照してください。

を使用したジャーナルデータのエクスポートについては AWS CLI、[AWS CLI 「 コマンドリファレンス](https://docs.aws.amazon.com/cli/latest/reference/qldb/index.html)」を参照してください。

### サンプルアプリケーション (Java)
<a name="export-journal.request.api.sample"></a>

基本的なエクスポート操作の Java コードの例については、GitHub リポジトリ [aws-samples/amazon-qldb-dmv-sample-java](https://github.com/aws-samples/amazon-qldb-dmv-sample-java) を参照してください。このサンプルアプリケーションをダウンロードしてインストールする方法については、「[Amazon QLDB Java サンプルアプリケーションのインストール](sample-app.java.md)」を参照してください。エクスポートをリクエストする前に、「[Java チュートリアル](getting-started.java.tutorial.md)」のステップ 1～3 を実行し、サンプル台帳を作成して、サンプルデータを使用してロードしてください。

以下のクラスのチュートリアルコードは、エクスポートの作成、エクスポートのステータスの確認、およびエクスポートの出力の処理の例を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/qldb/latest/developerguide/export-journal.request.html)

## エクスポートジョブの有効期限
<a name="export-journal.request.expiration"></a>

完了したジャーナルエクスポートジョブには、7 日間の保持期間が適用されます。この制限の有効期限が切れると、自動的にハード削除されます。この有効期限はハード制限であり、変更できません。

完了したエクスポートジョブが削除されると、QLDB コンソールまたは次の API オペレーションを使用してジョブに関するメタデータを取得できなくなります。
+ `DescribeJournalS3Export`
+ `ListJournalS3Exports`
+ `ListJournalS3ExportsForLedger`

ただし、この有効期限は、エクスポートされたデータ自体には影響しません。すべてのメタデータは、エクスポートによって書き込まれたマニフェストファイルに保持されています。この有効期限の目的は、ジャーナルエクスポートジョブを一覧表示する API オペレーションの円滑なエクスペリエンスを提供することです。QLDB では、複数ページのジョブを解析しなくても済むように、古いエクスポートジョブが削除され最近のエクスポートのみが表示されます。

# QLDB のジャーナルエクスポート出力
<a name="export-journal.output"></a>

**重要**  
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了まで Amazon QLDB を使用できます。詳細については、[「Amazon QLDB 台帳を Amazon Aurora PostgreSQL に移行する](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)」を参照してください。

Amazon QLDB ジャーナルエクスポートジョブでは、ジャーナルブロックを含むデータオブジェクトに加え、2 つのマニフェストファイルが書き出されます。これらはすべて、[エクスポートリクエスト](export-journal.request.md)で指定した Amazon S3 バケットに保存されます。以下のセクションでは、各出力オブジェクトの形式と内容について説明します。

**注記**  
エクスポートジョブの出力形式として JSON を指定すると、QLDB はエクスポートされたデータオブジェクトの Amazon Ion ジャーナルデータを JSON にダウンコンバートします。詳細については、「[JSON へのダウンコンバート](#export-journal.output.json)」に進んでください。

**Topics**
+ [

## マニフェストファイル
](#export-journal.output.manifest)
+ [

## データオブジェクト
](#export-journal.output.data)
+ [

## JSON へのダウンコンバート
](#export-journal.output.json)
+ [

## エクスポートプロセッサライブラリ (Java)
](#export-journal.output.processor)

## マニフェストファイル
<a name="export-journal.output.manifest"></a>

Amazon QLDB では、エクスポートリクエストごとに、指定した S3 バケットに 2 つのマニフェストファイルが作成されます。エクスポートリクエストを送信するとすぐに、*最初のマニフェスト*ファイルが作成されます。エクスポートが完了したら、*最終的なマニフェスト*ファイルが書き出されます。これらのファイルを使用して、Simple Storage Service (Amazon S3) のエクスポートジョブのステータスを確認できます。

マニフェストファイルの内容の形式は、エクスポートで要求された出力形式に対応しています。

### 最初のマニフェスト
<a name="export-journal.output.manifest.initial"></a>

最初のマニフェストでは、エクスポートジョブが開始したことを示します。このマニフェストには、リクエストに渡した入力パラメータが含まれます。エクスポートの Simple Storage Service (Amazon S3) 送信先、エクスポート用の開始時間パラメータや終了時間パラメータに加え、このファイルには `exportId` も含まれます。`exportId` は、QLDB が各エクスポートジョブに割り当てる、一意の ID です。

このファイルの命名規則は次のとおりです。

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.started.manifest
```

以下は、Ion テキスト形式の最初のマニフェストファイルとその内容の例です。

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/8UyXulxccYLAsbN1aon7e4.started.manifest
```

```
{
  ledgerName:"my-example-ledger",
  exportId:"8UyXulxccYLAsbN1aon7e4",
  inclusiveStartTime:2019-04-15T00:00:00.000Z,
  exclusiveEndTime:2019-04-15T22:00:00.000Z,
  bucket:"amzn-s3-demo-qldb-cloudtrail",
  prefix:"journalExport",
  objectEncryptionType:"NO_ENCRYPTION",
  outputFormat:"ION_TEXT"
}
```

初期のマニフェストには、エクスポートリクエストで指定された場合のみ、`outputFormat` が含まれます。出力形式を指定しない場合、エクスポートされたデータはデフォルトの `ION_TEXT` 形式 になります。

[DescribeJournals3Export](https://docs.aws.amazon.com/qldb/latest/developerguide/API_DescribeJournalS3Export.html) API オペレーションとエクスポートされた Amazon S3 オブジェクトのコンテンツタイプも出力形式を示します。

### 最終的なマニフェスト
<a name="export-journal.output.manifest.final"></a>

最終的なマニフェストは、特定のジャーナル*ストランド*のエクスポートジョブが完了したことを示します。エクスポートジョブでは、ストランドごとに個別に最終的なマニフェストファイルが書き出されます。

**注記**  
Amazon QLDB で、ストランドは台帳のジャーナルの仕切りです。QLDB は現在、単一ストランドのジャーナルのみをサポートしています。

最終的なマニフェストには、エクスポート中に書き出されたデータオブジェクトキーの順序付きリストが含まれます。このファイルの命名規則は次のとおりです。

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/exportId.strandId.completed.manifest
```

`strandId` は、QLDB がストランドに割り当てる一意の ID です。以下は、Ion テキスト形式の最終的なマニフェストファイルとその内容の例です。

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/8UyXulxccYLAsbN1aon7e4.JdxjkR9bSYB5jMHWcI464T.completed.manifest
```

```
{
  keys:[
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-4.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.5-10.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.11-12.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.13-20.ion",
    "2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.21-21.ion"
  ]
}
```

## データオブジェクト
<a name="export-journal.output.data"></a>

Amazon QLDB は、指定された Amazon S3 バケットに Amazon Ion 形式のバイナリ表現または JSON Lines テキスト形式で、ジャーナルデータオブジェクトを書き込みます。

JSON Lines 形式では、エクスポートされたデータオブジェクトの各ブロックは、改行で区切られた有効な JSON オブジェクトです。この形式を使用して、JSON エクスポートを Amazon Athena などの分析ツールと直接統合できます。 AWS Glue これらのサービスは改行で区切られた JSON を自動的に解析できるためです。形式の詳細については、[JSON Lines](https://jsonlines.org/) を参照してください。

### データオブジェクト名
<a name="export-journal.output.data.filename"></a>

ジャーナルエクスポートジョブでは、以下の命名規則に従ってこれらのデータオブジェクトが書き込まれます。

```
s3://amzn-s3-demo-qldb-cloudtrail/prefix/yyyy/mm/dd/hh/strandId.startSn-endSn.ion|.json
```
+ 各エクスポートジョブの出力データはチャンクに分割されます。
+ `yyyy/mm/dd/hh` – エクスポートリクエストを送信したときの日時。同じ時間内にエクスポートされたオブジェクトは、同じ Simple Storage Service (Amazon S3) プレフィックスにグループ分けされます。
+ `strandId` – エクスポートされるジャーナルブロックを含む特定のストランドの一意の ID。
+ `startSn-endSn` – オブジェクトに含まれるシーケンス番号の範囲。シーケンス番号は、ストランド内のブロックの場所を指定します。

たとえば、次のパスを指定するとします。

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/
```

エクスポートジョブで、次のような Simple Storage Service (Amazon S3) データオブジェクトが作成されます。この例では、オブジェクト名を Ion 形式で示しています。

```
s3://amzn-s3-demo-qldb-cloudtrail/journalExport/2019/04/15/22/JdxjkR9bSYB5jMHWcI464T.1-5.ion
```

### データオブジェクトのコンテンツ
<a name="export-journal.output.data.contents"></a>

各データオブジェクトには、以下の形式のジャーナルブロックオブジェクトが含まれます。

```
{
  blockAddress: {
    strandId: String,
    sequenceNo: Int
  },
  transactionId: String,
  blockTimestamp: Datetime,
  blockHash: SHA256,
  entriesHash: SHA256,
  previousBlockHash: SHA256,
  entriesHashList: [ SHA256 ],
  transactionInfo: {
    statements: [
      {
        //PartiQL statement object
      }
    ],
    documents: {
      //document-table-statement mapping object
    }
  },
  revisions: [
    {
      //document revision object
    }
  ]
}
```

*ブロック*は、トランザクション中にジャーナルにコミットされるオブジェクトです。ブロックには、トランザクションでコミットされたドキュメントリビジョンを表すエントリと、それらを実行した [PartiQL](ql-reference.md) ステートメントと共に、トランザクションのメタデータが含まれます。

以下に、Ion テキスト形式のサンプルデータを含むブロックの例を示します。ブロックオブジェクトのフィールドの詳細については、「[Amazon QLDB のジャーナルコンテンツ](journal-contents.md)」を参照してください。

**注記**  
このブロック例は、情報提供のみを目的として記載されています。示されているハッシュは、実際に計算されたハッシュ値ではありません。

```
{
  blockAddress:{
    strandId:"JdxjkR9bSYB5jMHWcI464T",
    sequenceNo:1234
  },
  transactionId:"D35qctdJRU1L1N2VhxbwSn",
  blockTimestamp:2019-10-25T17:20:21.009Z,
  blockHash:{{WYLOfZClk0lYWT3lUsSr0ONXh+Pw8MxxB+9zvTgSvlQ=}},
  entriesHash:{{xN9X96atkMvhvF3nEy6jMSVQzKjHJfz1H3bsNeg8GMA=}},
  previousBlockHash:{{IAfZ0h22ZjvcuHPSBCDy/6XNQTsqEmeY3GW0gBae8mg=}},
  entriesHashList:[
      {{F7rQIKCNn0vXVWPexilGfJn5+MCrtsSQqqVdlQxXpS4=}},
      {{C+L8gRhkzVcxt3qRJpw8w6hVEqA5A6ImGne+E7iHizo=}}
  ],
  transactionInfo:{
    statements:[
      {
        statement:"CREATE TABLE VehicleRegistration",
        startTime:2019-10-25T17:20:20.496Z,
        statementDigest:{{3jeSdejOgp6spJ8huZxDRUtp2fRXRqpOMtG43V0nXg8=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (VIN)",
        startTime:2019-10-25T17:20:20.549Z,
        statementDigest:{{099D+5ZWDgA7r+aWeNUrWhc8ebBTXjgscq+mZ2dVibI=}}
      },
      {
        statement:"CREATE INDEX ON VehicleRegistration (LicensePlateNumber)",
        startTime:2019-10-25T17:20:20.560Z,
        statementDigest:{{B73tVJzVyVXicnH4n96NzU2L2JFY8e9Tjg895suWMew=}}
      },
      {
        statement:"INSERT INTO VehicleRegistration ?",
        startTime:2019-10-25T17:20:20.595Z,
        statementDigest:{{ggpon5qCXLo95K578YVhAD8ix0A0M5CcBx/W40Ey/Tk=}}
      }
    ],
    documents:{
      '8F0TPCmdNQ6JTRpiLj2TmW':{
        tableName:"VehicleRegistration",
        tableId:"BPxNiDQXCIB5l5F68KZoOz",
        statements:[3]
      }
    }
  },
  revisions:[
    {
      hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}}
    },
    {
      blockAddress:{
        strandId:"JdxjkR9bSYB5jMHWcI464T",
        sequenceNo:1234
      },
      hash:{{t8Hj6/VC4SBitxnvBqJbOmrGytF2XAA/1c0AoSq2NQY=}},
      data:{
        VIN:"1N4AL11D75C109151",
        LicensePlateNumber:"LEWISR261LL",
        State:"WA",
        City:"Seattle",
        PendingPenaltyTicketAmount:90.25,
        ValidFromDate:2017-08-21,
        ValidToDate:2020-05-11,
        Owners:{
          PrimaryOwner:{
            PersonId:"GddsXfIYfDlKCEprOLOwYt"
          },
          SecondaryOwners:[]
        }
      },
      metadata:{
        id:"8F0TPCmdNQ6JTRpiLj2TmW",
        version:0,
        txTime:2019-10-25T17:20:20.618Z,
        txId:"D35qctdJRU1L1N2VhxbwSn"
      }
    }
  ]
}
```

`revisions` フィールドには、`hash` 値のみを含み、その他の属性を含まないリビジョンオブジェクトもあります。これらは、ユーザーデータを含まない内部のみのシステムリビジョンです。これらのリビジョンのハッシュはジャーナルのハッシュチェーン全体の一部であるため、エクスポートジョブでは、これらのリビジョンが対応するブロックに含まれます。暗号検証には、完全なハッシュチェーンが必要です。

## JSON へのダウンコンバート
<a name="export-journal.output.json"></a>

エクスポートジョブの出力形式として JSON を指定すると、QLDB はエクスポートされたデータオブジェクトの Amazon Ion ジャーナルデータを JSON にダウンコンバートします。ただし、JSON にないリッチ Ion 型をデータで使用している特定のケースでは、Ion を JSON に変換するとデータが劣化する可能性があります。

Ion から JSON への変換ルールの詳細については、「Amazon Ion Cookbook**」(Amazon Ion クックブック) の「[Down-converting to JSON](https://amzn.github.io/ion-docs/guides/cookbook.html#down-converting-to-json)」(JSON へのダウンコンバート) を参照してください。

## エクスポートプロセッサライブラリ (Java)
<a name="export-journal.output.processor"></a>

QLDB は、Amazon S3 でのエクスポート処理を効率化する Java 用の拡張可能なフレームワークを提供します。このフレームワークライブラリは、エクスポートの出力を読み取り、エクスポートされたブロックを順番に反復処理します。このエクスポートプロセッサを使用するには、GitHub リポジトリ [awslabs/amazon-qldb-export-processor-java](https://github.com/awslabs/amazon-qldb-export-processor-java) を参照してください。

# QLDB のジャーナルエクスポート権限
<a name="export-journal.perms"></a>

**重要**  
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了まで Amazon QLDB を使用できます。詳細については、[「Amazon QLDB 台帳を Amazon Aurora PostgreSQL に移行する](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)」を参照してください。

Amazon QLDB でジャーナルエクスポートリクエストを送信する前に、指定した Amazon S3 バケットへの書き込みアクセス許可を QLDB に付与する必要があります。Amazon S3 バケットのカスタマーマネージド AWS KMS key をエクスポートジョブのオブジェクト暗号化タイプに選択する場合は、指定した対称暗号化キーを使用するためのアクセス許可を QLDB に付与する必要もあります。Simple Storage Service (Amazon S3) は[非対称 KMS キー](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)をサポートしていません。

エクスポートジョブに必要なアクセス許可を提供するために、QLDB が適切なアクセス許可ポリシーを持つ IAM サービスロールを引き受けるようにすることができます。サービスロールとは、サービスがユーザーに代わってアクションを実行するために引き受ける [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、「*IAM ユーザーガイド*」の「[AWS のサービスに許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

**注記**  
ジャーナルエクスポートをリクエストするときに QLDB にロールを渡すには、IAM ロールリソースで `iam:PassRole` アクションを実行するためのアクセス許可が必要です。これは、QLDB 台帳リソースへの `qldb:ExportJournalToS3` アクセス許可に追加されるものです。  
IAM を使用して QLDB へのアクセスを制御する方法については、「[Amazon QLDB で IAM が機能する仕組み](security_iam_service-with-iam.md)」を参照してください。QLDB ポリシーの例については、「[Amazon QLDB のアイデンティティベースのポリシー例](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-export-to-s3-bucket)」を参照してください。

この例では、お客様に代わって Simple Storage Service (Amazon S3) バケットにオブジェクトを書き込むことを QLDB に許可するロールを作成します。詳細については、「*IAM ユーザーガイド*」の「[AWS のサービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

に QLDB ジャーナル AWS アカウント を初めてエクスポートする場合は、まず以下を実行して適切なポリシーを持つ IAM ロールを作成する必要があります。または、[QLDB コンソールを使用して](export-journal.request.md#export-journal.request.con)、ロールを自動的に作成できます。それ以外の場合は、前に作成したロールを選択できます。

**Topics**
+ [

## 許可ポリシーを作成する
](#export-journal.perms.create-policy)
+ [

## IAM ロールを作成する
](#export-journal.perms.create-role)

## 許可ポリシーを作成する
<a name="export-journal.perms.create-policy"></a>

以下のステップを完了して、QLDB ジャーナルエクスポートジョブに対するアクセス許可ポリシーを作成します。この例で示しているのは、指定したバケットにオブジェクトを書き込むためのアクセス許可を QLDB に付与する Simple Storage Service (Amazon S3) バケットポリシーです。該当する場合、QLDB に対称暗号化 KMS キーの使用を許可するキーポリシーも示しています。

Simple Storage Service (Amazon S3) バケットポリシーの詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットポリシーとユーザーポリシーの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html)」を参照してください。 AWS KMS キーポリシーの詳細については、「**AWS Key Management Service デベロッパーガイド」の「[AWS KMSでキーポリシーを使用する](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。

**注記**  
Amazon S3 バケットと KMS キーはどちらも QLDB 台帳 AWS リージョン と同じ にある必要があります。

**JSON ポリシーエディタでポリシーを作成するには**

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

1. 左側のナビゲーション列で、[**ポリシー**] を選択します。

   **[Policies]** (ポリシー) を初めて選択する場合は、**[Welcome to Managed Policies]** (マネージドポリシーにようこそ) ページが表示されます。**[今すぐ始める]** を選択します。

1. ページの上部で、[**ポリシーを作成**] を選択します。

1. **[JSON]** タブを選択します。

1. JSON ポリシードキュメントを入力します。
   + Simple Storage Service (Amazon S3) オブジェクトの暗号化にカスタマーマネージド KMS キーを使用する場合は、以下のポリシードキュメントの例を使用します。このポリシーを使用するには、例の *amzn-s3-demo-qldb-cloudtrail*、*us-east-1*、*123456789012*、および *1234abcd-12ab-34cd-56ef-1234567890ab* を独自の情報に置き換えます。

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBJournalExportS3Permission",
                 "Action": [
                     "s3:PutObjectAcl",
                     "s3:PutObject"
                 ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:s3:::amzn-s3-demo-qldb-cloudtrail/*"
             },
             {
                 "Sid": "QLDBJournalExportKMSPermission",
                 "Action": [ "kms:GenerateDataKey" ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
             }
         ]
     }
     ```
   + 他の暗号化タイプの場合は、以下のポリシードキュメントの例を使用します。このポリシーを使用するには、例の *amzn-s3-demo-qldb-cloudtrail* を独自の Amazon S3 バケット名に置き換えます。

     ```
     {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Sid": "QLDBJournalExportS3Permission",
                 "Action": [
                     "s3:PutObjectAcl",
                     "s3:PutObject"
                 ],
                 "Effect": "Allow",
                 "Resource": "arn:aws:s3:::amzn-s3-demo-qldb-cloudtrail/*"
             }
         ]
     }
     ```

1. **[ポリシーの確認]** を選択します。
**注記**  
いつでも **[Visual editor]** (ビジュアルエディタ) タブと **[JSON]** タブを切り替えることができます。ただし、**[Visual editor]** (ビジュアルエディタ) タブで **[Review policy]** (ポリシーの確認) を変更または選択した場合、IAM はポリシーを再構成してビジュアルエディタに合わせて最適化することがあります。詳細については、*IAM ユーザーガイド*の「[ポリシーの再構成](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure)」を参照してください。

1. [**ポリシーの確認**] ページに作成するポリシーの [**名前**] と [**説明**] を入力します。ポリシーの **[Summary]** (概要) を参照して、ポリシーによって付与された許可を確認します。次に、**[Create policy]** (ポリシーの作成) を選択して作業を保存します。

## IAM ロールを作成する
<a name="export-journal.perms.create-role"></a>

QLDB ジャーナルエクスポートジョブのアクセス許可ポリシーを作成したら、次に IAM ロールを作成し、それにポリシーをアタッチできます。

**QLDB のサービスロールを作成するには (IAM コンソール)**

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

1. IAM コンソールのナビゲーションペインで、**[ロール]**、**[ロールを作成]** を選択します。

1. **信頼できるエンティティタイプ** で、**AWS のサービス** を選択します。

1. **[サービス] または [ユースケース]** で **[QLDB]** を選択し、次に **[QLDB]** ユースケースを選択します。

1. [**次へ**] を選択します。

1. 前のステップで作成したポリシーの横にあるボックスをオンにします。

1. (オプション) [アクセス許可の境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

   1. **[アクセス許可の境界の設定]** セクションを開き、**[アクセス許可の境界を使用してロールのアクセス許可の上限を設定する]** を選択します。

      IAM には、 アカウントの AWS 管理ポリシーとカスタマー管理ポリシーのリストが含まれます。

   1. アクセス許可の境界として使用するポリシーを選択します。

1. [**次へ**] を選択します。

1. このロールの目的を識別しやすいロール名またはロール名サフィックスを入力します。
**重要**  
ロールに名前を付けるときは、次のことに注意してください。  
ロール名は 内で一意である必要があり AWS アカウント、大文字と小文字を区別することはできません。  
例えば、**PRODROLE** と **prodrole** の両方の名前でロールを作成することはできません。ロール名がポリシーまたは ARN の一部として使用される場合、ロール名は大文字と小文字が区別されます。ただし、サインインプロセスなど、コンソールにロール名がユーザーに表示される場合、ロール名は大文字と小文字が区別されません。
他のエンティティがロールを参照する可能性があるため、ロールを作成した後にロール名を編集することはできません。

1. (オプション) **[説明]** にロールの説明を入力します。

1. (オプション) ロールのユースケースとアクセス許可を編集するには、**[ステップ 1: 信頼されたエンティティを選択]** または **[ステップ 2: アクセス権限を追加]** のセクションで **[編集]** を選択します。

1. (オプション) ロールの識別、整理、検索を簡単にするには、キーと値のペアとしてタグを追加します。IAM でのタグの使用の詳細については、IAM *ユーザーガイド*の[AWS Identity and Access Management 「リソースのタグ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)」を参照してください。

1. ロールを確認したら、**[ロールを作成]** を選択します。

以下の JSON ドキュメントは、特定の許可がアタッチされた IAM ロールを引き受けることを QLDB に許可する信頼ポリシーの例です。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "qldb.amazonaws.com"
            },
            "Action": [ "sts:AssumeRole" ],
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:qldb:us-east-1:123456789012:*"
                },
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                }
            }
        }
    ]
}
```

**注記**  
この信頼ポリシーの例では、`aws:SourceArn` および `aws:SourceAccount` グローバル条件コンテキストキーを使用して、**混乱した代理問題を回避する方法を示します。この信頼ポリシーを使用すると、QLDB は、アカウント `123456789012` のみの QLDB リソースのロールを引き受けることができます。  
詳細については、「[クロスサービスの混乱した副防止](cross-service-confused-deputy-prevention.md)」を参照してください。

IAM ロールを作成した後、QLDB コンソールに戻り、**[Create export job]** (エクスポートジョブの作成) ページを更新すると、新しいロールが見つかります。

# ジャーナルエクスポートの一般的なエラー
<a name="export-journal.errors"></a>

**重要**  
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了まで Amazon QLDB を使用できます。詳細については、[「Amazon QLDB 台帳を Amazon Aurora PostgreSQL に移行する](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)」を参照してください。

このセクションでは、ジャーナルエクスポートのリクエストに対して Amazon QLDB がスローするランタイムエラーについて説明します。

以下は、サービスによって返される一般的な例外のリストです。それぞれの例外には、特定のエラーメッセージに加え、簡単な説明と考えられる解決方法に関する推奨事項が記載されています。<a name="export-journal.errors.varlist"></a>

**AccessDeniedException**  
メッセージ: User: *userARN* is not authorized to perform: iam:PassRole on resource: *roleARN* (ユーザー: userARN にはリソース roleARN に対して iam:PassRole を実行する許可がありません)  
IAM ロールを QLDB サービスに渡す許可がありません。QLDB には、すべてのジャーナルエクスポートリクエストに対応するロールが必要であり、このロールを QLDB に渡す許可が必要です。このロールにより、指定した Amazon S3 バケットへの書き込みアクセス許可が QLDB に付与されます。  
指定した IAM ロールリソースに対して `PassRole` API オペレーションを実行する許可を付与する IAM ポリシーを QLDB サービス (`qldb.amazonaws.com`) に定義していることを確認します。ポリシーの例については「[Amazon QLDB のアイデンティティベースのポリシー例](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-export-to-s3-bucket)」を参照してください。

**IllegalArgumentException**  
メッセージ: QLDB encountered an error validating S3 configuration (QLDB で S3 設定の検証中にエラーが発生しました): *errorCode* *errorMessage*  
このエラーの原因として考えられるのは、指定したバケットが Simple Storage Service (Amazon S3) に存在しないことです。または、指定した Simple Storage Service (Amazon S3) バケットにオブジェクトを書き込むための権限が QLDB にないと考えられます。  
エクスポートジョブリクエストで指定した S3 バケット名が正しいか確認します。バケットの命名規則の詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットの制約と制限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」を参照してください。  
また、指定したバケットに対する `PutObject` および `PutObjectAcl` アクセス許可を QLDB サービス (`qldb.amazonaws.com`) に付与するポリシーを定義していることを確認します。詳細については[エクスポートアクセス許可](export-journal.perms.md)を参照してください。

**IllegalArgumentException**  
メッセージ: Unexpected response from Amazon S3 while validating the S3 configuration. (S3 設定の検証中に、Amazon S3 から不測のレスポンスがありました。) S3 からのレスポンス: *errorCode* *errorMessage*  
指定した S3 バケットにジャーナルエクスポートデータを書き込もうとしましたが、Simple Storage Service (Amazon S3) エラーレスポンスがあり失敗しました。考えられる原因の詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 のトラブルシューティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html)」を参照してください。  


**IllegalArgumentException**  
メッセージ: Amazon S3 bucket prefix must not exceed 128 characters (Amazon S3 バケットプレフィックスは 128 文字以下でなければなりません)  
ジャーナルエクスポートのリクエストで指定したプレフィックスが 128 文字を超えています。

**IllegalArgumentException**  
メッセージ: Start date must not be greater than end date (開始日は終了日よりも前の日付でなければなりません)  
`InclusiveStartTime` と `ExclusiveEndTime` を両方とも、[ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) の日時形式、協定世界時 (UTC) にしてください。

**IllegalArgumentException**  
メッセージ: End date cannot be in future (終了日を現在よりも後の日付にすることはできません)  
`InclusiveStartTime` と `ExclusiveEndTime` を両方とも、`ISO 8601` の日時形式、UTC にしてください。

**IllegalArgumentException**  
メッセージ: 指定されたオブジェクト暗号化設定 (S3EncryptionConfiguration) は AWS Key Management Service （AWS KMS) キーと互換性がありません  
`ObjectEncryptionType` が `NO_ENCRYPTION` または `SSE_S3` の `KMSKeyArn` が指定されています。`SSE_KMS` のオブジェクトの暗号化タイプに対してのみ、カスタマーマネージド AWS KMS key を指定できます。Simple Storage Service (Amazon S3) のサーバー側の暗号化オプションの詳細については、「Amazon S3 デベロッパーガイド**」の「[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)」を参照してください。

**LimitExceededException**  
メッセージ: Exceeded the limit of 2 concurrently running Journal export jobs (ジャーナルエクスポートジョブの同時実行の上限数 2 を超えています)  
QLDB では、デフォルトで、ジャーナルエクスポートジョブの同時実行は最大 2 件までという制限が適用されます。