Amazon Timestream を AWS Database Migration Service のターゲットとして使用する - AWS Database Migration Service

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

Amazon Timestream を AWS Database Migration Service のターゲットとして使用する

AWS Database Migration Service を使用して、ソースデータベースから Amazon Timestream ターゲットエンドポイントにデータを移行できます。フルロードおよび CDC データ移行がサポートされます。

Amazon Timestream は、大量のデータインジェスト用に構築された、高速でスケーラブルなサーバーレスの時系列データベースサービスです。時系列データは、一定の間隔で収集された一連のデータポイントで、時間の経過とともに変化するイベントの測定に使用します。IoT アプリケーション、 DevOps アプリケーション、分析アプリケーションからメトリクスを収集、保存、分析するために使用されます。Timestream にデータを保存すると、データの傾向やパターンをほぼリアルタイムで視覚化して特定できます。Amazon Timestream の詳細については、「Amazon Timestream デベロッパーガイド」の「Amazon Timestream とは」を参照してください。

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

Amazon Timestream を AWS DMS のターゲットとして設定する前に、IAM ロールを必ず作成してください。このロールにより、AWS DMS は Amazon Timestream に移行されるデータにアクセスできるようになります。Timestream への移行に使用するロールの最低限のアクセス許可は、次の IAM ポリシーに示されます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDescribeEndpoints", "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints" ], "Resource": "*" }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "timestream:ListTables", "timestream:DescribeDatabase" ], "Resource": "arn:aws:timestream:region:account_id:database/DATABASE_NAME" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "timestream:DeleteTable", "timestream:WriteRecords", "timestream:UpdateTable", "timestream:CreateTable" ], "Resource": "arn:aws:timestream:region:account_id:database/DATABASE_NAME/table/TABLE_NAME" } ] }

すべてのテーブルを移行する場合は、上の例の TABLE_NAME として * を使用します。

Timestream をターゲットとして使用する場合は、次の点に注意してください。

  • タイムスタンプが 1 年を超える履歴データを取り込む場合は、AWS DMS を使用してデータをカンマ区切り値 (csv) 形式で Amazon S3 に書き込むことをお勧めします。次に、Timestream のバッチロードを使用してデータを Timestream に取り込みます。詳細については、「Amazon Timestream デベロッパーガイド」の「Timestream でのバッチロードの使用」を参照してください。https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html

  • 1 年未満のデータをフルロードで移行する場合は、Timestream テーブルのメモリストア保持期間を最も古いタイムスタンプ以上に設定することをお勧めします。次に、移行が完了したら、テーブルのメモリストア保持期間を編集して希望の値に変更します。例えば、データの最も古いタイムスタンプが 2 か月前である場合、このデータを移行するには、次の操作を行います。

    • Timestream ターゲットテーブルのメモリストア保持期間を 2 か月に設定します。

    • AWS DMS を使用してデータ移行を開始します。

    • データ移行が完了したら、ターゲット Timestream テーブルの保持期間を希望の値に変更します。

    以下のページの情報を使用して、移行前にメモリストアのコストを見積もることをお勧めします。

  • CDC データ移行では、取り込まれたデータがメモリストア保持期間の範囲内に収まるように、ターゲットテーブルのメモリストア保持期間を設定することをお勧めします。詳細については、「Amazon Timestream デベロッパーガイド」の「書き込みのベストプラクティス」を参照してください。https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html

マルチスレッド全ロードタスク設定

データ転送を速くするために、AWS DMS は、これらのタスク設定を使用した Timestream ターゲットエンドポイントへのマルチスレッド全ロード移行タスクをサポートしています。

  • MaxFullLoadSubTasks - このオプションを使用して、並列ロードするソーステーブルの最大数を指定します。DMS は、専用のサブタスクを使用して、対応する Amazon Timestream ターゲットテーブルに各テーブルをロードします。デフォルトは 8、最大値は 49 です。

  • ParallelLoadThreads - このオプションを使用して、AWS DMS が各テーブルを Amazon Timestream ターゲットテーブルにロードするために使用するスレッド数を指定します。Timestream ターゲットの最大値は 32 です。この上限を増やすよう依頼できます。

  • ParallelLoadBufferSize – このオプションを使用して、Amazon Timestream ターゲットにデータをロードするために並列ロードスレッドで使用する、バッファ内に保存するレコードの最大数を指定します。デフォルト値は 50 です。最大値は 1000 です。この設定は ParallelLoadThreads で使用します。ParallelLoadBufferSize は、複数のスレッドがある場合にのみ有効です。

  • ParallelLoadQueuesPerThread - このオプションを使用して、各同時スレッドがキューからデータレコードを取り出し、ターゲットのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルト は 1 です。ただし、さまざまなペイロードサイズの Amazon Timestream ターゲットの場合、有効な範囲は 1 スレッドあたり 5~512 キューです。

マルチスレッド CDC ロードタスクの設定

