Amazon Managed Grafana、このサービスは AWS 上で Grafana というオープンソースのデータ可視化ツールをフルマネージドで利用することができ、データソースとして AWS の S3 や RDS、DynamoDB、CloudWatch といったリソースだけではなく、Azure Monitor や Google Cloud Monitoring、Prometheus など別クラウドやオープンソースツールのデータを可視化することができます。
今回は MySQL と互換性を持つ AWS のフルマネージドなリレーショナルデータベースである Amazon Aurora MySQL との接続、Amazon Aurora MySQL に格納されているデータの可視化をテーマに書いていきたいと思います。

シンプルではありますが以下のような構成となります。

Amazon Managed GrafanaとAuroraの連携

Amazon Managed Grafana と Amazon Aurora MySQL の連携手順

Amazon Managed Grafana と Amazon Aurora MySQL の連携手順は以下の通りです。
(Amazon Managed Grafana のワークスペース、Amazon Aurora MySQL、VPC などが既に作成されている前提)

1. Amazon Managed Grafana のアウトバウンド VPC 接続設定を追加
2. Amazon Managed Grafana にログインし、MySQL data source のデータソースを追加
3. Amazon Aurora MySQL にて Grafana 用のユーザを作成

1. Amazon Managed Grafana のアウトバウンド VPC 接続設定を追加

まずは、Amazon Managed Grafana が Amazon Aurora MySQL の置かれている VPC へアクセスできるようにします。
この設定は Amazon Managed Grafana のワークスペースを最初に作成する際にオプションで設定できる項目であり、作成後でも設定は可能です。

ワークスペース作成後、作成したワークスペースに移動し、[ネットワークアクセスコントロール] → [アウトバウンド VPC 接続] の編集ボタンから設定を行います。

アウトバウンド VPC 接続設定

この設定を行うと接続対象の VPC に ENI が作成され、Amazon Managed Grafana が VPC へアクセスできるようになります。
(これは余談ですが、作成された ENI をマネジメントコンソール上で確認すると Amazon Managed Grafana の実行基盤は AWS Fargate であることが推測できます。)

Amazon Managed Grafana の実行基盤は AWS Fargate であることが推測できます。

2. Amazon Managed Grafana にログインし、MySQL data source のデータソースを追加

続いて、Amazon Managed Grafana 側で接続設定を行います。
Amazon Managed Grafana にログイン後、サイドメニューにある [Data sources] を選択し、[+ Add new data source] を押下します。

GrafanaでのData soueceの追加

その後、MySQL のデータソースを選択し、[Connection]と[Authentication]の設定値を入力します。
※Aurora というデータソースは存在しておらず、MySQL を選ぶ必要があります。なお、これは本記事執筆時点(2024/11/24)の設定であり、Grafana の公式サイトである Grafana Labs には Aurora 用のプラグインがパブリックプレビュー版で存在しているため、今後 Aurora 用のプラグインが Amazon Managed Grafana でも利用できるようになる可能性はあります。)

設定値
・Host URL→ <Auroraのエンドポイント名>:3306
・Database name→ <Grafana で可視化したい Aurora 内のデータベース名>
・Username→ grafanaReader
・Password→ <grafanaReader のユーザに設定したパスワード>

※ grafanaReader のユーザは次の手順で作成します。

3. データベースにて Grafana 用のユーザを作成

最後に Amazon Aurora MySQL のデータベースへログインし、Grafana 用の読み取り専用ユーザを作成します。
以下のSQLコマンドを修正し、実行するだけで問題ありません

CREATE USER 'grafanaReader' IDENTIFIED BY '<任意のパスワード>';
GRANT SELECT ON <Grafana で可視化したい Aurora 内のデータベース名>.<テーブル名> TO 'grafanaReader';

以上の手順を踏んで、最後に Grafana のコンソールにて MySQL のデータソース設定を行ったページにて [Save & test] を押下し特にエラーが出なければ接続完了となります。なお、エラーが発生した場合、「failed to connect to server – please inspect Grafana server log for details」といったメッセージが表示されることがあります。現状、Amazon Managed Grafana ではサーバー側のログを確認する方法が見当たらず、エラー解決には自力で検索する必要がありました。

複数 VPC に存在する Amazon Aurora と連携したい場合

今回のように 1 つの Amazon Aurora と連携する場合は Amazon Aurora の存在する VPC と連携すれば良いですが、システム規模が大きくなると、異なる VPC に存在する複数のデータベースと接続したいというケースも考えられます。そういった場合は VPC Peering や Transit Gateway といったサービスを用いて Grafana 用の VPC と DB 用の VPC を繋ぐことによって解決することができます。(VPC の CIDR が重複していないことやルートテーブルの設定が適切であることが前提。)

VPCピアリングやTransit GatewayでGrafana用と複数のDB用VPCを接続

おわりに

今回の検証をする上で Amazon Managed Grafana が AWS Fargate でホストされているのではないかということに気づけたのは個人的にエンジニア心がくすぐられました。私自身、最近はお客様と話したり、説明資料の作成をすることが増えてきて、エンジニアとして手を動かすことが少なくなってきたため、今回のようなエンジニアとして心昂る体験ができて良かったと感じています。

また、本記事の背景として、私がとある案件で Amazon Aurora MySQL に格納されたデータを Amazon Managed Grafana で可視化しようとした際に、AWS のマネージドサービス間での接続であるにも関わらず、関連した記事が少なかったため、想定以上にサービス間の連携に時間がかかってしまったことがあり、本記事を書くに至りました。今後同様の連携設定をされる方の負担を少しでも減らすことができれば幸いです。

参考