AWS Database Migration Service のターゲットとしての Amazon Redshift データベースの使用 - AWS Database Migration Service

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

AWS Database Migration Service のターゲットとしての Amazon Redshift データベースの使用

AWS Database Migration Service を使用して Amazon Redshift データベースにデータを移行できます。Amazon Redshift は、クラウド内でのフルマネージド型、ペタバイトスケールのデータウェアハウスサービスです。ターゲットとして Amazon Redshift データベースを使用すると、サポートされている他のすべてのソースデータベースからデータを移行できます。

Amazon Redshift クラスターは、レプリケーション インスタンスと同じ AWS アカウントと同じ AWS リージョンに存在している必要があります。

Amazon Redshift へのデータベース移行中、AWS DMS はまずデータを Amazon S3 バケットに移動します。ファイルが Amazon S3 バケットに移動されると、AWS DMS はそれらのファイルを Amazon Redshift データウェアハウス内の適切なテーブルに転送します。AWS DMS は S3 バケットを Amazon Redshift データベースと同じ AWS リージョンに作成します。AWS DMS レプリケーション インスタンスはその同じ AWS リージョンに存在している必要があります。

AWS CLI または DMS API を使用してデータを Amazon Redshift に移行する場合、S3 アクセスを許可するように AWS Identity and Access Management (IAM) ロールを設定します。この IAM ロールの作成に関する詳細については、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」をご参照ください。

Amazon Redshift エンドポイントは、以下の完全なオートメーションを行います。

  • スキーマ生成およびデータ型マッピング

  • ソースデータベーステーブルの全ロード

  • ソーステーブルに加えられた変更の増分ロード

  • ソーステーブルに加えられたスキーマ変更のデータ定義言語 (DDL) での適用

  • 全ロードプロセスと変更データキャプチャ (CDC) プロセスの間の同期

AWS Database Migration Service では、全ロードオペレーションと変更処理オペレーションの両方がサポートされています。AWS DMS は、ソースデータベースからデータを読み取り、一連のカンマ区切り値 (.csv) ファイルを作成します。全ロードオペレーションの場合、AWS DMS はテーブルごとにファイルを作成し、次に、AWS DMS は各テーブルのテーブルファイルを Amazon S3 内の別個のフォルダにコピーします。ファイルが Amazon S3 にアップロードされると、AWS DMS がコピーコマンドを送信し、ファイル内のデータが Amazon Redshift にコピーされます。変更処理オペレーションの場合、AWS DMS は差分変更を .csv ファイルにコピーします。その後、AWS DMS は差分変更ファイルを Amazon S3 にアップロードし、データを Amazon Redshift にコピーします。

AWS DMS のターゲットとしての Amazon Redshift の使用の詳細については、以下のセクションをご参照ください:

AWS Database Migration Service のターゲットとして Amazon Redshift データベースを使用する場合の前提条件

以下のリストでは、データ移行のターゲットとして Amazon Redshift を使用する場合に必要な前提条件について説明します。

  • Amazon Redshift クラスターを起動するには、AWS マネジメントコンソールを使用します。AWS アカウントと Amazon Redshift クラスターに関するパスワード、ユーザー名、データベース名など基本的な情報を書き留めます。これらの値は、Amazon Redshift ターゲット エンドポイントを作成するときに必要になります。

  • Amazon Redshift クラスターは、レプリケーション インスタンスと同じ AWS アカウントと同じ AWS リージョンに存在している必要があります。

  • AWS DMS レプリケーション インスタンスには、クラスターで使用される Amazon Redshift エンドポイント (ホスト名とポート) へのネットワーク接続が必要です。

  • AWS DMS は Amazon S3 バケットを使用してデータを Amazon Redshift データベースに転送します。AWS DMS がバケットを作成できるようにするため、コンソールは IAM ロール dms-access-for-endpoint を使用します。AWS CLI または DMS API を使用して、ターゲットデータベースとして Amazon Redshiftを使用したデータベース移行を作成する場合、この IAM ロールを作成する必要があります。このロールの作成に関する詳細については、「AWS CLI と AWS DMS API で使用する IAM ロールの作成」をご参照ください。

  • AWS DMS は、ターゲットの Amazon Redshift インスタンスで BLOB、および CLOB、Nを VARCHAR に変換します。Amazon Redshift では、64 KB を超える VARCHAR のデータ型がサポートされていないため、従来の LOB を Amazon Redshift に保存することはできません。

  • ターゲットのメタデータタスクの設定BatchApplyEnabledtrueにとってAWS DMSが CDC 中に Amazon Redshift ターゲットテーブルへの変更を処理できるようにします。ソーステーブルとターゲットテーブルの両方にプライマリキーが必要です。プライマリキーがない場合、変更はステートメントによって適用されます。また、ターゲットレイテンシーを引き起こし、クラスターコミットキューに影響を与えるため、CDC 中のタスクのパフォーマンスに悪影響を及ぼす可能性があります。

