DynamoDBにSQLを発行してデータを可視化する方法

こんにちは。SCSKの橋本です。

突然ですが、DynamoDBのデータを可視化したいことってありますよね。 AWSで可視化といえばQuickSightですが、QuickSightはデータソースとしてDynamoDBを指定することができません。

これを実現するためにはひと手間必要になるのですが、その中で比較的簡単そうな方法を試してみました。今回はその手順を紹介したいと思います。

やりたいこと

この記事ではDynamoDBのデータ可視化のため、AthenaのFederated Query機能を使います。

Federated Queryは2019年に登場し、2020年12月に東京リージョンでも使えるようになりました。この機能がにより、AthenaではDynamoDBを含む複数のデータソースに対してSQLアクセスが可能となっています。 

そして、AthenaはQuickSightのデータソースとして使用できますつまり、Athenaを使うことで、QuickSightからDynamoDBのデータを利用できるということですね。

実現したいもの

【実現する構成】

構成図

【可視化の例】

前提

以下の環境は、あらかじめ準備済みとして手順を説明します。
なお、AWSは東京リージョンを使用します。 

【「shReplay」テーブルのデータ】

shReplayテーブル内のデータ

手順

ここからは実際に実施した手順を紹介します。
AWSのコンソール画面へのリンクは、AWSにログインした状態でご利用下さい。

Athena データソースの作成

AthenaからDynamoDBに接続できるようにします。手順の途中でLambda関数の画面が出てきますが、コーディングは一切不要です。

  1. Amazon Athena のデータソース画面を開く。 
  2. 「データソースの作成」ボタンを押す。

  3. ステップ1「データソースを選択」画面で「DynamoDB」を選択し、「次へ」ボタンを押す。

  4. ステップ2「データソースの詳細を入力」画面で以下を実施する。
    1. データソース名として任意の名前(ここでは「sh-dynamodb-ds」)を入力 する。

    2. 「Lambda関数の作成」ボタンを押す。 

  5. ブラウザの別タブにて開かれる、Lambdaアプリケーション「AthenaDynamoDBConnector」の「設定とデプロイ」画面で、以下を実施する。
              

    1. spillBucketとして、あらかじめ用意したS3バケットの名前(ここでは「shsamplebucket」)を入力する。
    2. AthenaCatalogNameとして、任意の名前(ここでは「sh-dynamodb-ds」)を入力する。
      ※前の手順で作成したAthenaのデータソース名とは異なる名前でも可。

    3. 「このアプリがカスタムIAMロールとリソースポリシーを作成することを承認します」にチェックを入れる。
    4. 「デプロイ」ボタンを押す。
      lambda関数作成画面3
    5. 以下の画面が表示されたら、タブを切り替えてステップ2「データソースの詳細を入力」画面に戻る。
      lambda関数作成完了
  6. ステップ2「データソースの詳細を入力」画面で、以下を実施する。
    1. Lamda関数として前の手順でAthenaCatalogNameに指定した名前(ここでは「sh-dynamodb-ds」)を選択する。
    2. 「次へ」ボタンを押す。
      データソースの詳細画面3
  7. ステップ3「確認と作成」にて設定内容確認し、「データソースの作成」を押す。
    データソースの作成ボタン

以上でAthenaデータソースの作成完了です。

データソース作成完了画面

Athena ワークグループの作成 

