AWS Database Migration Service のターゲットとしての Amazon S3 の使用 - AWS Database Migration Service

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

AWS Database Migration Service のターゲットとしての Amazon S3 の使用

サポートされるデータベースのソースから Amazon S3 を使用することにより、データを AWS DMS に移行できます。AWS DMS タスクのターゲットとして Amazon S3 を使用する場合、全ロードと変更データキャプチャ (CDC) データの両方はデフォルトでカンマ区切り値 (csv) 形式で書き込まれます。よりコンパクトなストレージと高速なクエリオプションにおいては、Apache Parquet (.parquet) 形式でデータを書き込むオプションもあります。

AWS DMS は、増分 16 進カウンターを使用して全ロード中に作成されるファイルに、.csv として LOAD00001.csv、LOAD00002...、LOAD00009、LOAD0000A などの名前を付けます。AWS DMS はタイムスタンプを使用して、CDC ファイルに 20141029-1134010000.csv などの名前を付けます。レコードを含むソーステーブルごとに、 AWS DMS は、指定したターゲット フォルダの下にフォルダを作成します(ソース テーブルが空でない場合)。 AWS DMS すべてのフル ロード ファイルおよびCDCファイルを指定された Amazon S3 バケット。

パラメータ bucketFolder には、.csv ファイルまたは .parquet ファイルが S3 バケットにアップロードされる前に保存される場所が含まれます。.csv ファイルでは、テーブルデータは、S3 バケットに以下の形式で格納されます。

<schema_name>/<table_name>/LOAD00000001.csv <schema_name>/<table_name>/LOAD00000002.csv ... <schema_name>/<table_name>/LOAD00000009.csv <schema_name>/<table_name>/LOAD0000000A.csv <schema_name>/<table_name>/LOAD0000000B.csv ... <schema_name>/<table_name>/LOAD0000000F.csv <schema_name>/<table_name>/LOAD00000010.csv ...

追加の接続属性を使用して、列の区切り文字、行の区切り文字、およびその他のパラメータを指定できます。追加の接続属性の詳細については、このセクションの最後にある「AWS DMS のターゲットとして Amazon S3 を使用する場合の追加の接続属性」を参照してください。

AWS DMS を使用してデータ変更をレプリケートする場合、.csv または .parquet 出力ファイルの最初の列に、次の .csv ファイルのように、データがどのように変更されたかが示されます。

I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas

この例では、ソースデータベースに EMPLOYEE テーブルがあるとします。AWS DMS は以下のイベントに応答して、データを .csv または .parquet ファイルに書き込みます。

  • 新しい従業員 (Bob Smith、従業員 ID 101) がニューヨークオフィスに 2014 年 6 月 4 日に採用されました。.csv または .parquet ファイルで、最初の列の I は、新しい行がソースデータベースの EMPLOYEE テーブルに INSERT されたことを示しています。

  • 2015 年 10 月 8 日に、Bob はロサンゼルスオフィスに転勤になりました。.csv または .parquet ファイルで、U は、Bob の新しい勤務地を反映するため、EMPLOYEE テーブルの対応する行が UPDATE されたことを示しています。その他の行は、UPDATE の後に表示される、EMPLOYEE テーブルの行を反映しています。

  • 2017 年 3 月 13 日に、Bob はダラスオフィスに再度転勤になりました。.csv または .parquet ファイルで、U はこの行が再度 UPDATE されたことを示しています。その他の行は、UPDATE の後に表示される、EMPLOYEE テーブルの行を反映しています。

  • Bob は、しばらくダラスに勤務した後、退職しました。.csv または .parquet ファイルで、D は、行がソーステーブルで DELETE されたことを示しています。その他の行は、削除される前に行が EMPLOYEE テーブルにどのように表示されたかを反映しています。

ターゲットとして Amazon S3 を使用するための前提条件

ターゲットとして Amazon S3 を使用する前に、以下が当てはまることを確認します。

  • ターゲットとして使用している S3 バケットは、データの移行に使用している DMS レプリケーションインスタンスと同じ AWS リージョンにあります。

  • 移行に使用する AWS アカウントには、ターゲットとして使用する S3 バケットへの書き込みおよび削除アクセス許可が付与された IAM ロールがあります。

  • このロールにはタグ付けのためのアクセスが許可されているため、ターゲットバケットに書き込まれる任意の S3 オブジェクトにタグ付けができます。

このアカウントアクセスを設定するには、移行タスクを作成するために使用するユーザーアカウントに割り当てられたロールに次の一連のアクセス許可があることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::buckettest2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2" ] } ] }

ターゲットとしての Amazon S3 の使用における制限

ターゲットとして Amazon S3 を使用する場合、以下の制限が適用されます。

  • VPCE対応(ゲートウェイVPC)S3バケットは現在サポートされていません。

  • 次のDDL(データ定義言語)コマンドは、変更データキャプチャ(CDC)でサポートされています。[テーブルを切り捨てる]、[テーブルをドロップ]、[テーブルを作成]、[テーブル名を変更]、[列を追加]、[列をドロップ]、[列名を変更]、[列データ型を変更] があります。

  • 完全 LOB モードはサポートされていません。

  • 全ロード時のソーステーブル構造に対する変更はサポートされていません。全ロード時のデータに対する変更はサポートされています。

  • 同じソーステーブルから同じターゲット S3 エンドポイントバケットにデータをレプリケートする複数のタスクを実行すると、それらのタスクが同じファイルに書き込みます。同じテーブルのデータソースを使用する場合、異なるターゲットエンドポイント (バケット) を指定することをお勧めします。

