目次
はじめに
こんにちは、omkです。
前回、GlueからRDSにデータの書き込みをしてみました。
今回はRDSに書き込んだデータにAthenaからクエリしてみたいと思います。
やってみた
まず、データベースにつながるLambda用のセキュリティグループを作ります。
次に、Athenaのコンパネでナビゲーションペインから「データソース」を選択します。
ここでRDSにクエリを投げるための設定を行います。
「データソースの作成」を選択し、データソースとして「MySQL」を選択します。
データソースに任意の名前をつけます。
「Lambda関数の作成」を選択してLambda関数を作成します。
実際にRDSにクエリを実行するのはこのLambdaとなります。
このとき自動で接続用のLambdaアプリケーションを準備してもらえますので画面に従ってセットアップしていきます。
アプリケーションのgithubプロジェクトはこちら↓(リドミを読むべし)
https://github.com/awslabs/aws-athena-query-federation
「DefaultConnectionString」には次のように設定します。要↓のページ参照
https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/README.md
mysql://jdbc:mysql://{RDSエンドポイント名}:{ポート(MySQLなので通常3306)}/default?user={ユーザー名}&password={パスワード}
ちなみにパスワードに
が入っているとコメントアウト扱いになるので注意です。エスケープできるかは不明。#
サブネットとセキュリティグループを割り当ててあとは任意の名前のやらS3バケットやらスペックを当てていきます。
「このアプリがカスタム IAM ロールを作成することを承認します。」にチェックをいれて「デプロイ」を選択するとLambda関数が作成されます。
Lambda関数ができたら、設定から「環境変数」を表示します。
ここにAthenaでクエリするように環境変数を追加する必要があります。
{Athenaデータソース名}_connection_string : mysql://jdbc:mysql://{RDSエンドポイント名}:{ポート(MySQLなので通常3306)}/default?user={ユーザー名}&password={パスワード}
で設定します。これで対応したデータソースからをクエリを実行できるようになります。
データソースの作成に戻って、作成したLambda関数を割り当ててデータソースを作成します。
以上でデータソースは完成で、あとはAthanaからクエリを発行するだけです。
クエリエディタで「データソース」に先程作成したデータソースを設定します。
Lambdaの設定に不備があればここでエラーが出ます。
問題なければデータベースが選択できます。
クエリを実行して値がとれることを確認します。
うまくいきました。
おわりに
AthenaからRDSのデータを取得することができました。
Lambdaの立ち上がり待ちがあるのでMySQLクライアントで直接クエリするよりは遅くなりますが、WEBコンソールからクエリを実行できるのは大変魅力的です。
ぜひやってみてください(?)
最後までお付き合いありがとうございました!
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!