【新リリース】AWS でも マネージドな InfluxDB が使える!! Amazon Timestream for InfluxDB が発表されました
本日、InfluxDB が Amazon Timestream のデータベースエンジンとして利用できるようになりました。
従来は、EC2 に InfluxDB をインストールしたり、InfluxDB Cloud の SaaS を利用する必要がありましたが、AWS サービスとして利用できるようになりました。
それでは早速、触ってみたいと思います。
データベースの作成
Amazon Timestream のコンソールよりインスタンスを作成します。
認証情報は適当なものを入力してください。
- DB instance name:
influx-test-db
- ユーザー名:
cm-influx-user
- 組織名:
cm-org
- initial bucket name:
cm-influx-bucket
- パスワード:xxxxxx
ユーザー名やパスワードは Influx Web UI へのアクセスや DB にアクセスするトークン発行の認証時に利用します。
インスタンスの設定はいずれも最小値としました。
可用性も今回はシンプルな検証のみなので Single-AZ
にしています。
Amazon Timestream for InfluxDB は、RDS などのように VPC 上にインスタンスを作成して利用することになります。そのためデプロイする VPC やサブネット、セキュリティグループなどを設定します。
今回は、既存の VPC にあるプライベートサブネットを指定しています。
パブリックアクセスの設定は「プライベート」として特定の EC2 からのみアクセスできるようにします。
パブリックにすると、パブリック IP がセットされて外部から直接データの読み書きや Web UI にアクセスできるようになります。(セキュリティグループやルートテーブルが適切に設定されている前提です)
他の設定はデフォルトのままとしました。従来の Timestream ではデータベースを作成するとすぐに利用できるものでしたが、今回は VPC 上にリソースが作られるためか 5分〜10分ほど時間がかかります
セキュリティグループの設定
次にセキュリティグループを設定します。
Amazon Timestream for InfluxDB へのアクセスには 8086 ポートが使われるので、クライアントの EC2 のセキュリティグループをソースとして 8086 ポートのアクセスを許可します。
(クライアントとなる EC2 のセキュリティグループは適当なものを利用してください)
アクセストークンの作成
トークンの作成方法は 2 通ります。
- InfluxDB UI 上で作成する方法
- 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
というカラムにトークンの文字列が表示されているのが分かります。
プロンプトの幅が狭いと見づらいので広めにして確認してみてください。
データを書き込んでみる
取得したトークンを使って 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` にアクセスします。
次のように警告画面が出ますが、そのままアクセスします。
インスタンス作成時に指定したユーザー名とパスワードを入力してサインインします。
画面左にあるメニューより上から3つ目のアイコン「Data Explorer」をクリックします。
送信したデータのうち、Kitchen
と Living Room
の temp
(温度)を表示してみました。
上記のクエリは下記になります。
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」から入力すれば同じグラフが描画されます。
AWS IoT Core との連携は?
時系列データベースは IoT におけるユースケースがよくマッチします。
InfluxDB も IoT でよく利用されますが、AWS IoT Core のルーティングはまだサポートされていないようです。
(AWS IoT Core のルールによる Timestream への書き込みは シングルメジャーレコードによる書き込みのみ(2024 年 3 月 15 日現在) )
そのため、AWS IoT Core で受けたデータを連携したい場合は、Lambda 経由で書き込むことになります。
こちらもあらためて検証したいと思います。
最後に
取り急ぎ基本的な使い方を確認してみました。
マルチ AZ もサポートしており RDS によく似た感じで利用できますが、スタンバイインスタンスには読み取りアクセスできないなど、注意点もありそうです。
マネージドに InfluxDB が利用できるようになったとはいえ、従来の Timestream とは異なり何らかの運用が少なからず発生しそうなので、検証してブログでご紹介させていただければと思います!!
以上です。