ターゲットとして Redshift を使用するために必要な権限

GRANT コマンドを使用して、ユーザーまたはユーザー グループのアクセス権限を定義します。権限には、テーブルとビューのデータの読み取り、データの書き込み、テーブルの作成など、アクセスオプションが含まれます。Amazon Redshift での GRANT 使用についての詳細は、Amazon Redshift データベース デベロッパー ガイド の「GRANT」をご参照ください。

Amazon Redshift テーブルおよびビューに対するテーブルまたは、データベース、スキーマ、関数、プロシージャ、言語レベルの権限に対する特定の権限を付与する構文を次に示します。

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

Amazon Redshift テーブルとビューに対する列レベルの権限の構文を次に示します。

GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | GROUP group_name | PUBLIC } [, ...]

次に、指定されたロールを持つユーザーおよびグループに付与される ASSUMEROLE 権限の構文を示します。

GRANT ASSUMEROLE ON { 'iam_role' [, ...] | ALL } TO { username | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD } [, ...]

AWS Database Migration Service のターゲットとして Amazon Redshift を使用する場合の制限

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

  • Amazon Redshift ターゲットの中間ストレージとして使用する S3 バケットのバージョニングを有効にしないでください。S3 バージョニングが必要な場合は、ライフサイクルポリシーを使用して古いバージョンを積極的に削除します。そうしないと、S3 が原因でエンドポイントテスト接続エラーが発生する可能性がありますlist-objectコールタイムアウト。S3 バケットのライフサイクルポリシーを作成するには、「」を参照してください。ストレージのライフサイクルの管理。S3 オブジェクトのバージョンを削除するには、「」を参照してください。バージョニングが有効なバケットからのオブジェクトバージョンの削除

  • 以下の DDL はサポートされていません。

    ALTER TABLE table name MODIFY COLUMN column name data type;
  • AWS DMS は、名前がアンダースコア (_) で始まるスキーマへの変更を移行またはレプリケートできません。名前がアンダースコアで始まるスキーマがある場合は、マッピング変換を使用してターゲットでスキーマの名前を変更してください。

  • Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。従来のデータベースからの LOB を Amazon Redshift に保存することはできません。

  • 複数の列のプライマリキーを持つテーブルへの DELETE ステートメントの適用は、プライマリキーの列名で予約語が使用されている場合にはサポートされません。Amazon Redshift の予約語の一覧はここをご参照ください。

  • ソースシステムがソーステーブルのプライマリ キーに対して UPDATE 操作を実行すると、パフォーマンスの問題が発生することがあります。これらのパフォーマンスの問題は、ターゲットに変更を適用するときに発生します。これは、UPDATE (および DELETE) オペレーションは、ターゲット行を識別するためにプライマリ キーの値に依存するためです。ソーステーブルのプライマリ キーを更新すると、タスクログに次のようなメッセージが表示されます。

    Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  • DMS は Redshift クラスターのエンドポイントを構成するときにカスタム DNS 名をサポートしないため、Amazon が提供する DNS 名を使用する必要があります。Amazon Redshift クラスターはレプリケーション インスタンスと同じ AWS アカウントとリージョンにある必要があるため、カスタム DNS エンドポイントを使用すると検証が失敗します。

  • Amazon Redshift には、デフォルトで 4 時間のアイドルセッションタイムアウトがあります。DMS レプリケーションタスク内にアクティビティがない場合、Redshift は 4 時間後にセッションを切断します。DMS が接続できず、再起動が必要になる可能性があることが原因でエラーが発生する可能性があります。回避策として、DMS レプリケーションユーザーの SESSION TIMEOUT 制限を 4 時間より大きい値に設定します。または、「」の説明を参照してください。ALR USERAmazon Redshift データベース開発者ガイド