Security

ターゲットとして Amazon S3 を使用するには、移行のために使用されるアカウントに、ターゲットとして使用される Amazon S3 バケットに対する書き込みおよび削除アクセス権限が必要です。Amazon S3 にアクセスするために必要なアクセス権限がある、IAM ロールの Amazon リソースネーム (ARN) を指定します。

AWS DMS は、Amazon S3 に対する一連の事前定義済みの許可 (既定アクセスコントロールリスト (ACL)) をサポートしています。各既定 ACL には、Amazon S3 バケットに対するアクセス権限を設定するために使用できる一連の被付与者とアクセス権限があります。S3 ターゲットエンドポイントの接続文字列属性で cannedAclForObjects で使用して、既定 ACL を指定できます。追加接続属性 cannedAclForObjects の使用についての詳細は、「AWS DMS のターゲットとして Amazon S3 を使用する場合の追加の接続属性」を参照してください。Amazon S3 の既定 ACL の詳細については、「既定 ACL」を参照してください。

移行に使用する IAM ロールは、s3:PutObjectAcl API オペレーションを実行できる必要があります。

Apache Parquet を使用した Amazon S3 オブジェクトの保存

カンマ区切り値 (.csv) 形式は、Amazon S3 ターゲットオブジェクトのデフォルトのストレージ形式です。よりコンパクトなストレージと高速なクエリについては、代わりに Apache Parquet (.parquet) をストレージ形式として使用できます。

Apache Parquet は、Hadoop 向けに当初設計されたオープンソースのファイルストレージ形式です。Apache Parquet の詳細については、「https://parquet.apache.org/」を参照してください。

移行された S3 ターゲットオブジェクトに .parquet ストレージ形式を設定するには、以下のメカニズムを使用できます。

Amazon S3 オブジェクトのタグ付け

タスクテーブルのマッピングルールの一部として適切な JSON オブジェクトを指定することで、レプリケーションインスタンスが作成する Amazon S3 オブジェクトにタグを付けることができます。有効なタグ名を含む S3 オブジェクトタグ付けの要件とオプションの詳細については、以下を参照してください。 オブジェクトのタグ付けAmazon Simple Storage Service 開発者ガイド. JSON を使用したテーブルマッピングの詳細については、「 JSON を使用するテーブルマッピングによりテーブル選択および変換を指定する」を参照してください。

selection ルールタイプの 1 つ以上の JSON オブジェクトを使用して、指定するテーブルおよびスキーマで S3 オブジェクトにタグ付けします。次に、post-processing ルールタイプの 1 つ以上の JSON オブジェクトで add-tag アクションを使用して、selection オブジェクト (1 つ以上のオブジェクト) を行います。この後処理ルールは、タグ付けする S3 オブジェクトを識別し、これらの S3 オブジェクトに追加するタグに名前と値を指定します。

post-processing ルールタイプの JSON オブジェクトで指定するパラメータは、次のテーブルにあります。

パラメータ 使用できる値: 説明:
rule-type post-processing

生成されたターゲットオブジェクトへの後処理アクションに適用する値です。選択した S3 オブジェクトには、1 つ以上の後処理ルールを指定できます。

rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
rule-action add-tag S3 オブジェクトに適用する後処理アクションです。add-tag アクションの単一の JSON 後処理オブジェクトを使用して、1 つ以上のタグを追加できます。
object-locator

schema-name – テーブルスキーマの名前。

table-name – テーブルの名前。

ルールが適用されるスキーマおよびテーブルごとの名前。各 object-locator パラメータの値のすべてあるいは一部で、「%」パーセント記号をワイルドカードとして使用できます。したがって、これらの項目には以下を対応させることができます。

  • 単一のスキーマの 1 つのテーブル

  • すべてあるいは一部のスキーマの 1 つのテーブル

  • 単一のスキーマの一部あるいはすべてのテーブル

  • 一部あるいはすべてのスキーマの一部あるいはすべてのテーブル

tag-set

key – 単一のタグの任意の有効な名前。

value – このタグに有効な任意の JSON 値。

指定された object-locator。 1 つの tag-set パラメータ オブジェクト。S3 オブジェクトタグ付けの詳細については、以下を参照してください。 オブジェクトのタグ付けAmazon Simple Storage Service 開発者ガイド.

値のすべてまたは一部に動的値を指定することもできます。 key および value を使用したタグのパラメータ ${dyn-value}。 ここで、 ${dyn-value} 次のいずれかになります。 ${schema-name} または ${table-name}。 したがって、現在選択されているスキーマまたはテーブルの名前を、パラメータ値全体または一部として挿入できます。

注記
重要

key パラメータに動的な値を挿入する場合には、使用方法に応じて、S3 オブジェクトに名前が重複するタグを生成することができます。この場合、重複するタグの 1 つのみがオブジェクトに追加されます。

S3 オブジェクトの選択をタグ付けするために複数の post-processing ルールタイプを指定する場合、各 S3 オブジェクトは 1 つの後処理ルールをから 1 つの tag-set オブジェクトのみを使用してタグ付けされます。指定する S3 オブジェクトへのタグ付けに使用される特定のタグセットは、その S3 オブジェクトに最も一致するオブジェクトロケーターに関連する後処理ルールのうちの 1 つです。

