Amazon Timestream for InfluxDB のリードレプリカクラスターを試す

Amazon Timestream for InfluxDB のリードレプリカクラスターを試す

Clock Icon2025.04.02

先日、Amazon Timestream for InfluxDB が リードレプリカをサポートするアナウンスがありました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/02/amazon-timestream-influxdb-read-replica-support/

これによりマネージドサービスで「マルチ AZ なリードレプリカクラスター」を簡単に作れるようになりました。具体的には次のような構成を作ることができます。
本記事では、リードレプリカクラスターを実際に作りながら詳細を確認していきたいと思います。

vscode-drop-1743563731948-sz0yuuc2zz.png

リードレプリカの提供形態と料金体系

Timestream for InfluxDB のリードレプリカを利用するには、InfluxDB の開発・提供を行っている InfluxData 社が AWS Marketplace で提供している「レプリカアドオン」をサブスクライブする必要があります。
(Timestream のコンソール画面からサブスクライブすることもできます)

  • Marketplace のページ

https://aws.amazon.com/marketplace/pp/prodview-lftzfxtb5xlv4

  • 該当ドキュメント

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-rr-licensing.html

そのため、リードレプリカを利用する場合は次の 2 種類の料金が発生します。

  • Marketplace を介したアドオンライセンスの利用料金
  • Timestream のレプリカインスタンスの利用料金

Marketplace を介したライセンスアドオンの利用料金

上記に記載した Marketplace のページにライセンスアドオンの料金が掲載されています。
こちらの表を見ると 「レプリカインスタンスで利用している vCPU の時間(1時間単位)」 でアドオン料金が発生するようです。

01-timestream-readreplica-marketplace-pricing.png

ライセンス費用が発生する条件

アドオンライセンスの費用が発生するのは次の条件が満たされる場合です。

  • アドオンライセンスをサブスクライブしてアクティブな状態になっている
  • アクティブなリードレプリカクラスターが存在すること

ライセンスがアクティブであっても、アクティブなリードレプリカクラスターが存在しない場合は料金は発生しません。
(レプリカインスタンスだけ残る場合はインスタンスに対する料金が発生します)

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-rr-licensing.html

料金について確認できたので、次からは実際にクラスターを作成してみたいと思います。

試してみた

それでは、Timestream のマネージドコンソールよりリードレプリカクラスターを作成してみます。
アドオンをサブスクライブしていない場合は Not subscribed と表示されるので、最初に View subscription option をクリックします。

vscode-drop-1743513795525-wkaqx5lcco9.png

サブスクリプションの料金詳細が表示されるので、内容を確認して Subscribe をクリックします。

vscode-drop-1743515795192-8tme30nz2ot.png

ちなみに、サブスクライブは Marketplace の画面からも実行できます。画面右上にある 「View purchase options」 をクリックします。

vscode-drop-1743515935268-gwphhwcb3qk.png

料金の詳細が表示されるので、確認して問題なければ 「サブスクライブ」 をクリックします。

vscode-drop-1743515956370-1hoipjnnbx5.png

サブスクライブが完了するまで数分かかります。

vscode-drop-1743516080642-b3xcmoa41p5.png

下記のように 「Subscribed」 という表示になれば完了です。

vscode-drop-1743516089883-tm9pq16z9g.png

次にデータベースの構成を設定していきます。クラスター名、ユーザー名、組織名、バケット名を設定します。

vscode-drop-1743516098556-v7b4r6py1m.png

インスタンスの種類、ストレージを設定します。
今回は検証なので一番小さいものをそれぞれ指定しています。

vscode-drop-1743516110073-2bn73744u63.png

次に接続設定です。ここではネットワークの設定を行います。
今回は簡単に検証したかったので、既存の VPC にあるパブリックサブネットを指定しています。

また、ここでは2つのサブネットを指定していますが、アベイラビリティゾーンが異なれば3つのサブネットを指定することも可能です。サブネットが複数あっても同じアベイラビリティゾーンのものは指定できません。

サブネットを3つ指定しても、作成されるインスタンスは「プライマリ」「レプリカ」がそれぞれ1台ずつの合計2インスタンスまでです。1つのクラスターに対してレプリカインスタンスを2つ以上作成することはできません。(後から追加もできません)

また、検証のために自分の端末から直接アクセスしたかったので「パブリックアクセス」の項目は 「パブリックアクセス可能」 としています。

vscode-drop-1743516221180-buos20981ef.png

フェイルオーバーの指定は 「Automatic」 を選択しています。