AWS Database Migration Service のターゲットとしての Amazon Redshift データベースの設定

Amazon Redshift インスタンスを使用できるように AWS Database Migration Service を設定する必要があります。以下の表では、Amazon Redshift エンドポイントに使用できる設定プロパティについて説明します。

プロパティ

説明

server

使用している Amazon Redshift クラスターの名前。

ポート

Amazon Redshift のポート番号。デフォルト値は 5439 です。

username

登録済みユーザーの Amazon Redshift ユーザー名。

パスワード

username プロパティで指定されたユーザーのパスワード。

データベース

使用する Amazon Redshift データウェアハウス (サービス) の名前。

Amazon Redshift エンドポイントに追加の接続文字列属性を追加する場合、 maxFileSize 属性と fileTransferUploadStreams 属性を指定できます。これらの属性の詳細については、「AWS DMS のターゲットとして Amazon Redshift を使用する場合の追加接続属性」をご参照ください。

Amazon Redshift で拡張された VPC ルーティングを AWS Database Migration Service のターゲットとして使用する

Amazon Redshift ターゲットで拡張された VPC のルーティングを使用すると、Amazon Redshift クラスターとデータリポジトリ間のすべての COPY トラフィックは VPC を介します。拡張された VPC ルーティングは、他のリソースに Amazon Redshift がアクセスする方法に影響を与えるため、VPC を正しく設定していないと、COPY コマンドが失敗することがあります。

AWS DMS がこの動作の影響を受けることがあるのは、COPY コマンドを使用して S3 内のデータを Amazon Redshift クラスターに移動するためです。

以下に示しているのは、AWS DMS が Amazon Redshift ターゲットにデータをロードするステップです。

  1. AWS DMS がソースからレプリケーションサーバー上の .csv ファイルにデータをコピーします。

  2. AWS DMS が AWS SDK を使用してアカウントの S3 バケットに .csv ファイルをコピーします。

  3. AWS DMS がその後、Amazon Redshift で COPY コマンドを使用して、S3 内の .csv ファイルから Amazon Redshift 内の該当するテーブルにデータをコピーします。

拡張された VPC ルーティングが有効でない場合、Amazon Redshift は AWS ネットワーク内のその他のサービスなどへのトラフィックを、インターネット経由でルーティングします。この機能が有効でない場合は、ネットワークパスを設定する必要はありません。この機能が有効な場合は、クラスターの VPC とデータリソースとの間のネットワークパスを別に作成する必要があります。必要な設定の詳細については、Amazon Redshift のドキュメントの「拡張された VPC ルーティング」をご参照ください。

Amazon Redshift ターゲットデータを暗号化する AWS KMS キーの作成と使用

ターゲットデータが Amazon Redshift にコピーされる前に、Amazon S3 にプッシュされるターゲットデータを暗号化できます。このため、カスタム AWS KMS キーを作成して使用できます。Amazon Redshift ターゲット エンドポイント作成時に次のいずれかのメカニズムを使用して、ターゲットデータを暗号化するために作成したキーを使用できます。

KMS キーを使用して Amazon Redshift ターゲットデータを暗号化するには、Amazon Redshift データにアクセスする権限がある AWS Identity and Access Management (IAM) ロールが必要です。次に、この IAM ロールは作成した暗号化キーに添付されるポリシー (キーポリシー) にアクセスします。これは、IAM コンソールで次を作成して実行します:

  • AWS が管理するポリシーがある IAM ロールです。

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

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

必要な AWS 管理ポリシーで IAM ロールを作成するには

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

  2. ナビゲーションペインで [Roles] (ロール) を選択します。[ロール] ページが開きます。

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

  4. 信頼されたエンティティとして選択された AWS サービス で、ロールを使用するサービスとして DMS を選択します。

  5. [Next: (次へ:)] を選択します アクセス許可. [Attach permissions policies (アクセス権限ポリシーをアタッチする)] ページが表示されます。

  6. AmazonDMSRedshiftS3Role ポリシーを見つけて選択します。

  7. [Next: (次へ:)] を選択します タグ タグの追加 ページが表示されます。ここでは、任意のタグを追加することができます。

  8. [Next: (次へ:)] を選択します 確認そして、結果を確認します。

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

