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 データベースを使用すると、サポートされている他のすべてのソースデータベースからデータを移行できます。

AWS DMS のターゲットとして Amazon Redshift Serverless を使用できます。詳細については、「Amazon Redshift Serverless をターゲットする AWS DMS の使用」を参照してください。

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 に保存することはできません。

  • true にターゲット メタデータタスクの設定 BatchApplyEnabled を設定し、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 レプリケーションユーザーのセッションタイムアウト制限を 4 時間以上に設定します。または、「Amazon Redshift データベースデベロッパーガイド」の ALTER USER の説明を参照してください。

  • AWS DMS がプライマリキーや一意のキーを使用せずにソーステーブルデータをレプリケートすると、CDC レイテンシーが増大し、パフォーマンスが許容できないレベルとなる可能性があります。

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

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

プロパティ

説明

server

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

ポート

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

username

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

password

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

データベース

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

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

AWS Database Migration Service のターゲットとしての Amazon Redshift での VPC ルーティングの使用

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: Permissions]‬ (次へ: アクセス許可) を選択します。[Attach permissions policies (アクセス権限ポリシーをアタッチする)] ページが表示されます。

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

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

  8. [Next: Review (次の手順: 確認)] を選択し、結果を確認します。

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

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

この IAM ロールを参照するキーポリシーを持つ AWS KMS 暗号化キーを作成するには
注記

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. ナビゲーションペインで、[カスタマーマネージドキー] を選択します。

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

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

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

追加の接続属性の使用と同様、エンドポイントの設定を使用して、ターゲットの Amazon Redshift データベースを設定できます。ターゲットエンドポイントを作成する際に、AWS DMS コンソールを使用するか、AWS CLI--redshift-settings '{"EndpointSetting": "value", ...}' の JSON 構文を指定して create-endpoint コマンドを使用して設定を指定します。

次の表は、ターゲットとして Amazon Redshift を使用できるエンドポイント設定を説明しています。

名前 説明

MaxFileSize

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

デフォルト値: 32768 KB (32 MB)

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

例: --redshift-settings '{"MaxFileSize": 512}'

FileTransferUploadStreams

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

デフォルト値: 10

有効な値: 1~64

例: --redshift-settings '{"FileTransferUploadStreams": 20}'

Acceptanydate

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

デフォルト値: false

有効な値: true | false

例: --redshift-settings '{"Acceptanydate": true}'

Dateformat

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

デフォルト値: 空

有効値: "dateformat_string" または auto

例:--redshift-settings '{"Dateformat": "auto"}'

Timeformat

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

デフォルト値: 10

有効値: "Timeformat_string" | "auto" | "epochsecs" | "epochmillisecs"

例:--redshift-settings '{"Timeformat": "auto"}'

Emptyasnull

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

デフォルト値: false

有効な値: true | false

例: --redshift-settings '{"Emptyasnull": true}'

TruncateColumns

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

デフォルト値: false

有効な値: true | false

例: --redshift-settings '{"TruncateColumns": true}'

RemoveQuotes

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

デフォルト値: false

有効な値: true | false

例: --redshift-settings '{"RemoveQuotes": true}'

TrimBlanks

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

デフォルト値: false

有効な値: true | false

例: --redshift-settings '{"TrimBlanks": true}'

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

例:--redshift-settings '{"EncryptionMode": "SSE_S3"}'

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

例: --redshift-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'

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

データ暗号化キーと中間ストレージとしての Amazon S3 バケットの使用

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

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

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

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

    --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 にコピーします。例えば、AWS KMS データ暗号化キーを使用して Amazon Redshift ターゲットエンドポイントを作成する例では、このデフォルトの S3 バケットを使用します (データ暗号化に対する KMS キー設定 を参照)。

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

  • BucketName - S3 バケットストレージの名前として指定する文字列。サービスアクセスロールが AmazonDMSRedshiftS3Role ポリシーに基づいている場合、この値には dms- というプレフィックスが必要です (dms-my-bucket-name など)。

  • 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"}'

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 より大きい) 場合に使用することをお勧めします。

注記

フルロードから Amazon Redshift ターゲットエンドポイントへの ParallelLoad* タスク設定の使用のサポートは、AWS DMS バージョン 3.4.3 以降で利用できます。

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

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倍以上)の数の数にしてください。

注記

CDC から Amazon Redshift ターゲットエンドポイントへの ParallelApply* タスク設定の使用のサポートは、AWS DMS バージョン 3.4.3 以降で利用できます。

適用される並列度のレベルは、データの転送に使用される [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;

上記の例の設定を使用すると、重いトランザクションワークロードがある場合、最大ファイルサイズ 250 MB で 32 の並列スレッドを利用し、1,800 秒でフルになる 8,000 レコードのバッチバッファーを最大限に活用できます。

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

注記

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 など)、insert または update 時に 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 をサポートしていません。

Amazon Redshift Serverless をターゲットする AWS DMS の使用

AWS DMS は、ターゲットエンドポイントとして Amazon Redshift Serverless の使用をサポートします。Amazon Redshift Serverless の使用の詳細については、「Amazon Redshift 管理ガイド」の「Amazon Redshift Serverless」を参照してください。

このトピックでは、AWS DMS で Amazon Redshift Serverless のエンドポイントを使用する方法について説明します。

注記

Amazon Redshift Serverless エンドポイントを作成する場合、RedshiftSettings エンドポイント設定の [DatabaseName] フィールドに Amazon Redshift データウェアハウス名またはワークグループエンドポイント名を使用します。[ServerName] フィールドには、サーバーレスクラスターの [ワークグループ] ページに表示されるエンドポイントの値を使用します (default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com など)。エンドポイント作成の詳細については、「ソースおよびターゲットエンドポイントの作成」を参照してください。ワークグループエンドポイントの詳細については、「Amazon Redshift Serverless への接続」を参照してください。

Amazon Redshift Serverless をターゲットとする信頼ポリシー

Amazon Redshift Serverless をターゲットエンドポイントとして使用する場合、次の強調表示されたセクションを信頼ポリシーに追加する必要があります。このポリシーは、dms-access-for-endpoint ロールにアタッチされます。

{ "PolicyVersion": { "CreateDate": "2016-05-23T16:29:57Z", "VersionId": "v3", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "arn:aws:service:region:account:resourcetype/id", "Effect": "Allow" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "redshift-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "IsDefaultVersion": true } }

AWS DMS での信頼ポリシーの使用方法の詳細については、「AWS CLI および AWS DMS API で使用する IAM ロールの作成」を参照してください。

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

Redshift Serverless をターゲットとして使用する場合、次の制限があります。