vscode-drop-1743516238582-2ypcb3zm8pm.png

「Automatic」と「NO_FAILOVER」の違い は下記のとおりです。

フェイルオーバー設定 内容
Automatic プライマリインスタンスに障害が発生した場合、システムは自動的に読み取りレプリカを昇格させて新しいプライマリインスタンスにします。
NO_FAILOVER プライマリインスタンスに障害が発生した場合、システムは読み取りレプリカを 昇格せずに プライマリインスタンスの復元を試みます。プライマリインスタンスが復元されるまで、クラスターは使用できなくなります。

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-create-rr-cluster.html

その他はデフォルトのままでデータベースを作成します。

vscode-drop-1743516249476-ybkxvlummha.png

作成できると、画面のようにプライマリーインスタンスとレプリカインスタンスが1つずつ作成されました。

vscode-drop-1743516255543-5os063e9id.png

詳細画面を開くと各エンドポイントを確認できます。

vscode-drop-1743516264336-rndmexr24mg.png

エンドポイントの種類

リードレプリカクラスターには、3つのエンドポイントが利用できます。

  • クラスターエンドポイント
  • リードオンリーエンドポイント
  • インスタンスエンドポイント

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-connecting-cluster.html

先ほどのコンソール画面だと、次のような配置になっています。

vscode-drop-1743525405038-y2jiq0ha6h.png

クラスターエンドポイント

書き込みと読み込みができるエンドポイントです。InfluxDB 固有の管理コマンド(組織、ユーザー、バケット、タスクなどの作成、変更、削除など)を受け付けることができます。
書き込みが可能なインスタンス、つまりプライマリーインスタンスに接続します。

プライマリーインスタンスに障害が発生すると、フェイルオーバーによりリードレプリカがプライマリーに昇格します。書き込むエンドポイントの URL 自体は変わりません。

ただし、プライマリーに昇格した「旧レプリカインスタンスのエンドポイント」は新しいレプリカがデプロイされるまで利用できません。

アクセスする際の URL は次のようなものになります。
(ドキュメントには xxxxx.us-west-2.timestream-influxdb.amazonaws.com という例がありましたがドメインなど大きく異なるようです。)

4fc0xxxxxx-xxxxxxxxxxxxxx.timestream-influxdb.ap-northeast-1.on.aws

リードオンリーエンドポイント

読み取り操作のみをサポートするエンドポイントです。クラスター内の いずれかのレプリカインスタンスに接続 します。
クラスターエンドポイントのホスト名に -ro が付いた URL になります。

4fc0xxxxxx-xxxxxxxxxxxxxx-ro.timestream-influxdb.ap-northeast-1.on.aws

インスタンスエンドポイント

クラスター内の各インスタンス毎に用意されるエンドポイントです。
多くのケースでは参照系リクエストはリードオンリーエンドポイントを指定することになると思われます。
しかし、複雑な負荷分散が必要なワークロードのケースでは、クライアント側で個々のリードレプリカのエンドポイントを直接指定することが考えられます。そのようなケースで活用できるものになります。

c19vxxxxxx-xxxxxxxxxxxxxx.timestream-influxdb.ap-northeast-1.on.aws (プライマリーインスタンス)
uwqexxxxxx-xxxxxxxxxxxxxx.timestream-influxdb.ap-northeast-1.on.aws (レプリカインスタンス)

エンドポイントの名前解決を確認してみる

せっかくなので、名前解決がどうなるかも確認してみました。

エンドポイント 名前解決の結果
(パブリックアクセス)
名前解決の結果
(パブリックアクセス不可)
クラスターエンドポイント 35.79.xxx.xxx 10.60.3.214
リードオンリーエンドポイント 13.115.xxx.xxx 10.60.4.220
インスタンスエンドポイント(プライマリーインスタンス) 35.79.xxx.xxx 10.60.3.214
インスタンスエンドポイント(レプリカインスタンス) 13.115.xxx.xxx 10.60.4.220

パブリックアクセス不可の設定で作成すると、指定した VPC サブネットの IP が返ってきます。
この結果から、クラスターエンドポイントがプライマリーインスタンスを指していて、リードオンリーエンドポイントはレプリカインスタンスを指していることが分かります。

ちなみにパブリックアクセス不可のクラスターでは、インターネット経由の名前解決でプライベート IP が返ってきました。

また、パブリック IP アドレスの詳細を確認すると EC2 の情報が返ってきました。