DMS-Redshift-endpoint-access-role を使用したデータ移行のターゲットとして使用するように Amazon Redshiftデータベースを設定します。

を作成するにはAWS KMSIAM ロールを参照するキーポリシーがある暗号化キーを使用した

注記

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

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

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

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

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

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

    注記

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

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

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

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

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

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

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

  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-Redshift-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-Redshift-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] (終了) を選択します。[Encryption keys] (暗号化キー) ページが開き、AWS KMS key が作成されたことを示すメッセージが表示されます。

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

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

エンドポイントの設定を使用して、追加の接続属性の使用と同様に、Amazon Redshift ターゲットを構成できます。AWS CLI の --redshift-settings "json-settings" オプションで create-endpoint コマンドを使用してターゲットエンドポイントを作成するときに、これらの設定を指定できます。ここで、 json-settings とは、設定を指定するパラメータを含む JSON オブジェクトです。同じを含む .json ファイルを指定することもできます。json-settingsオブジェクト。たとえば、次のようになります。--redshift-settings file:///your-file-path/my_redshift_settings.json。 ここ,my_redshift_settings.json同じを含む .json ファイルの名前ですjson-settings object

エンドポイント設定に使用するパラメータの名前は、相当する追加の接続属性の名前と同じです。ただし、エンドポイント設定のパラメータの名前の最初の文字が大文字である場合は除きます。また、追加の接続属性を使用したすべての Amazon Redshift ターゲット エンドポイント設定で create-endpoint コマンドの --redshift-settings オプションが使用できるわけでもありません。使用できる設定の詳細についてはAWS CLIへの呼び出しcreate-endpoint「」を参照してください。CREATEAWS CLIコマンドリファレンスにとってAWS DMS。上述の設定についての詳細は、AWS DMS のターゲットとして Amazon Redshift を使用する場合の追加接続属性 の相当する追加の接続属性をご参照ください。

Amazon Redshift ターゲット エンドポイント設定を使用して、以下を設定できます:

  • カスタム AWS KMS データ暗号化キー。その後、このキーを使用して、データが Amazon Redshift にコピーされる前に、Amazon S3 にプッシュされるデータを暗号化できます。

  • Amazon Redshift に移行するデータ用の中間ストレージとしてのカスタム S3 バケット。

  • ブール値を PostgreSQL ソースからブール値としてマップします。デフォルトでは、ブール型は varchar (1) として移行されます。~ を指定できますMapBooleanAsBoolean以下の例に示すように、Redshift ターゲットが boolean 型を boolean 型として移行できるようにします。

    redshift-settings='{"MapBooleanAsBoolean": "true"}'

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

次の例では、S3 にプッシュされるデータを暗号化するカスタム KMS キーの設定を示しています。開始するには、AWS CLI で次の create-endpoint 呼び出しを行う場合があります。

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'

ここでは、--redshift-settings オプションで指定される JSON オブジェクトは 2 つのパラメータを定義します。1 つは、値が SSE_KMSEncryptionMode パラメータです。もう 1 つは、値が arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1ServerSideEncryptionKmsKeyId パラメータです。この値は、カスタム KMS キーの Amazon リソースネーム (ARN) です。

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

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_S3"}'

S3 サーバー側の暗号化の詳細については、Amazon Simple Storage Service ユーザーガイド の「サーバー側の暗号化を使用したデータの保護」をご参照ください。

注記

CLI modify-endpoint コマンドを使用して、既存のエンドポイントの EncryptionMode のパラメータ値を SSE_KMS から SSE_S3 に変更するすることもできます。しかし EncryptionMode の値を SSE_S3 から SSE_KMS に変えることはできません。

Amazon S3 バケットのセットアップ

Amazon Redshift ターゲットエンドポイントにデータを移行する際、AWS DMS はデフォルトの Amazon S3 バケットを中間タスクストレージとして使用し、その後移行されたデータを Amazon Redshift にコピーします。たとえば、Amazon Redshift ターゲットエンドポイントの作成例ではAWS KMSデータ暗号化キーは、このデフォルトの S3 バケットを使用します (データ暗号化に対する KMS キー設定).