たとえば、同じ S3 オブジェクトに 2 つの後処理ルールが識別されるとします。また、1 つのルールのオブジェクトロケーターはワイルドカードを使用し、別のルールのオブジェクトロケーターは S3 オブジェクトを識別するための完全な一致 (ワイルドカードなし) を使用するとします。この場合、完全に一致する後処理ルールに関連付けられたタグが S3 オブジェクトのタグ付けに使用されます。複数の後処理ルールが指定された S3 オブジェクトに同様に一致する場合、この後処理ルールに最初に関連図けられたタグセットがオブジェクトのタグ付けに使用されます。

例 単一のテーブルとスキーマに作成された S3 オブジェクトへの静的なタグの追加

次の選択と後処理ルールは 3 つのタグ (tag_1tag_2tag_3) と該当する静的値 (value_1value_2value_3) を追加して S3 オブジェクトを作成します。この S3 オブジェクトは、aat2 という名前のスキーマがある STOCK という名前のソース内の単一のテーブルに該当します。

{ "rules": [ { "rule-type": "selection", "rule-id": "5", "rule-name": "5", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat2", "table-name": "STOCK", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" }, { "key": "tag_3", "value": "value_3" } ] } ] }

例 複数のテーブルとスキーマに作成された S3 オブジェクトへの静的および動的タグの追加

次の例には 1 つの選択と 2 つの後処理ルールがあり、ここでは、ソースからの入力にすべてのテーブルとすべてのスキーマが含まれています。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "%", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_${table-name}" } ] }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat", "table-name": "ITEM", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" } ] } ] }

最初の後処理ルールは、該当する動的値 (${schema-name}my_prefix_${table-name}) を使用した 2 つのタグ (dw-schema-namedw-schema-table) をターゲットに作成されたほぼすべての S3 オブジェクトに追加します。例外は、2 番目の後処理ルールで色別されてタグ付けされる S3 オブジェクトです。したがって、ワイルドカードオブジェクトロケーターによって識別された各ターゲット S3 オブジェクトは、ソースで該当するスキーマおよびテーブルを識別するタグを使用して作成されます。

2 番目の後処理ルールは、完全に一致するオブジェクトロケーターによって識別される S3 オブジェクトに、該当する静的値 (value_1value_2) を使用して tag_1 および tag_2 を追加します。この作成済み S3 オブジェクトは、 ITEM スキーマ名付き aat。 完全一致のため、これらのタグは、最初の後処理ルールから追加されたこのオブジェクト上のタグを置き換えます。これは、S3 オブジェクトとワイルドカードでのみ一致します。

例 S3 オブジェクトに動的タグの名前と値の両方を追加する

次の例には 2 つの選択ルールと 1 つの後処理ルールがあります。ここでは、ソースの入力には retail あるいは wholesale スキーマに ITEM テーブルのみが含まれています。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "retail", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "wholesale", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "ITEM", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_ITEM" }, { "key": "${schema-name}_ITEM_tag_1", "value": "value_1" }, { "key": "${schema-name}_ITEM_tag_2", "value": "value_2" } ] ] }

後処理ルールのタグセットは、ターゲットの ITEM テーブルに作成されたすべての S3 オブジェクトに 2 つのタグ (dw-schema-namedw-schema-table) を追加します。最初のタグには動的値があります "${schema-name}" 第二のタグが静的な値を持ち、 "my_prefix_ITEM"。 したがって、各ターゲット S3 オブジェクトは、ソース内で対応するスキーマとテーブルを識別するタグを使用して作成されます。

さらに、このタグセットは 2 つの追加タグを動的な名前 (${schema-name}_ITEM_tag_1"${schema-name}_ITEM_tag_2") で追加します。これらは、対応する静的値を持ちます。 value_1 および value_2。 したがって、これらのタグはそれぞれ現在のスキーマに名前が付けられ、 retail または wholesale。 各オブジェクトは 1 つの一意のスキーマ名に対して作成されるため、このオブジェクトに重複した動的タグ名を作成することはできません。スキーマ名はそれ以外の一意のタグ名を作成するために使用されます。

Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成

Amazon S3 ターゲットオブジェクトを暗号化するカスタム AWS KMS キーを作成して使用できます。KMS キーを作成したら、S3 ターゲットエンドポイントを作成するときに次のいずれかの方法を使用して、KMS キーを使用してオブジェクトを暗号化できます。

  • AWS CLI を使用して create-endpoint コマンドを実行するときに、S3 ターゲットオブジェクトに対して次のオプションを (デフォルトの .csv ファイルストレージ形式で) 使用します。

    --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'

    ここで your-KMS-key-ARN とは、AWS KMS キーの Amazon リソースネーム (ARN) です。詳細については、AWS DMS のターゲットとして Amazon S3 を使用する場合のエンドポイントの設定 を参照してください。

  • 値 (SSE_KMS) に追加の接続属性 (encryptionMode) を設定し、AWS KMS キーの ARN に追加の接続属性 (serverSideEncryptionKmsKeyId) を設定します。詳細については、AWS DMS のターゲットとして Amazon S3 を使用する場合の追加の接続属性 を参照してください。

AWS KMS キーを使用して Amazon S3 ターゲットオブジェクトを暗号化するには、Amazon S3 バケットにアクセスする権限がある IAM ロールが必要です。この IAM ロールは次に、作成した暗号化キーにアタッチされるポリシー (キーポリシー) にアクセスします。これは、IAM コンソールで次を作成して実行します。

  • Amazon S3 バケットにアクセスする権限があるポリシーです。

  • このポリシーがある IAM ロールです。

  • このロールを参照するキーポリシーがある AWS KMS 暗号化キーです。