{
  "ip": "13.115.xxx.xxx",
  "hostname": "ec2-13-115-xxx-xxx.ap-northeast-1.compute.amazonaws.com",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6895,139.6917",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "101-8656",
  "timezone": "Asia/Tokyo",
  "readme": "https://ipinfo.io/missingauth"
}

これまでの作業で各エンドポイントについて理解できました。あらためてここで全体図を確認すると具体的な利用方法がイメージできるようになるかと思います。

vscode-drop-1743563731948-sz0yuuc2zz.png

書き込み、読み込みを試してみる

次に各エンドポイントに対してデータの書き込みを試してみます。

influx コマンドの構成情報(コンフィグ)を作成する

今回は influx コマンドで書き込むので、各エンドポイントに対して influx コマンドが参照する構成情報を事前に作成します。
--config-name オプションに各エンドポイントを識別できるコンフィグ名を指定して作成します。

influx config create --config-name [YOUR_CONFIG_NAME]  \
  --host-url "https://[YOUR_ENDPOINT]:8086" \
  --org [YOUR_ORG_NAME] \
  --username-password [YOUR_USER_NAME] \
  --active

例えば、クラスターエンドポイントの構成情報なら次のような形になります。

influx config create --config-name cluster-endpoint  \
  --host-url "https://4fc0xxxxxx-xxxxxxxxxxxxxx.timestream-influxdb.ap-northeast-1.on.aws:8086" \
  --org cm-org \
  --username-password cm-user \
  --active

今回はそれぞれ次のようなコンフィグ名にして作成しました。

エンドポイント種別 コンフィグ名
クラスターエンドポイント cluster-endpoint
リードオンリーエンドポイント read-only-endpoint
プライマリーインスタンスのエンドポイント primary-endpoint
レプリカインスタンスのエンドポイント replica-endpoint

作成したコンフィグは influx config list コマンドで確認できます。* が付いているコンフィグがアクティブなものになります。

$ influx config list

Active	Name			URL											Org
*	cluster-endpoint	https://4fc0xxxxxx.timestream-influxdb.ap-northeast-1.on.aws:8086	cm-org
	read-only-endpoint	https://4fc0xxxxxx-ro.timestream-influxdb.ap-northeast-1.on.aws:8086	cm-org
	replica-endpoint	https://uwqexxxxxx.timestream-influxdb.ap-northeast-1.on.aws:8086	cm-org
	primary-endpoint	https://c19vxxxxxx.timestream-influxdb.ap-northeast-1.on.aws:8086	cm-org

アクティブなコンフィグの切り替えは influx config [CONFIG_NAME] で行います。

クラスターエンドポイントに書き込む

準備ができたのでデータを書き込みます。最初は「クラスターエンドポイント」です。

influx config cluster-endpoint
influx write \
  --bucket cm-test-bucket \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1743495600
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1743495600
"

特にエラーなく書き込みできました。

リードオンリーエンドポイントに書き込む

次はリードオンリーエンドポイントに書き込みます。

influx config read-only-endpoint
influx write \
  --bucket cm-test-bucket \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1743495700
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1743495700
"
Error: failed to write data: 403 Forbidden: failure writing points: cannot write to org id: 886f87d15db2b7d5, bucket id: 0dd6c3fabf15cd07 because of: read-only

リードオンリーなので書き込みできないというエラーになりました。

各インスタンスエンドポイントに書き込む

先にプライマリーのインスタンスエンドポイントに書き込みます。

influx config primary-endpoint
influx write \
  --bucket cm-test-bucket \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1743495760
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1743495760
"

書き込みできました。

次にレプリカのインスタンスエンドポイントに書き込みます。

influx config replica-endpoint
influx write \
  --bucket cm-test-bucket \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1743495800
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1743495800
"
Error: failed to write data: 403 Forbidden: failure writing points: cannot write to org id: 886f87d15db2b7d5, bucket id: 0dd6c3fabf15cd07 because of: read-only

リードオンリーエンドポイントと同様に書き込み不可のエラーとなりました。
いずれも予想通りの結果になりました。

参照クエリを実行する

いずれのエンドポイントもデータの参照は可能です。そのため、全てのエンドポイントに次のようなクエリを投げてデータを取得できます。

influx query 'from(bucket:"cm-test-bucket")
  |> range(start: 1743494500, stop: 1743495800)
  |> filter(fn: (r) => r._measurement == "home")
  |> filter(fn: (r) => r.room == "Kitchen")
  |> filter(fn: (r) => r._field == "temp" or r._field == "hum")
  |> keep(columns: ["_time", "_value", "_field", "_measurement", "room"])'