代わりに、この中間ストレージにカスタム S3 バケットを指定することもできます。これを行うには、AWS CLI create-endpoint コマンドで --redshift-settings オプションの値に次のパラメータを含めます。

  • BucketName - S3 バケットストレージの名前として指定する文字列。

  • BucketFolder - (オプション) 指定された S3 バケットのストレージフォルダー名として指定できる文字列。

  • ServiceAccessRoleArn - S3 バケットへの管理アクセスを許可する IAM ロールの ARN。一般的に、 AmazonDMSRedshiftS3Role ポリシーに基づいてこのロールを作成します。例については、Amazon Redshift ターゲットデータを暗号化する AWS KMS キーの作成と使用 で、必要な AWS が管理するポリシーを持つ IAM ロールの作成手順 をご参照ください。

    注記

    create-endpoint コマンドの --service-access-role-arn オプションを使用して別の IAM ロールの ARN を指定した場合、その IAM ロールオプションが優先されます。

以下の例では、これらのパラメータを使用して、AWS CLI を使用した以下の create-endpoint コールでカスタム Amazon S3 バケットを指定しています。

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'

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

追加接続属性を使用して Amazon Redshift ターゲットを設定できます。これらの設定は、ターゲットエンドポイントを作成するときに指定します。接続属性の設定が複数ある場合は、空白を追加せずにそれぞれをセミコロンで区切ります。

次の表に、Amazon Redshift がターゲットであるときに使用できる追加接続属性を示します。

名前 説明

maxFileSize

Amazon Redshift へのデータ転送に使用される .csv ファイルの最大サイズ (KB 単位) を指定します。

デフォルト値: 32768 KB (32 メガバイト)

有効な値: 1~1,048,576

例: maxFileSize=512

fileTransferUploadStreams

1 つのファイルをアップロードするのに使用されるスレッドの数を指定します。

デフォルト値: 10

有効な値: 1~64

例: fileTransferUploadStreams=20

acceptanydate

0000-00-00 などの無効な日付形式を含む、あらゆる日付形式を受け入れるかどうかを指定します。ブール値。

デフォルト値: false

有効な値: true | false

例: acceptanydate=true

dateformat

日付形式を指定します。これは、文字列入力であり、デフォルトでは空です。デフォルトの形式は、YYYY-MM-DD ですが、DD-MM-YYYY などに変更できます。日の値または時間の値で異なる形式が使用される場合、dateformat パラメータとともに auto 引数を使用します。auto 引数は、dateformat 文字列を使用する場合にサポートされない形式を認識します。auto キーワードでは大文字小文字を区別します。

デフォルト値: 空

有効な値: 'dateformat_string' または auto

例: dateformat=auto

timeformat

時間形式を指定します。これは、文字列入力であり、デフォルトでは空です。auto 引数は、timeformat 文字列を使用する場合にサポートされない形式を認識します。日の値および時間の値でそれぞれ異なる形式が使用される場合、timeformat パラメータとともに auto 引数を使用します。

デフォルト値: 10

有効な値: 'timeformat_string' | 'auto' | 'epochsecs' | 'epochmillisecs'

例: timeformat=auto

emptyasnull

AWS DMS が空の CHAR および VARCHAR フィールドを null として移行するかどうかを指定します。値が true の場合、空の CHAR および VARCHAR フィールドが null として設定されます。

デフォルト値: false

有効な値: true | false

例: emptyasnull=true

truncateColumns

列の仕様に合うよう、該当する文字数で列のデータを切り捨てます。データ型が VARCHAR または CHAR の列、およびサイズが 4 MB 以下の行にのみ適用されます。

デフォルト値: false

有効な値: true | false

例:

truncateColumns=true;

removeQuotes

入力データの文字列を囲む引用符を削除します。区切り記号を含む引用符内のすべての文字は保持されます。Amazon Redshift ターゲットの引用符を削除する詳細については、「Amazon Redshift データベース デベロッパーガイド」をご参照ください。

デフォルト値: false

有効な値: true | false

例:

removeQuotes=true;

trimBlanks

VARCHAR 文字列から末尾の空白文字を削除します。このパラメータは VARCHAR データ型の列にのみ適用されます。

デフォルト値: false

