QuickSight でデータセットに含まれる S3 バケット&キー情報からクリックで S3 コンソールへ遷移させてみる

2023.01.16

いわさです。

諸事情により S3 オブジェクトに関するバケットやキーなどの情報を持つ CSV データを QuickSight の分析やダッシュボードで表示した際に S3 バケットのダウンロードやコンソールの表示を行えるか検討していました。

条件付きで実現出来るパターンがいくつかありそうだったので調査・検討した内容をまとめておきます。

ベースとなるデータセットと分析

以下のように S3 バケットにオブジェクトを格納し、そのキー情報を含む CSV データを用意します。

% aws s3 ls --recursive s3://hoge0116fuga
2023-01-16 10:49:44      24875 hoge1/fuga1/tak1wa.png
2023-01-16 10:49:44      32173 hoge1/fuga2/jmeter.log

hoge.csv

title,type,pass
hoge1,image,hoge0116fuga/hoge1/fuga1/tak1wa.png
hoge2,text,hoge0116fuga/hoge1/fuga2/jmeter.log

CSV からデータセットを作成し、分析でテーブルを使って表示している状態です。

S3 へアクセスする方法を考える

S3 へのオブジェクトへアクセスするための情報としては S3 URI かオブジェクト URL を使う形となります。
あるいは以下のようにマネジメントコンソールでの表示までであればバケットとキー名がわかっていれば URL で直接アクセスすることが出来ます。

オブジェクト URL でアクセスするためにはパブリックアクセス可能なバケットであればポリシーに従って GET リクエストでアクセスすること出来て、プライベートなバケットであればポリシーに従った認証情報が必要になります。

マネジメントコンソールの場合はブラウザ内のセッションが利用されますので特に意識しなくても良い気がしますが、QuickSight の場合は必ずしもマネジメントコンソールにサインインしているとは限りません。IAM ユーザーではなく QuickSight ユーザーでサインインしている場合はセッションが存在していないのでそのあたりを気にする必要があります。

QuickSight の観点から考えてみると、データに基づいて何かしらのアクションをする場合はアクション機能あるいは URL を開く書式機能が思いつきます。

S3 と QuickSight のそれぞれの観点からいうと、アクションあるいは書式機能で URL ベースで S3 をターゲットに GET リクエストを送信する(ブラウザで開く)ことになりそうです。

QuickSight 上で遷移 URL を生成してリンクを設定する

今回は CSV 上のデータがたまたまバケット名とオブジェクトキーが結合された状態になっていたのでバケット名とオブジェクトキーに分離して、それを組み合わせて URL を作成してみます。

  • バケット名
    • split(pass,'/',1)
  • オブジェクトキー
    • substring(pass, strlen(split(pass,'/',1)) + 1, strlen(pass) - 1)

よって S3 コンソール URL で対象オブジェクトのページに遷移する場合は以下のようになります。

concat('https://s3.console.aws.amazon.com/s3/object/', split(pass,'/',1), '?prefix=', substring(pass, strlen(split(pass,'/',1)) + 2, strlen(pass) - 1))

最後に、ビジュアルフォーマットでフィールドのスタイル設定を使うと URL オプションが使えるので適当に設定します。
ちなみに、この段階で URL の加工は出来ないので計算フィールドで加工を済ませておく必要があります。

ブラウザの Cookie がマネジメントコンソール上で有効なセッションと紐付いていれば、次のようにそのまま開くことが出来ました。

カスタムアクションでも遷移できる

今回はセルにハイパーリンクを設定するテーブルの書式オプションを使いましたが、URL アクションを使うことで行選択時に外部 Web ページへ遷移するアクションを設定することも可能です。

さいごに

本日は QuickSight でデータセットに含まれる S3 バケット&キー情報からクリックで S3 コンソールへ遷移させてみました。

S3 情報を含む CSV データなどを QuickSight へ表示するような管理用のダッシュボードを作成した際に、マネジメントコンソールへアクセスしファイルをダウンロードさせたい場合などに利用出来そうです。