出力結果の抜粋です。

Result: _result
Table: keys: [_field, _measurement, room]
         _field:string     _measurement:string             room:string                      _time:time                  _value:float
----------------------  ----------------------  ----------------------  ------------------------------  ----------------------------
                   hum                    home                 Kitchen  2025-04-01T08:01:42.000000000Z                       36.4338
                   hum                    home                 Kitchen  2025-04-01T08:01:47.000000000Z                        36.011
                   hum                    home                 Kitchen  2025-04-01T08:01:52.000000000Z                       37.5992

Table: keys: [_field, _measurement, room]
         _field:string     _measurement:string             room:string                      _time:time                  _value:float
----------------------  ----------------------  ----------------------  ------------------------------  ----------------------------
                  temp                    home                 Kitchen  2025-04-01T08:01:42.000000000Z                       22.1952
                  temp                    home                 Kitchen  2025-04-01T08:01:47.000000000Z                       22.0049
                  temp                    home                 Kitchen  2025-04-01T08:01:52.000000000Z                       22.7197

マルチ AZ 構成との比較

Timestream for InfluxDB は従来から「マルチ AZ」構成で作成できましたが、リードレプリカクラスターとの違いは何でしょうか。確認できたポイントを表にまとめました。

確認事項 マルチ AZ 構成 リードレプリカクラスター
各インスタンスの利用 スタンバイインスタンスは読み書き不可 インスタンス種別に読み書き可能
利用料金 2インスタンス分の料金 2インスタンス分の料金 + サブスクリプション料金
構成変更 マルチ AZ、シングル AZ の双方の構成に変更可能
インスタンスタイプの変更可能
インスタンス構成は変更不可
インスタンスタイプの変更可能
書き込み同期性(※) 同期書き込み 非同期書き込み

どちらもメリット・デメリットがあるので、コストや利用するワークロードをよく考慮して選定する必要がありそうです。

※) セカンダリインスタンスへの書き込みの同期性については下記のドキュメントを参考にしています。
https://docs.aws.amazon.com/ja_jp/timestream/latest/developerguide/timestream-for-influx-managing-multi-az-instance-deployments.html

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-working-read-replica.html#timestream-for-influx-rr-param-groups

サブスクリプションの解約

サブスクリプションを解除する場合は、Marketplace のページにある 「サブスクリプションの管理」 から行います。

vscode-drop-1743516274216-9r2ip8xysn.png

管理ページにはサブスクライブした全てのリソースを確認できるので、対象のリソースに対して 「管理」 をクリックします。

vscode-drop-1743516280078-1afqfm0qpd3.png

アクションから 「サブスクリプションをキャンセル」 をクリックします。
(クラスター自体を削除しておけばサブスクリプションはそのままでもアドオンライセンス自体の料金は発生しません)

vscode-drop-1743516289487-y9lk7az7hsl.png

クラスターの削除

クラスターを削除する時は、対象を選択して 「削除」 を実行します。
なお、クラスターから単一のノードだけを削除することはできません。削除時はクラスター全体が削除されることに注意してください。

vscode-drop-1743522229453-f7o4zvlquo7.png

https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influx-read-replica-overview.html#timestream-for-influx-rr-deletion

最後に

今回のアップデートで InfluxDB のリードレプリカを気軽に構成できるようになりました。
しかし、リードレプリカのインスタンスは1つしか作成できないので、読み取りのスケーリングが必要なケースでは慎重にアーキテクチャを設計する必要がありそうです。

IoT 導入支援 / 相談会の紹介

クラスメソッドでは、AWS を中心とした IoT 導入においてエッジからクラウドまでトータルでサポートしています。

次のようなお困りごとがあれば、お気軽にお問い合わせください。

  • ローカルでデータ収集と可視化はできたが、クラウドで可視化する適切な構成が分からない
  • 集めたデータを使って故障予知などに使いたい
  • 工場設備からデータ収集してクラウドに送る方法が分からない
  • スマートファクトリー化を検討しているが何から着手していいか分からない
  • デバイスで動くアプリケーションの開発を AWS で効率化したい
  • エッジデバイスのセキュリティが心配だ
  • カメラ映像をクラウドにストリーミングして活用したい
  • その他、お困り事があれば何でもご相談ください

https://classmethod.jp/aws/services/consulting/

https://classmethod.jp/seminar/aws-consultation/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.