AWS Database Migration Service
ユーザーガイド (Version API Version 2016-01-01)

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

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

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

​ターゲットとして Amazon Redshift データベースを使用する場合、AWS DMS では以下のものがサポートされません。

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

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

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

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

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

プロパティ

説明

server

使用する Amazon Redshift クラスターの名前。

port

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 Key Management Service (AWS KMS) キーを作成して使用できます。Amazon Redshift エンドポイント作成時に次のいずれかのメカニズムを使用して、ターゲットデータを暗号化するために作成したキーを使用できます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. IAM コンソールで、ナビゲーションペインの [暗号化キー] を選択します。

    初めてこのオプションにアクセスする場合には AWS Key Management Service の紹介が表示され、[今すぐ始める] を選択して開始することができます。それ以外の場合は、[暗号化キー] ページが開きます。

  2. [キーの作成] を選択します。[エイリアスと説明の作成] ページが開きます。

  3. キーのエイリアス (DMS-Redshift-endpoint-encryption-key など) と必要な説明を入力します。

  4. [アドバンスドオプション] を選択します。[詳細オプション] セクションで [キーマテリアルオリジン] に [KMS] が選択されていることを確認し、[次のステップ] を選択します。[タグの追加] ページが開きます。

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

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

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

  8. [ロール] で Amazon Redshift ターゲットデータの暗号化へのアクセスを有効化するために以前に作成したロール (DMS-Redshift-endpoint-access-role など) を選択します。その後、[Next Step] を選択します。

    [キーポリシーのプレビュー] ページが開き、レビューできるキーポリシーの JSON が表示されます。ここでは、前のステップで選択したロールを参照するキーポリシーを表示できます。また、次の例に示すように、異なるプリンシパル (ユーザーとロール) に許可される別々のキーアクションも確認できます。

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::944454115380:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::944454115380: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::944454115380:role/DMS-Redshift-endpoint-access-role" ] }, "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::944454115380:role/DMS-Redshift-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }
  9. [Finish] を選択します。[暗号化キー] ページが開き、マスター暗号化キーが作成されたことを示すメッセージが表示されます。

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

注記

また、AWS Key Management Service を使用し、IAM のロールとポリシーで KMS キーを作成して管理することもできます。詳細については、「キー管理サービス (KMS): 開発者ガイド」を参照してください。

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

Amazon Redshift ターゲットを構成するために、エンドポイントの設定を使用できます。AWS CLI の --redshift-settings "json-settings-object" オプションで create-endpoint コマンドを使用してターゲットエンドポイントを作成するときに、これらの設定を指定できます。ここで、 json-settings-object とは、設定を指定するパラメータを含む JSON オブジェクトです。

KMS キー設定

Amazon Redshift ターゲットエンドポイント設定を使用して、カスタム AWS KMS キーを構成できます。その後、このキーを使用して、データが Amazon Redshift にコピーされる前に、Amazon S3 にプッシュされるデータを暗号化できます。

次の例では、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:944454115380:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'

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

デフォルトでは、S3 データ暗号化はデフォルトのアカウント KMS キーを使用して行われます。前述の例の 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"}'

デフォルトのアカウント KMS キーを使用する詳細については、「暗号化キーの設定と KMS のアクセス許可の指定」を参照してください。

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

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

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

名前 説明

maxFileSize

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

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

有効な値: 1 ~ 1048576

例: 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 Database Developer Guide』を参照してください。

デフォルト値: false

有効な値: true | false

例:

removeQuotes=true;

trimBlanks

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

デフォルト値: false

有効な値: true | false

例:

trimBlanks=false;

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

デフォルト値: SSE_S3

有効な値: SSE_S3 または SSE_KMS

例:

encryptionMode=SSE_S3;

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

例:

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

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

Amazon Redshift の AWS DMS エンドポイントでは、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 以下の場合

TIMESTAMP (s)

スケールが 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 をサポートしていません。