有効な値: true | false

例:

trimBlanks=false;

encryptionMode データが Amazon Redshift にコピーされる前に S3 にデータをプッシュするために使用するサーバー側の暗号化モードを指定します。有効な値は、SSE_S3 (S3 サーバー側の暗号化) または SSE_KMS (KMS キーの暗号化) です。SSE_KMS を選択する場合、暗号化のために使用する KMS キーの Amazon リソースネーム (ARN) に serverSideEncryptionKmsKeyId パラメータを設定します。
注記

CLI modify-endpoint コマンドを使用して、既存のエンドポイントの encryptionMode のパラメータ値を SSE_KMS から SSE_S3 に変更するすることもできます。しかし encryptionMode の値を SSE_S3 から SSE_KMS に変えることはできません。

デフォルト値: SSE_S3

有効な値: SSE_S3 または SSE_KMS

例: encryptionMode=SSE_S3;

serverSideEncryptionKmsKeyId SSE_KMSencryptionModeを設定する場合、KMS キーの ARN にこのパラメータを設定します。アカウントに作成した AWS KMS キーのリスト内でキーエイリアスを選択すると、この ARN が見つかります。キーを作成するとき、特定のポリシーとロールをこのキーに関連付ける必要があります。詳細については、「Amazon Redshift ターゲットデータを暗号化する AWS KMS キーの作成と使用」をご参照ください。

例:

serverSideEncryptionKmsKeyId=arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1;

enableParallelBatchInMemoryCSVFiles ParallelLoadThreads のタスク設定を使用する際、この属性を false に設定します。enableParallelBatchInMemoryCSVFiles 属性は、DMS がメモリではなくディスクに書き込むことにより、大規模なマルチスレッドの全ロードタスクのパフォーマンスを向上させます。デフォルト値は true です。
compressCsvFile この属性を使用して、移行中に Redshift ターゲットに送信されるデータを圧縮します。デフォルト値は です。true「」。デフォルトでは、圧縮は有効になっています。

Amazon Redshift のマルチスレッドタスク設定

マルチスレッドタスク設定を使用して Amazon Redshift ターゲット エンドポイントの全ロードと変更データ キャプチャ (CDC) タスクのパフォーマンスを向上させることができます。これを行うには、同時スレッドの数とバッファに保存するレコード数を指定できます。

Amazon Redshift でのマルチスレッド全ロードタスク設定

全負荷のパフォーマンスを促進するには、以下の ParallelLoad* タスク設定を使用します:

  • ParallelLoadThreads – データレコードを Amazon Redshift ターゲットエンドポイントにプッシュするために全ロード中に DMS が使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。

    ParallelLoadThreads タスク設定を使用する際、enableParallelBatchInMemoryCSVFiles 属性を false に設定することができます。この属性は、DMS がメモリではなくディスクに書き込むことにより、大規模なマルチスレッドの全ロードタスクのパフォーマンスを向上させます。デフォルト値は true です。

  • ParallelLoadBufferSize — Redshift ターゲットで並列ロード スレッドを使用しているときの最大データレコード要求を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、 ParallelLoadThreads > 1 (1 より大きい)。

注記

AWS DMS バージョン 3.4.5 以降では、全ロード中に Amazon Redshift ターゲット エンドポイントに対して、ParallelLoad* タスク設定の使用がサポートされています。

ReplaceInvalidChars Redshift エンドポイント設定は、変更データ キャプチャ (CDC) 中または並列ロードが有効な全ロード移行タスク中での使用には対応していません。並列ロードが有効でない場合、全ロード移行でサポートされます。詳細については、「」を参照してください。RedshiftSettingsAWS Database Migration ServiceAPI リファレンス

Amazon Redshift のマルチスレッド CDC タスク設定

CDC のパフォーマンスを向上させるため、以下の ParallelApply* タスク設定を使用できます:

  • ParallelApplyThreads – データレコードを Amazon Redshift ターゲット エンドポイントにプッシュするために CDC ロード中に AWS DMS が使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。

  • ParallelApplyBufferSize — Redshift ターゲットで並列適用スレッドを使用しているときの最大データレコード要求を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、 ParallelApplyThreads > 1 (1 より大きい)。

    Redshift をターゲットとして最大のメリットを得るには、ParallelApplyBufferSize の値は ParallelApplyThreads の少なくとも2倍(2倍以上)の数の数にしてください。