以下の手順でこれを行う方法について説明します。

Amazon S3 バケットにアクセスする権限がある IAM ポリシーを作成するには

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、ナビゲーションペインの [ポリシー] を選択します。[ポリシー] ページが開きます。

  3. [ポリシーの作成] を選択します。[Create policy (ポリシーの作成)] ページが開きます。

  4. [サービス]、[S3] の順に選択します。アクションのアクセス権限の一覧が表示されます。

  5. [すべて展開] を選択して一覧を展開し、少なくとも以下のアクセス権限を選択します。

    • ListBucket

    • PutObject

    • DeleteObject

    必要に応じて他のアクセス権限を選択したら、[すべて折りたたむ] を選択して一覧を折りたたみます。

  6. [リソース] を選択してアクセスするリソースを指定します。少なくとも [すべてのリソース] を選択して、全般的な Amazon S3 リソースへのアクセスを提供します。

  7. 必要に応じて他の条件やアクセス許可を追加したら、[ポリシーの確認] を選択します。[ポリシーの確認] ページで結果を確認します。

  8. 設定が必要に応じている場合には、ポリシーの名前 (DMS-S3-endpoint-access など) と他の説明を入力し、[ポリシーの作成] を選択します。[ポリシー] ページが開き、ポリシーが作成されたことを示すメッセージが表示されます。

  9. [ポリシー] のリストからポリシー名を検索して選択します。[概要] ページが表示され、次のようなポリシーの JSON を示します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" } ] }

これで、暗号化のために Amazon S3 リソースにアクセスする新しいポリシーが指定した名前 (DMS-S3-endpoint-access など) で作成されました。

このポリシーを使用して IAM ロールを作成するには

  1. IAM コンソールで、ナビゲーションペインの [ロール] を選択します。[ロール] の詳細ページが開きます。

  2. [Create Role (ロールの作成)] を選択します。[ロールの作成] ページが開きます。

  3. AWS のサービスが信頼されるエンティティとして選択されたら、この IAM ロールを使用するサービスとして [DMS] を選択します。

  4. [次] を選択します。アクセス許可権限ポリシーを添付 ビューが ロールの作成 ページ。

  5. 前の手順で作成した IAM ロールの IAM ポリシーを見つけて選択します (DMS-S3-endpoint-access)。

  6. [次] を選択します。タグタグの追加 ビューが ロールの作成 ページ。ここでは、任意のタグを追加することができます。

  7. [次] を選択します。確認レビュー ビューが ロールの作成 ページ。ここで、結果を確認できます。

  8. 設定が必要に応じている場合には、ロールの名前 (必須、DMS-S3-endpoint-access-role など) と追加の説明を入力して、[ロールの作成] を選択します。[ロール] の詳細ページが開き、ロールが作成されたことを示すメッセージが表示されます。

これで、暗号化のために Amazon S3 リソースにアクセスする新しいロールが指定した名前 (DMS-S3-endpoint-access-role など) で作成されました。

IAM ロールを参照するキーポリシーがある AWS KMS 暗号化キーを作成するには

注記

AWS DMS と AWS KMS 暗号化キーの連携については、「暗号化キーの設定と AWS KMS のアクセス許可の指定」を参照してください。

  1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。

  4. [キーの作成] を選択します。[キーの設定] ページが開きます。

  5. [キーの種類] で、[対称] を選択します。

    注記

    このキーを作成する場合、作成できるのは対称キーのみです。Amazon S3 などすべての AWS サービスでは対称暗号化キーのみを使用できます。

  6. [アドバンスドオプション] を選択します。[キーマテリアルのオリジン] で、[KMS] が選択されていることを確認し、[次へ] を選択します。[ラベルの追加] ページが開きます。

  7. [エイリアスと説明の作成] で、キーのエイリアス (DMS-S3-endpoint-encryption-key など) と追加の説明を入力します。

  8. [タグ] で、キーを識別してその使用状況を追跡するために役立つ任意のタグを追加したら、[次へ] を選択します。[キー管理アクセス許可の定義] ページが開き、選択できるユーザーおよびロールの一覧が表示されます。

  9. キーを管理するユーザーおよびロールを追加します。このユーザーとロールにキーを管理するために必要な権限があることを確認してください。

  10. [キーの削除] で、キー管理者がそのキーを削除できるかどうかを選択したら、[次へ] を選択します。[キーの使用アクセス許可の定義] ページが開き、選択できる追加のユーザーおよびロールの一覧が表示されます。

  11. [このアカウント] で、Amazon S3 ターゲットに対して暗号化オペレーションを実行できるユーザーを選択します。また、[ロール] で以前に作成したロールを選択して、Amazon S3 ターゲットオブジェクトを暗号化するためのアクセスを有効化します (DMS-S3-endpoint-access-role など)。

  12. リストにない他のアカウントに同じアクセス権限を付与するには、[他の AWS アカウント] で [別の AWS アカウントを追加する]、[次へ] の順に選択します。[キーポリシーの表示と編集] ページが開き、既存の JSON に入力して表示および編集できるキーポリシーの JSON が表示されます。ここでは、前のステップで選択したロールおよびユーザー (たとえば、AdminUser1) を参照するキーポリシーを表示できます。また、次の例に示すように、異なるプリンシパル (ユーザーとロール) に許可される別々のキーアクションも確認できます。

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  13. [Finish (完了)] を選択します。[暗号化キー] ページが開き、マスター暗号化キーが作成されたことを示すメッセージが表示されます。