Athenaには「primary」というワークグループが存在しますが、この記事では別途専用のワークグループ「sh-athena-wg」を作成することにします。 
作成したワークグループは、この後のQuickSightデータセット作成手順で使用します。 

  1.  Athenaのワークグループ画面を開く。 
  2. 「ワークグループを作成」を押す。
    ワークグループ作成画面1
  3. 「ワークグループを作成」画面で、以下を実施する。
    1. 「ワークグループ名」に任意の名前(ここでは「sh-athena-wg」)を入力する。
      ワークグループ作成画面2
    2. 「クエリ結果の場所」として、あらかじめ用意したS3バケットのフォルダ名(ここでは「s3://shsamplebucket/sh-athena-wg/」)を入力する。
      ※フォルダ作成後であれば「S3を参照」ボタンから選択も可。S3内でのフォルダ作成手順は省略。
      ワークグループ作成画面3
    3. 「ワークグループを作成」ボタンを押す。
      ワークグループ作成ボタン

以上で新しいワークグループ「sh-athena-wg」が追加されました。

ワークグループ作成完了

QuickSightのデータセット作成 

QucickSightからAthenaへ接続するために、データセットの作成を行います。 

  1. QuickSightのデータセット画面を開く。  
  2. 「新しいデータセット」ボタンを押す。
    新しいデータセットボタン
  3. 「データセットを作成」画面で以下を実施する。
    1. 「新規データソースから」の中より「Athena」を選択する。
    2. 表示されたダイアログの「データソース名」に任意の名前(ここでは「sh-dynamodb-ds」)を入力する。
      ※前の手順で作成したAthenaのデータソース名とは異なる名前でも可。
    3. 「Athenaワークグループ」として、手順で作成したAthenaのワークグループ名(ここでは「sh-athena-wg」)を入力する。
    4. 「接続を検証」ボタンを押し、ボタン名が「検証済み」となることを確認する。
    5. 「データソースを作成」ボタンを押す。
      データセット作成画面1
  4. 「テーブルの選択」画面で「カスタムSQLを使用」ボタンを押す。
    データセット作成画面2
  5. 「カスタムSQLクエリの入力」画面で、任意のクエリ名(ここでは「shReply」)以下のSQL文を入力し、「クエリの確認」ボタンを押す。 
    SELECT * FROM "sh-dynamodb-ds"."default"."shReply"
    DynamoDBのテーブルは、SQLのFROM句に「”<Athenaのデータソース名>”.”default”.”<DynamoDBのテーブル名>”」という形式で指定します。

    データセット作成画面3

  6.  「データセット作成の完了」画面にて「Visualize」を押す。 
    データセット作成画面4

分析画面が表示されたら完了です。

QuickSightで分析

 作成したデータセットを使用してグラフを作成します。 

例えば、「データセット」の「フィールドリスト」より「postedby」をドラッグ&ドロップします。
QuickSight分析画面

以上で可視化が完了しました!

QuickSight分析画面

【補足】データセットを追加する場合

この記事で紹介した手順は、複数回実行すると問題となる可能性があります。データセットを追加する場合はこの項目の記述に従ってください。
特に以下の手順にご注意ください。

  • 「Athena データソースの作成」の手順5
    複数回実行すると、LambdaアプリケーションAthenaDynamoDBConnector」の設定が、最後に実行した内容で上書きされます。
  • 「QuickSightのデータセット作成」の手順3
    複数回実行すると、QuickSight データソースが同じ名前で複数作成されます。

ここまでの手順で可視化を完了後、別のSQLを使用してQuickSightのデータセットを作成する場合は以下を実施します。

  • 「Athena データソースの作成」…… 実施不要です。作成済みのデータソースを使用します。
  • 「Athena ワークグループの作成」……実施不要です。作成済みのワークグループを使用します。
  • 「QuickSightのデータセット作成」…… 手順3のみ以下に読み替えます。その後SQLを変更して元の手順を実施します。

3. 「データセットを作成」画面で以下を実施する。

  1. 「既存データソースから」より初回の手順で作成したQuickSightのデータソース名(ここでは「sh-dynamodb-ds」)を選択する。
  2. 表示されたダイアログで「データソースを作成」ボタンを押す。その後手順4に進む。

おわりに

今回にQuickSightのデータセット作成時に、Athenaを経由してDynamoDBへSQLアクセスすることができました。

本格的に使用する場合はコストや命名規則なども意識する必要がありそうですが、まずはこの記事が皆様のお役に立てれば幸いです。

タイトルとURLをコピーしました