時系列データを扱うのに最適化されているAmazon Timestream(以下、Timestream) は Amazon Managed Grafana のデータソースにできるため、データ活用も容易になりました。そのため、Timestreamに移行したいと考える方もいるのではないでしょうか。
移行となると収集済みのデータ、すなわち過去データをTimestreamに書き込む必要があります。ここでは、判明している仕様や検証結果を紹介します。
2022年7月、Amazon Timestreamが東京リージョンでGAしています。
書き込み可能な期間
Amazon Timestream のメモリストアの保持期間、もしくは、マグネティックストレージの書き込みオプションを有効化したマグネティックストアの保持期間で指定している期間が書き込めます。
例えばメモリストアの保持期間を 1day と指定したテーブルには、現時刻から -24 時間の期間を指定したレコードが書き込めます。
そして Memory store retention は最大で 12months (= 1年) が指定できるため、移行可能な期間は最大で過去1年分となります。
→ AWS re:Invent 2021 で、マグネティックストレージに直接書き込めるようになったため、マグネティックストアの最大 = 過去100年分まで書き込めるようになりました。
ref: Amazon Timestreamに100年前の過去データを保存できるようになっていた件
検証
AWS CLIから書き込みできます。
データのタイムスタンプは Time
となります。ここは date
でUNIX時間を指定しました。
date --date '-365 day'
で365日前を指定 (= 保持期間の期間内)
$ export DB="tsdb1"
$ export TBL="data1"
$ export IID=$(uuidgen)
$ export TS=$(date --date '-365 day' +%s%3N)
$ aws timestream-write write-records --database-name ${DB} --table-name ${TBL} --records "Dimensions=[{Name=iid,Value=${IID}},{Name=d1,Value=example1}],Time=${TS},MeasureName=val1,MeasureValueType=BIGINT,MeasureValue=${RANDOM}"
## => 成功
date --date '-366 day'
で366日前を指定 (= 保持期間よりも過去)
$ export DB="tsdb1"
$ export TBL="data1"
$ export IID=$(uuidgen)
$ export TS=$(date --date '-366 day' +%s%3N)
$ aws timestream-write write-records --database-name ${DB} --table-name ${TBL} --records "Dimensions=[{Name=iid,Value=${IID}},{Name=d1,Value=example1}],Time=${TS},MeasureName=val1,MeasureValueType=BIGINT,MeasureValue=${RANDOM}"
An error occurred (RejectedRecordsException) when calling the WriteRecords operation: One or more records have been rejected. See RejectedRecords for details.
## => 失敗
実運用に向けて
保持期間を "後から短くした場合" はどうなる?
12months に設定した保持期間を、例えば移行が終わったので 1day と短くすることは可能です。変更時に「Memory storeからMagnetic storeに移動される」というダイアログが出ますが、データが消えることはありません。
※ただし、マグネティックストアの保持期限を超えた古いデータがどうなるかは未検証です。
保持期間を "後から長くした場合" はどうなる?
例えば保持期間を 1day として運用中のTimestreamテーブルにデータ移行をしたいので、一時的に 12months に変更したいと考えるでしょう。
保持期間の変更自体はできますが、書き込みはできませんでした。仕様は不明ですが、運用中のTimestreamテーブルへのデータ移行を直接行うのは難しそうです。
新規に保持期間を長く設定したTimestreamテーブルを作成し、別データを移行し終わった後に、運用中のTimestreamテーブルから新規Timestreamに移行するという方法が考えられます。
マグネティックストレージの書き込みは後から有効化できる?
(調査中)
費用は期間ではなく保存容量
ストアの費用は retention ではなく格納容量です(Amazon Timestream 料金)。そのため、とりあえず12monthsに設定するという考え方も検討できそうです。お財布とご相談ください。
あとがき
データベースは移行がポイントだな。
EoT