これで、指定したエイリアス (DMS-S3-endpoint-encryption-key など) を使用する新しい AWS KMS キーが作成されました。このキーによって AWS DMS は Amazon S3 ターゲットオブジェクトを暗号化できます。

AWS DMS のターゲットとして Amazon S3 を使用する場合のエンドポイントの設定

エンドポイントの設定を使用して、追加の接続属性の使用と同様に、Amazon S3 ターゲットを構成できます。AWS CLI の --s3-settings 'json-settings' オプションで create-endpoint コマンドを使用してターゲットエンドポイントを作成するときに、これらの設定を指定できます。ここで、 json-settings とは、設定を指定するパラメータを含む JSON オブジェクトです。

同じファイルを含む.jsonファイルを指定することもできます。 json-settings オブジェクト、たとえば、次のようになります。--s3-settings file:///your-file-path/my_s3_settings.json。 ここで、 my_s3_settings.json は、同じ を含む.json ファイルの名前です。 json-settings object.

エンドポイント設定に使用するパラメータの名前は、相当する追加の接続属性の名前と同じです。ただし、エンドポイント設定のパラメータの名前の最初の文字が大文字である場合は除きます。ただし、追加の接続属性を使用したすべての S3 ターゲットエンドポイント設定で create-endpoint コマンドの --s3-settings オプション が使用できるわけではないことにも注意してください。使用可能な設定の詳細については、 create-endpoint CLI コメント、を参照してください。 エンドポイントの作成AWS CLI Command Reference 用 AWS DMS. 上述の設定についての一般情報については、「AWS DMS のターゲットとして Amazon S3 を使用する場合の追加の接続属性」の相当する追加の接続属性を参照してください。

S3 ターゲットエンドポイント設定を使用して、以下を構成できます。

  • S3 ターゲットオブジェクトを暗号化するカスタム AWS KMS キー

  • S3 ターゲットオブジェクトのストレージ形式としての Parquet ファイル

データ暗号化に対する AWS KMS キー設定

次の例では、S3 ターゲットオブジェクトを暗号化するカスタム AWS KMS キーの設定を示しています。開始するには、次の create-endpoint CLI コマンドを実行します。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'

ここでは、--s3-settings オプションで指定される JSON オブジェクトは 2 つのパラメータを定義します。1つは EncryptionMode 値 を持つパラメータ SSE_KMS。 もう1つは ServerSideEncryptionKmsKeyId パラメータ(値:) arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480。 この値は、カスタムのAmazonリソース名(ARN)です AWS KMS キー。S3 ターゲットの場合、追加の設定も指定します。これによって、ロールへのサーバーアクセスの識別、デフォルトの CSV オブジェクトストレージ形式の区切り記号の提供、S3 ターゲットオブジェクトを保存するバケットの場所と名前の指定が行われます。

デフォルトでは、S3 データ暗号化は S3 サーバー側の暗号化を使用して行われます。前述の例の S3 ターゲットの場合、次の例に示すように、これはそのエンドポイント設定を指定することと同様です。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_S3"}'

S3 サーバー側暗号化の使用の詳細については、「サーバー側の暗号化を使用したデータの保護」を参照してください。

注記

CLI を使用して、 modify-endpoint コマンドを使用して、 EncryptionMode パラメーター (既存のエンドポイントの) SSE_KMSSSE_S3。 しかし、 EncryptionModeSSE_S3SSE_KMS.

S3 ターゲットオブジェクトを保存するために .parquet ファイルを使用する設定

S3 ターゲットオブジェクトを作成するデフォルトの形式は .csv ファイルです。次の例では、S3 ターゲットオブジェクトを作成する形式として .parquet ファイルを指定するいくつかのエンドポイント設定を示しています。次の例に示すように、すべてのデフォルトで .parquet ファイル形式を指定できます。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'

ここでは、DataFormat パラメータが parquet に設定されて、すべての S3 デフォルトでこの形式を有効化しています。これらのデフォルトには、繰り返し値を効率的に保存するためにビットパッキングおよびランレングスエンコードの組み合わせを使用するディクショナリエンコード ("EncodingType: "rle-dictionary") が含まれます。

次の例に示すように、デフォルト以外のオプションに追加の設定をさら加えることができます。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "CompressionType": "GZIP", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "dictPageSizeLimit": 3,072,000, "EnableStatistics": false }'

ここでは、複数の標準 S3 バケットオプションおよび DataFormat パラメータに加えて、次のような追加の .parquet ファイルパラメータが設定されています。

  • EncodingType – ディクショナリページの列チャンクごとで各列に発生する値を格納するディクショナリエンコード (plain-dictionary) を設定します。

  • dictPageSizeLimit – ディクショナリページの最大のサイズを 3 MB に設定します。

  • EnableStatistics – Parquet ファイルページおよび行グループに関する統計のコレクションを有効化するデフォルトを無効にします。

AWS DMS のターゲットとして Amazon S3 を使用する場合の追加の接続属性

追加の接続属性として次のオプションを指定できます。接続属性の設定が複数ある場合は、空白を追加せずにそれぞれをセミコロンで区切ります。

オプション 説明:
addColumnName

true または y に設定された場合に .csv 出力ファイルに列名情報を追加するために使用できるオプションのパラメータ。

デフォルト値: false

有効な値 truefalseyn

例: 。

addColumnName=true;

bucketFolder

