Sisenseナレッジ - INSIGHT LAB

【Sisense Data Modeling】AWSのS3連携~ビルドまでCLIで一括自動処理

作成者: Turtle|2020年10月16日

シャローム!Sato-Gです。
このブログで使用しているSisense ServerはAWS上にある。
エンドユーザがファイルを更新して、サーバにファイルをアップロードしてElastiCubeをビルドさせたいというニーズは結構あるよね。
その際に、エンドユーザがビューアのライセンスしかないユーザなら、そもそもSisenseじゃサーバにアップロードさせることはできない。
リモートデスクトップでサーバにコピーするなんてもっての外だ。

じゃあどうする?
エンドユーザが使えるS3バケットを準備してあげて、エンドユーザにはS3にファイルをアップロードしてもらい、そこからEC2のドライブにコピーしてビルドを行うっていうのはどう?
はい、では今回はS3連携でビルドするテクニックを紹介しよう。
結構かんたん。

1.環境について

今回の環境は以下の通り

・Sisense Server
Amazon EC2上のインスタンス
・アップロード用フォルダ
S3上にバケット(bucket-a)を作成し、その中にdummyというフォルダを作成
・アクセスキー
AKIAXXXXXXXXXXXXXXZ
・シークレットアクセスキー
SAK123XXXXXXXXXXXXXXXXXXXXZ

ユーザはCloud Berryのようなツールを使ってS3のdummyフォルダにファイルをアップロードする。
Sisense ServerはバッチでS3のdummyフォルダ内のすべてのファイルをサーバの所定のフォルダにコピーし、ビルド処理を行うという流れ。

2.AWSの環境設定

2.1 CLIをセットアップする

AWSにはAmazonコマンドラインインターフェイスという機能があり、これを使用するとファイル操作の自動化が行える。
Sisense Serverでここからダウンロードし、インストールする。
インストールは何ら難しいことはなく、デフォルトのままでいい。

2.2 S3接続環境の設定

さっそくCLIを使って環境設定から始めよう。
コマンドプロンプトを管理者モードで立ち上げる。

S3の接続設定は以下のコマンドで行う。

aws configure

あとはプロンプトに沿って設定していく。

Defalt region nameは日本(東京)の場合は、ap-northeast-1とする。
またDefalt output formatは、text,json,tableから入力するが、今回は特に影響はないので、とりあえずjsonにしておく。

以上でS3のbucket-aはEC2サーバから見えるようになる。

2.3 コピーのバッチ作成

ファイルのコピーもCLIのコマンドで行うので、CLIのコマンドでバッチファイルを作成する。
たった1行だけど。
aws s3 cp <バケット名> <コピー先のフォルダ> --recursive
recursiveというオプションは、再帰的つまり一つ一つ処理する時に使う。この場合は必要。

aws s3 cp s3://bucket-a/dummy/ C:\Data --recursive

今回はbucket-aの下のdummyバケットのファイルを全てローカルフォルダ(C:\Data)にコピーする処理だ。
仮にs3_build.batというファイル名で保存しておく。
cpがコピーコマンドで、ここをsyncにするとフォルダ間の同期を取ってくれる。

2.4 バッチ実行

バッチを実行すると、dummyフォルダに置いてあるdata.csvというファイルがサーバのDataフォルダ内にコピーされた。
ユーザは今後、このdummyフォルダだけ意識すればよく、dummyフォルダにアップロードされたファイルがElastiCubeに反映されることになる。

3.PSM.EXEでビルド

ビルドの対象となるファイルが所定のフォルダに配置された。
しかし、Sisenseのビルド処理の中にバッチ実行を組み込むことはできない。
ではどうするかー
今回はビルド処理自体をバッチで行うように設定してみる。

3-1. PSMとは

SisenseもAWSと同様にCLIを持っている。こちらは新たにインストールするものではなく、以下の
ディレクトリにexeファイルとして存在するPSM.EXEから実行する。

▼PSM.EXE
C:\Program Files\Sisense\Prism

詳細は以下のドキュメントを参照されたい。

▼Sisense Shell (PSM.EXE)
Sisense Developers -Sisense Shell (PSM.EXE)

3.2 ビルド処理のコマンド

PSMでビルドを実行するには以下のコマンドを実行する。

PSMを実行する前にディレクトリ移動を行う必要があるため、以下の2行をバッチファイルs3_build.batに追加する。

aws s3 cp s3://bucket-a/dummy/ C:\Data  --recursive
cd C:\Program Files\Sisense\Prism
psm ecube build name="ec_sql_union" mode=restart serverAddress=localhost

このバッチファイルはS3からデータをコピーし、その後にビルド処理を行うというような一連の流れを自動で実行できる。
実際に実行すると、こんなふうに処理される。

これをスケジュールで処理するのであれば、Windows側のタスクスケジューラに登録すればOKだ。

4.まとめ

Sisenseではビルド時にスクリプト処理は行えないため、CLIを使ってバッチファイルを作成してみた。
AWSのCLI、SisenseのCLIとも、知っていれば色んなことができる。
今回のポイントは
・エンドユーザからサーバにアップロードしてもらうのなら、S3バケットを利用してAWS CLIでサーバのコピーする。
・Sisenseで複数の処理を組み合わせて実行したい場合はPSM.EXEを使用してバッチ処理を行えばよい。

実際のバッチファイルも至ってシンプル!
こんなもんでできるなら楽勝だよね。

ではまた!