CDC のパフォーマンスを向上させるため、AWS DMS では次のタスク設定をサポートしています。

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

  • ParallelApplyBufferSize – 同時スレッドが CDC ロード中に Timestream ターゲットエンドポイントにプッシュするために、各バッファキューに保存するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、ParallelApplyThreads で複数のスレッドを指定する場合に使用します。

  • ParallelApplyQueuesPerThread – 各スレッドがキューからデータレコードを取り出し、CDC 中に Timestream エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定します。デフォルト値は 1、最大値は 512 です。

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

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

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

名前 説明

MemoryDuration

この属性を設定して保持期間を指定し、移行したデータを Timestream のメモリストアに保存します。時間は時間単位で測定されます。Timestream のメモリストアは、高い取り込みスループットと高速アクセスを実現するように最適化されています。

デフォルト値: 24 (時間)

有効な値: 1~8,736 (1 時間~12 か月を時間単位で測定)

例: --timestream-settings '{"MemoryDuration": 20}'

DatabaseName

この属性を設定して、ターゲット Timestream データベース名を指定します。

タイプ: 文字列

例: --timestream-settings '{"DatabaseName": "db_name"}'

TableName

この属性を設定して、ターゲット Timestream テーブル名を指定します。

タイプ: 文字列

例: --timestream-settings '{"TableName": "table_name"}'

MagneticDuration

この属性を設定して、Timestream テーブルに適用されるマグネティック持続時間を日単位で指定します。これは取り込まれたデータの保持期間です。Timestream は、保存期間を超えるタイムスタンプをすべて削除します。詳細については、「Amazon Timestream デベロッパーガイド」の「ストレージ」をご覧ください。https://docs.aws.amazon.com/timestream/latest/developerguide/

例: --timestream-settings '{"MagneticDuration": "3"}'

CdcInsertsAndUpdates

この属性を true に設定すると、AWS DMS が挿入と更新のみを適用し、削除を適用しないように指定できます。Timestream ではレコードの削除を許可しないため、この値は false となり、AWS DMS は Timestream データベース内の対応するレコードを削除せずに NULL にします。詳細については、「制限事項」を参照してください。

デフォルト値: false

例: --timestream-settings '{"CdcInsertsAndUpdates": "true"}'

EnableMagneticStoreWrites

この属性を true に設定し、マグネティックストアの書き込みを有効にします。この値が false の場合、AWS DMS はデフォルトではマグネティックストアの書き込みを許可しないため、ターゲットテーブルのメモリストア保持期間より古いタイムスタンプのレコードは書き込まれません。詳細については、「Amazon Timestream デベロッパーガイド」の「書き込みのベストプラクティス」を参照してください。https://docs.aws.amazon.com/timestream/latest/developerguide/

デフォルト値: false

例: --timestream-settings '{"EnableMagneticStoreWrites": "true"}'

Amazon Timestream ターゲットエンドポイントの作成と変更

IAM ロールを作成して最小限のアクセス許可を設定すると、AWS DMS コンソールを使用するか、AWS CLIcreate-endpoint コマンドを --timestream-settings '{"EndpointSetting": "value", ...}' JSON 構文で使用して、Amazon Timestream ターゲットエンドポイントを作成できます。

以下の例は、AWS CLI を使用して Timestream ターゲットエンドポイントを作成および変更する方法を示しています。

Timestream ターゲットエンドポイントの作成コマンド

aws dms create-endpoint —endpoint-identifier timestream-target-demo --endpoint-type target —engine-name timestream --service-access-role-arn arn:aws:iam::123456789012:role/my-role --timestream-settings { "MemoryDuration": 20, "DatabaseName":"db_name", "MagneticDuration": 3, "CdcInsertsAndUpdates": true, "EnableMagneticStoreWrites": true, }

Timestream ターゲットエンドポイントの変更コマンド

aws dms modify-endpoint —endpoint-identifier timestream-target-demo --endpoint-type target —engine-name timestream --service-access-role-arn arn:aws:iam::123456789012:role/my-role --timestream-settings { "MemoryDuration": 20, "MagneticDuration": 3, }

データを Timestream トピックに移行するためのオブジェクトマッピングの使用

AWS DMS は、テーブルマッピングルールを使用して、ソースのデータをターゲット Timestream トピックにマッピングします。ターゲットトピックにデータをマッピングするために、オブジェクトマッピングと呼ばれるテーブルマッピングルールのタイプを使用します。オブジェクトマッピングを使用して、ソースのデータレコードをどのように Timestream トピックに発行されたデータレコードにマッピングするかを定義します。

Timestream トピックには、パーティションキー以外にプリセット構造はありません。

注記

オブジェクトマッピングは必ずしも使用する必要はありません。通常のテーブルマッピングは、さまざまな変換に使用できます。ただし、パーティションキータイプは次のデフォルト動作に従います。

  • プライマリキーはフルロードのパーティションキーとして使用されます。

  • 並行適用タスク設定を使用しない場合は、schema.table が CDC のパーティションキーとして使用されます。

  • 並列適用タスク設定を使用する場合、プライマリキーは CDC のパーティションキーとして使用されます。