S3バケット内のフォルダ名を設定するオプションのパラメータ。指定すると、ターゲット オブジェクトはパスに.csvファイルまたは.parquetファイルとして作成されます。 bucketFolder/schema_name/table_name/。 このパラメータを指定しない場合、使用されるパスは schema_name/table_name/.

例: 。

bucketFolder=testFolder;

bucketName

S3 ターゲットオブジェクトが .csv または .parquet ファイルとして作成される S3 バケットの名前。

例: 。

bucketName=buckettest;

cannedAclForObjects

S3 バケットに csv または .parquet ファイルとして作成されたオブジェクトに対して、定義済みの (既定の) アクセスコントロールリストを AWS DMS が指定できるようにする値。詳細については、以下を参照してください。 Amazon S3 可能なACLについては、を参照してください。 キャンドACLAmazon S3 開発者ガイド。

デフォルト値 なし

この属性の有効な値: NONE;PRIVATE;PUBLIC_READ;PUBLIC_READ_WRITE;AUTHENTICATED_READ;AWS_EXEC_READ;BUCKET_OWNER_READ;BUCKET_OWNER_FULL_CONTROL.

例: 。

cannedAclForObjects=PUBLIC_READ;

cdcInsertsOnly

変更データキャプチャ (CDC) ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) または列ストレージ (.parquet) の出力ファイルに書き込みます。デフォルトでは (false 設定)、.csv または.parquet レコードの最初のフィールドに、I (INSERT)、U (UPDATE)、または D (DELETE) という文字が含まれます。この文字は、ターゲットへの CDC ロードのためにソースデータベースで行が挿入、更新、または削除されたかどうかを示します。cdcInsertsOnlytrue または y に設定されている場合、ソースデータベースからの INSERT のみが .csv または .parquet ファイルに移行されます。

.csv形式に限り、これらのINSERTSの記録方法は、 includeOpForFullLoad。 次の場合: includeOpForFullLoad は に設定されます true各 CDC レコードの最初のフィールドは I に設定され、ソースで INSERT 操作を示します。includeOpForFullLoadfalse に設定されている場合、各 CDC レコードは、ソースでの INSERT オペレーションを示す最初のフィールドなしで書き込まれます。これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」を参照してください。

注記

AWS DMS は、バージョン 3.1.4 以降で cdcInsertsOnlyincludeOpForFullLoad のこの連動をサポートしています。

デフォルト値: false

有効な値 truefalseyn

例: 。

cdcInsertsOnly=true;

cdcInsertsAndUpdates

変更データキャプチャ (CDC) ロードを有効化し、INSERT および UPDATE オペレーションを .csv または .parquet (列指向ストレージ) 出力ファイルに書き込みます。デフォルト設定は false ですが、cdcInsertsAndUpdatestrue または y に設定されている場合、ソースデータベースからの INSERT および UPDATE が .csv または .parquet ファイルに移行されます。

.csv 形式の場合、これらの INSERTS および UPDATE の記録方法は includeOpForFullLoad パラメータの値によって異なります。includeOpForFullLoadtrue に設定されている場合、各 CDC レコードの最初のフィールドは、ソースでの INSERT および UPDATE オペレーションを示す I または U に設定されます。しかし、includeOpForFullLoadfalse に設定されている場合、CDC レコードはソースでの INSERT または UPDATE オペレーションを示すことなく書き込まれます。

これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」を参照してください。

注記

AWS DMS は、バージョン 3.3.1 以降では cdcInsertsAndUpdates パラメータの使用をサポートしています。

cdcInsertsOnly および cdcInsertsAndUpdates の両方を、同じエンドポイントで true に設定することはできません。同じエンドポイントで cdcInsertsOnlycdcInsertsAndUpdates のどちらかを true に設定できますが、両方を設定することはできません。

デフォルト値: false

有効な値 truefalseyn

例: 。

cdcInsertsAndUpdates=true;

includeOpForFullLoad

全ロード時のオプションのパラメータ。INSERT オペレーションのみをカンマ区切り値 (.csv) 出力ファイルに書き込みます。

注記

AWS DMS は、バージョン 3.1.4 以降で includeOpForFullLoad をサポートしています。

全ロードの場合、レコードの挿入のみ可能です。デフォルト (false 設定) では、全ロードの場合、ソースデータベースで行が挿入されたことを示す情報はこれらの出力ファイルに記録されません。includeOpForFullLoadtrue または y に設定されている場合、INSERT は .csv ファイルの最初のフィールドに I 注釈として記録されます。

注記

このパラメータは、.csv ファイルへの出力の場合にのみ、cdcInsertsOnly または cdcInsertsAndUpdates と連動します。これらのパラメータがどのように連動するかの詳細については、「移行済み S3 データでのソース DB オペレーションの表示」を参照してください。

デフォルト値: false

有効な値 truefalseyn

例: 。

includeOpForFullLoad=true;

compressionType

GZIP に設定された場合にターゲットの .csv または .parquet ファイルを圧縮するために GZIP を使用するオプションのパラメータ。このパラメータがデフォルトに設定されている場合、ファイルは圧縮されないままになります。

デフォルト値: NONE

有効な値 GZIP または NONE

例: 。

compressionType=GZIP;

csvDelimiter

.csv ソースファイル内の列を分離するために使用される区切り文字。デフォルトはカンマ (,) です。

例: 。

csvDelimiter=,;

csvRowDelimiter

.csv ソースファイル内の行を分離するために使用される区切り文字。デフォルトでは、改行 (\n) です。

例: 。