注記

AWS DMS バージョン 3.4.3 以降では、CDC 中に Amazon Redshift ターゲット エンドポイントに対して、ParallelApply* タスク設定の使用がサポートされています。

適用される並列度のレベルは、データの転送に使用される [batch size] (バッチサイズ) と[maximum file size] (最大ファイルサイズ) 合計間の相関関係によって異なります。Redshift ターゲットでマルチスレッド CDC タスク設定を使用する場合、バッチサイズが最大ファイルサイズに対して大きい場合にメリットが得られます。例えば、エンドポイントとタスクの設定の次の組み合わせを使用して、最適なパフォーマンスをチューニングできます。

// Redshift endpoint setting MaxFileSize=250000; // Task settings BatchApplyEnabled=true; BatchSplitSize =8000; BatchApplyTimeoutMax =1800; BatchApplyTimeoutMin =1800; ParallelApplyThreads=32; ParallelApplyBufferSize=100;

上記の設定を使用すると、トランザクション ワークロードが重いお客様は、8000 MB のバッチバッファが 1800 秒でいっぱいになり、最大 250 MB のファイル サイズを持つ 32 本の並列スレッドを使用することでメリットが得られます。

詳細については、「変更処理のチューニング設定」をご参照ください。

注記

Redshift クラスターへの継続的レプリケーション中に実行される DMS クエリは、実行中の他のアプリケーション クエリと同じ WLM (ワークロード管理) キューを共有できます。そのため、Redshift ターゲットへの継続的なレプリケーション中にパフォーマンスに影響を与えるように WLM プロパティを適切に設定することを検討してください。例えば、他のパラレル ETL クエリが実行されている場合、DMS の実行が遅くなり、パフォーマンスは向上しなくなります。

Amazon Redshift のターゲットデータ型

AWS DMS の Amazon Redshift エンドポイントでは、Amazon Redshift のほとんどのデータ型がサポートされます。以下の表に、AWS DMS を使用する場合にサポートされる Amazon Redshift のターゲットデータ型と、AWS DMS のデータ型からのデフォルトマッピングを示します。

AWS DMS のデータ型の詳細については、「AWS Database Migration Service のデータ型」をご参照ください。

AWS DMS データ型

Amazon Redshift のデータ型

BOOLEAN

BOOL

BYTES

VARCHAR (長さ)

DATE

DATE

TIME

VARCHAR(20)

DATETIME

スケールが 0 以上、6 以下の場合 (Redshift ターゲット列タイプによる)。

タイムスタンプ (s)

TIMESTAMPTZ (s) — ソースタイムスタンプにゾーンオフセットが含まれている場合 (SQL Server や Oracle など)、挿入/更新時に UTC に変換されます。オフセットが含まれていない場合、時間はすでに UTC で考慮されます。

スケールが 7 以上、9 以下の場合

VARCHAR(37)

INT1

INT2

INT2

INT2

INT4

INT4

INT8

INT8

NUMERIC

スケールが 0 以上、37 以下の場合

NUMERIC (p,s)

スケールが 38 以上、127 以下の場合

VARCHAR (長さ)

REAL4

FLOAT4

REAL8

FLOAT8

STRING

長さが 1 ~ 65,535 の場合、VARCHAR (バイト単位の長さ) を使用します

長さが 65,536 ~ 2,147,483,647 の場合、VARCHAR (65535) を使用します

UINT1

INT2

UINT2

INT2

UINT4

INT4

UINT8

NUMERIC (20,0)

WSTRING

長さが 1 ~ 65,535 の場合、NVARCHAR (バイト単位の長さ) を使用します

長さが 65,536 ~ 2,147,483,647 の場合、NVARCHAR (65535) を使用します

BLOB

VARCHAR (最大 LOB サイズ *2)

最大 LOB サイズが 31 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。

NCLOB

NVARCHAR (最大 LOB サイズ)

最大 LOB サイズが 63 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。

CLOB

VARCHAR (最大 LOB サイズ)

最大 LOB サイズが 63 KB を超えることはできません。Amazon Redshift は 64 KB より大きい VARCHAR をサポートしていません。