オブジェクトマッピングルールを作成するには、object-mapping として rule-type を指定します。このルールが、使用したいオブジェクトマッピングのタイプを指定します。ルールの構造は次のとおりです。

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "id", "rule-name": "name", "rule-action": "valid object-mapping rule action", "object-locator": { "schema-name": "case-sensitive schema name", "table-name": "" } } ] }

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "1", "rule-name": "timestream-map", "rule-action": "map-record-to-record", "target-table-name": "tablename", "object-locator": { "schema-name": "", "table-name": "" }, "mapping-parameters": { "timestream-dimensions": [ "column_name1", "column_name2" ], "timestream-timestamp-name": "time_column_name", "timestream-multi-measure-name": "column_name1or2", "timestream-hash-measure-name": true or false, "timestream-memory-duration": x, "timestream-magnetic-duration": y } } ] }

AWS DMS では現在、rule-action パラメータに対する有効な値として map-record-to-record および map-record-to-document のみがサポートされています。map-record-to-record および map-record-to-document の値は、exclude-columns 属性リストの一部として除外されてないものとして AWS DMS がデフォルトで記録するものを指定します。これらの値は、どのような方法でも属性マッピングに影響しません。

リレーショナルデータベースから Timestream トピックに移行する場合は map-record-to-record を使用します。このルールタイプでは、Timestream トピックのパーティションキーとしてリレーショナルデータベースの taskResourceId.schemaName.tableName 値を使用し、ソースデータベース内の各列の属性を作成します。map-record-to-record を使用する場合、exclude-columns 属性リストに示されていないソーステーブル内の列について、AWS DMS はターゲットトピックに対応する属性を作成します。この対応する属性は、そのソース列が属性マッピングで使用されているかどうかにかかわらず作成されます。

map-record-to-record を理解するための 1 つの方法は、実際の動作を確認することです。この例では、次の構造とデータを含むリレーショナルデータベースのテーブルの行から始めると想定してください。

FirstName LastName StoreId HomeAddress HomePhone WorkAddress WorkPhone DateofBirth

Randy

Marsh

5

221B Baker Street

1234567890

31 Spooner Street, Quahog

9876543210

02/29/1988

この情報を Test という名前のスキーマから Timestream トピックに移行するには、データをターゲットトピックにマッピングするルールを作成します。以下のルールはマッピングを示しています。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToTimestream", "rule-action": "map-record-to-record", "object-locator": { "schema-name": "Test", "table-name": "Customers" } } ] }

Timestream トピックとパーティションキー (この例では taskResourceId.schemaName.tableName) を指定した場合、Timestream ターゲットトピックのサンプルデータを使用した結果のレコード形式は次のとおりです。

{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "HomeAddress": "221B Baker Street", "HomePhone": "1234567890", "WorkAddress": "31 Spooner Street, Quahog", "WorkPhone": "9876543210", "DateOfBirth": "02/29/1988" }

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

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

  • ディメンションとタイムスタンプ: Timestream はソースデータ内のディメンションとタイムスタンプを複合プライマリキーのように使用します。また、これらの値を更新することを許可しません。つまり、ソースデータベース内のレコードのタイムスタンプまたはディメンションを変更すると、Timestream データベースは新しいレコードを作成しようとします。そのため、レコードのディメンションまたはタイムスタンプを別の既存のレコードと一致するように変更すると、AWS DMS は、新しいレコードを作成したり、以前の対応するレコードを更新したりせずに、別のレコードの値を更新します。

  • DDL コマンド: AWS DMS の現在のリリースでは CREATE TABLE および DROP TABLE DDL コマンドのみをサポートしています。

  • レコードの制限: Timestream には、レコードサイズやメジャーサイズなど、レコードに関する制限があります。詳細については、「Amazon Timestream デベロッパーガイド」の「クォータ」を参照してください。https://docs.aws.amazon.com/

  • レコードと NULL 値の削除: Timestream はレコードの削除をサポートしていません。ソースから削除されたレコードの移行をサポートするために、AWS DMS は、Timestream ターゲットデータベースのレコード内の対応するフィールドをクリアします。AWS DMS は、対応するターゲットレコード内のフィールドの値を、数値フィールドの場合は 0、テキストフィールドの場合は null、ブールフィールドの場合は false に変更します。

  • ターゲットとしての Timestream は、リレーショナルデータベース (RDBMS) 以外のソースをサポートしていません。

  • AWS DMS は、以下のリージョンでのみ、Timestream をターゲットとしてサポートしています。

    • 米国東部(バージニア北部)

    • 米国東部 (オハイオ)

    • 米国西部 (オレゴン)

    • 欧州 (アイルランド)

    • 欧州 (フランクフルト)

    • アジアパシフィック(シドニー)

    • アジアパシフィック(東京)

  • ターゲットとしての Timestream は、TargetTablePrepModeTRUNCATE_BEFORE_LOAD に設定することをサポートしていません。この設定で DROP_AND_CREATE を使用しないことをお勧めします。