csvRowDelimiter=\n;

maxFileSize

全ロードで S3 に移行中に作成される .csv ファイルの最大サイズ (KB 単位) を指定する値です。

デフォルト値 1.048.576 KB(1 GB)

有効な値 1–1.048.576

例: 。

maxFileSize=512

rfc4180

.csv ファイル形式のみを使用して Amazon S3 に移行するデータに対して、RFC に準拠する動作を設定するために使用するオプションのパラメータ。Amazon S3 をターゲットとして使用してこの値を true あるいは y に設定する場合、データに引用符あるいは改行文字が含まれていると、AWS DMS は行全体を追加の二重引用符 (") で囲みます。データ内のすべての引用符が 2 回が繰り返されます。このフォーマットは、RFC 4180 に準拠しています。

デフォルト値: true

有効な値 truefalseyn

例: 。

rfc4180=false;

encryptionMode

S3 にコピーした .csv または .parquet オブジェクトファイルを暗号化するサーバー側の暗号化モードです。有効な値は、SSE_S3 (S3 サーバー側の暗号化) または SSE_KMS (AWS KMS キーの暗号化) です。SSE_KMS を選択する場合、暗号化のために使用する AWS KMS キーの Amazon リソースネーム (ARN) に serverSideEncryptionKmsKeyId パラメータを設定します。

注記

CLI を使用して、 modify-endpoint コマンドを使用して、 encryptionMode 既存のエンドポイントの属性を SSE_KMSSSE_S3。 しかし、 encryptionModeSSE_S3SSE_KMS.

デフォルト値: SSE_S3

有効な値 SSE_S3 または SSE_KMS

例: 。

encryptionMode=SSE_S3;

serverSideEncryptionKmsKeyId

設定する場合 encryptionModeSSE_KMS、このパラメータを、 AWS KMS キー。アカウントに作成した AWS KMS キーのリスト内でキーエイリアスを選択すると、この ARN が見つかります。キーを作成する場合、特定のポリシーと関連付けられるロールをこの AWS KMS キーに関連付ける必要があります。詳細については、Amazon S3 ターゲットオブジェクトを暗号化する AWS KMS キーの作成 を参照してください。

例: 。

serverSideEncryptionKmsKeyId=arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480;

dataFormat

S3 オブジェクトを作成するために AWS DMS が使用するファイルの出力形式。Amazon S3 ターゲットに対して AWS DMS は、.csv または .parquet ファイルをサポートしています。.parquet ファイルには、十分な圧縮オプションおよびより高速なクエリパフォーマンスのバイナリ列指向ストレージがあります。.parquet ファイルについての詳細は、「https://parquet.apache.org/」を参照してください。

デフォルト値: csv

有効な値 csv または parquet

例: 。

dataFormat=parquet;

encodingType

Parquet エンコードタイプです。このエンコードタイプオプションには、次が含まれます。

  • rle-dictionary – このディクショナリエンコードは、より効率的な繰り返し値のストレージを行うためにビットパッキングとランレングスエンコードを組み合わせて使用します。

  • plain – エンコードなし。

  • plain-dictionary – このディクショナリエンコードは、特定の列で発生する値のディクショナリを構築します。ディクショナリは各列チャンクのディクショナリページに保存されます。

デフォルト値: rle-dictionary

有効な値 rle-dictionaryplain、または plain-dictionary

例: 。

encodingType=plain-dictionary;

dictPageSizeLimit

.parquet ファイルのディクショナリページで許容される最大サイズ (バイト単位)。ディクショナリページがこの値を超えると、このページではプレーンエンコードが使用されます。

デフォルト値 1.024.000(1 MB)

有効な値 任意の有効な整数値

例: 。

dictPageSizeLimit=2,048,000;

rowGroupLength

.parquet ファイルの 1 つの行グループの行数です。

デフォルト値 10.024(10 KB)

有効な値 任意の有効な整数値

例: 。

rowGroupLength=20,048;

dataPageSize

.parquet ファイルのデータページで許容される最大サイズ (バイト単位)。

デフォルト値 1.024.000(1 MB)

有効な値 任意の有効な整数値

例: 。

dataPageSize=2,048,000;

parquetVersion

.parquet ファイル形式のバージョン。

デフォルト値: PARQUET_1_0

有効な値 PARQUET_1_0 または PARQUET_2_0

例: 。

parquetVersion=PARQUET_2_0;

enableStatistics

true または y に設定された場合に、.parquet ファイルと行グループに関する統計を有効化します。

デフォルト値: true

有効な値 truefalseyn

例: 。

enableStatistics=false;

timestampColumnName

S3 ターゲットエンドポイントデータにタイムスタンプ列を含めるためのオプションのパラメータ。

注記

AWS DMS は、バージョン 3.1.4 以降で timestampColumnName をサポートしています。

timestampColumnName を空白以外の値に設定すると、AWS DMS に移行済みデータの .csv または .parquet ファイルに追加の STRING 列が含まれます。

全ロードの場合、このタイムスタンプ列の各行には、データが DMS によってソースからターゲットに転送されたときのタイムスタンプが含まれます。

CDC ロードの場合、タイムスタンプ列の各行には、ソースデータベースでのその行のコミットのタイムスタンプが含まれます。

このタイムスタンプ列値の文字列形式は、 yyyy-MM-dd HH:mm:ss.SSSSSS。 デフォルトでは、この値の精度はマイクロ秒単位です。CDC 負荷の場合、精度の丸めについては、ソースデータベースに対して DMS でサポートされているコミットのタイムスタンプによって異なります。

addColumnName パラメータが true に設定されている場合、DMS によって、timestampColumnName の空白以外の値として設定したタイムスタンプ列の名前も含まれます。

例: 。

timestampColumnName=TIMESTAMP;

parquetTimestampInMillisecond

.parquet 形式で S3 オブジェクトに書き込まれるすべての TIMESTAMP 列値の精度を指定するオプションのパラメータ。

注記

AWS DMS は、バージョン 3.1.4 以降で parquetTimestampInMillisecond をサポートしています。

この属性を true または y に設定すると、AWS DMS はすべての TIMESTAMP 列をミリ秒の精度で .parquet 形式のファイルに書き込みます。それ以外の場合、DMS はそれらをマイクロ秒の精度で書き込みます。

現在、Amazon Athena と AWS Glue は、TIMESTAMP 値をミリ秒の精度でのみ処理できます。データを Athena または AWS Glue でクエリまたは処理する場合にのみ、.parquet 形式の S3 エンドポイントオブジェクトファイルに対してこの属性を true に設定します。

注記
  • AWS DMS は、マイクロ秒の精度で .csv 形式で S3 ファイルに書き込まれたすべての TIMESTAMP 列値を書き込みます。

  • この属性の設定は、timestampColumnName 属性を設定することで挿入されたタイムスタンプ列値の文字列の形式には影響しません。

デフォルト値: false

有効な値 truefalseyn

例: 。

parquetTimestampInMillisecond=true;

移行済み S3 データでのソース DB オペレーションの表示

AWS DMS は S3 ターゲットにレコードを移行するとき、移行済みレコードのそれぞれに追加のフィールドを作成できます。この追加のフィールドは、ソースデータベースでレコードに適用されたオペレーションを示します。

全ロードの場合、includeOpForFullLoadtrue であり、出力形式が .csv であるとき、DMS は常に各 .csv レコードに追加の最初のフィールドを作成します。このフィールドには、ソースデータベースで行が挿入されたことを示す文字 I (INSERT) が含まれます。また、CDC ロードの場合、cdcInsertsOnlyfalse (デフォルト) であるとき、DMS は常に各 .csv レコードまたは .parquet レコードに追加の最初のフィールドを作成します。このフィールドには、ソースデータベースで行が挿入されたか、更新されたか、削除されたかを示す文字 I (INSERT)、U (UPDATE)、または D (DELETE) が含まれます。

出力形式が .csv のみの場合、DMS がこの最初のフィールドを作成して設定するかどうか、またその方法は、includeOpForFullLoadcdcInsertsOnly または cdcInsertsAndUpdates の設定によっても異なります。

注記
  • AWS DMS は、バージョン 3.1.4 以降で includeOpForFullLoad をサポートしており、ここで説明している includeOpForFullLoadcdcInsertsOnly の連動をサポートしています。

  • AWS DMS は、バージョン 3.3.1 以降で includeOpForFullLoadcdcInsertAndUpdates のこの連動をサポートしています。

以下の表では、includeOpForFullLoad および cdcInsertsOnly 属性の設定がどのように連動して、この形式の移行済みレコードの設定に影響するかを確認できます。

使用するパラメータ設定 DMS が .csv 出力用に設定するターゲットレコード
includeOpForFullLoad cdcInsertsOnly 全ロードの場合 CDC ロードの場合
true true 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて I に設定
false false 追加のフィールドなし 最初のフィールド値が追加されて IU、または D に設定
false true 追加のフィールドなし 追加のフィールドなし
true false 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて IU、または D に設定

includeOpForFullLoadcdcInsertsOnly が同じ値に設定されている場合、ターゲットレコードは現在の移行タイプのレコード設定を制御する属性に従って設定されます。その属性は、全ロードの場合は includeOpForFullLoad、CDC ロードの場合は cdcInsertsOnly です。

includeOpForFullLoadcdcInsertsOnly が異なる値に設定されている場合、AWS DMS によってターゲットレコードの設定は CDC と全ロードの両方に対して一貫したものになります。これは、CDC ロードのレコード設定を、includeOpForFullLoad で指定された前の全ロードのレコード設定と一致させることで行われます。

つまり、挿入されたレコードを示す最初のフィールドを追加するように全ロードが設定されているとします。この場合、続く CDC ロードは、挿入、更新、または削除されたレコードを示す最初のフィールドをソースで必要に応じて追加するように設定されます。逆に、挿入されたレコードを示す最初のフィールドを追加しないように全ロードが設定されているとします。この場合、CDC ロードも、ソースでの対応するレコードオペレーションに関係なく、各レコードに最初のフィールドを追加しないように設定されます。

同様に、DMS が最初のフィールドをどのように作成して設定するかは、 includeOpForFullLoad および cdcInsertsAndUpdates。 次の表では、 includeOpForFullLoad および cdcInsertsAndUpdates 属性は連動して、この形式で移行されたレコードの設定に影響します。

使用するパラメータ設定 DMS が .csv 出力用に設定するターゲットレコード
includeOpForFullLoad cdcInsertsAndUpdates 全ロードの場合 CDC ロードの場合
true true 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて I または U に設定
false false 追加のフィールドなし 最初のフィールド値が追加されて IU、または D に設定
false true 追加のフィールドなし 最初のフィールド値が追加されて I または U に設定
true false 最初のフィールド値が追加されて I に設定 最初のフィールド値が追加されて IU、または D に設定