ちょっと話題の記事

【新リリース】AWS でも マネージドな InfluxDB が使える!! Amazon Timestream for InfluxDB が発表されました

みんなだいすき InfluxDB が AWS サービスとして使えますよ!
2024.03.15

本日、InfluxDB が Amazon Timestream のデータベースエンジンとして利用できるようになりました。

従来は、EC2 に InfluxDB をインストールしたり、InfluxDB Cloud の SaaS を利用する必要がありましたが、AWS サービスとして利用できるようになりました。

それでは早速、触ってみたいと思います。

データベースの作成

Amazon Timestream のコンソールよりインスタンスを作成します。

01-create-influx-db

認証情報は適当なものを入力してください。

  • DB instance name: influx-test-db
  • ユーザー名: cm-influx-user
  • 組織名:cm-org
  • initial bucket name:cm-influx-bucket
  • パスワード:xxxxxx

ユーザー名やパスワードは Influx Web UI へのアクセスや DB にアクセスするトークン発行の認証時に利用します。

02-create-influx-instance

インスタンスの設定はいずれも最小値としました。

03-create-influx-instance

可用性も今回はシンプルな検証のみなので Single-AZ にしています。

04-create-influx-instance

Amazon Timestream for InfluxDB は、RDS などのように VPC 上にインスタンスを作成して利用することになります。そのためデプロイする VPC やサブネット、セキュリティグループなどを設定します。

今回は、既存の VPC にあるプライベートサブネットを指定しています。

パブリックアクセスの設定は「プライベート」として特定の EC2 からのみアクセスできるようにします。
パブリックにすると、パブリック IP がセットされて外部から直接データの読み書きや Web UI にアクセスできるようになります。(セキュリティグループやルートテーブルが適切に設定されている前提です)

05-create-influx-instance-2

他の設定はデフォルトのままとしました。従来の Timestream ではデータベースを作成するとすぐに利用できるものでしたが、今回は VPC 上にリソースが作られるためか 5分〜10分ほど時間がかかります

06-create-influx-instance

セキュリティグループの設定

次にセキュリティグループを設定します。
Amazon Timestream for InfluxDB へのアクセスには 8086 ポートが使われるので、クライアントの EC2 のセキュリティグループをソースとして 8086 ポートのアクセスを許可します。
(クライアントとなる EC2 のセキュリティグループは適当なものを利用してください)

09-influxdb-group

アクセストークンの作成

トークンの作成方法は 2 通ります。

  1. InfluxDB UI 上で作成する方法
  2. influx コマンドで作成する方法

今回は、influx コマンドで作成してみます。

EC2 に influx コマンドをインストール

トークンの生成には influx コマンドを使うのでインストールしておきます。

wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.7.3-linux-amd64.tar.gz
tar xvzf influxdb2-client-2.7.3-linux-amd64.tar.gz
sudo cp ./influx /usr/local/bin/

インストールできているか確認します。

$ influx version
Influx CLI dev (git: none) build_date: 2023-04-28T14:24:14Z

InfluxDB を操作する構成情報を作成

次のコマンドで InfluxDB とやり取りするための構成を作成します。

  • --config-name: 適当な構成名
  • --host-url: 作成されたインスタンスのエンドポイント:Port番号
  • --org: Timestream インスタンス作成時にしたもの
  • --username-password: Timestream インスタンス作成時にしたユーザー名
influx config create --config-name timestream-influxdb-test  \
  --host-url "https://[YOUR_ENDPOINT]:8086" \
  --org cm-org \
  --username-password cm-influx-user \
  --active

間違えたときは構成名を指定して削除できます。

influx config rm timestream-influxdb-test

トークンの取得

次に influx auth create コマンドで認証情報を取得します。

influx auth create --org cm-org --all-access

パスワードを聞かれるので、インスタンス作成時に入力したパスワードを入力します。

Please provide your password: [インスタンス作成時に入力したパスワード]

コマンドが正常に実行されたら次のようなレスポンスが返ってきます。Token というカラムにトークンの文字列が表示されているのが分かります。
プロンプトの幅が狭いと見づらいので広めにして確認してみてください。

10-get-token

データを書き込んでみる

取得したトークンを使って EC2 からデータを書き込みましょう。ここでも influx コマンドで書き込んでみます。

influx write \
  --bucket cm-influx-bucket \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1710495300
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1710495300
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1710495310
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1710495310
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1710495320
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1710495320
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1710495330
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1710495330
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1710495340
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1710495340
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1710495350
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1710495350
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1710495360
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1710495360
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1710495370
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1710495370
"

InfluxDB UI で確認( SSH トンネリング )

正常に書き込めたか InfluxDB UI で確認したいと思います。
データベースインスタンスは プライベートサブネットに配置しているので、手元の作業 PC から直接アクセスできません。そのため EC2 インスタンスを経由して SSH トンネリングでアクセスします。

今回はローカルの 8085 ポートを使っています。

ssh -L 8085:[YOUR_TIMESTREAM_ENDPOINT]:8086 ec2-user@[EC2_PUBLIC_IP] -i [YOUR_SSH_KEY]

SSH トンネリングできたら作業 PC のブラウザで `https://localhost:8085` にアクセスします。
次のように警告画面が出ますが、そのままアクセスします。

11-localhost-https-caution

インスタンス作成時に指定したユーザー名とパスワードを入力してサインインします。

12-signin-influxdb

画面左にあるメニューより上から3つ目のアイコン「Data Explorer」をクリックします。

12-click-graph

送信したデータのうち、KitchenLiving Roomtemp(温度)を表示してみました。

14-data-explorer

上記のクエリは下記になります。

from(bucket: "cm-influx-bucket")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["room"] == "Living Room" or r["room"] == "Kitchen")
  |> filter(fn: (r) => r["_field"] == "temp")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

先程の画面にある「SCTIPT EDITOR」から入力すれば同じグラフが描画されます。

15-script-editor

AWS IoT Core との連携は?

時系列データベースは IoT におけるユースケースがよくマッチします。
InfluxDB も IoT でよく利用されますが、AWS IoT Core のルーティングはまだサポートされていないようです。
(AWS IoT Core のルールによる Timestream への書き込みは シングルメジャーレコードによる書き込みのみ(2024 年 3 月 15 日現在) )

そのため、AWS IoT Core で受けたデータを連携したい場合は、Lambda 経由で書き込むことになります。
こちらもあらためて検証したいと思います。

最後に

取り急ぎ基本的な使い方を確認してみました。
マルチ AZ もサポートしており RDS によく似た感じで利用できますが、スタンバイインスタンスには読み取りアクセスできないなど、注意点もありそうです。

マネージドに InfluxDB が利用できるようになったとはいえ、従来の Timestream とは異なり何らかの運用が少なからず発生しそうなので、検証してブログでご紹介させていただければと思います!!

以上です。