RedashをAWS(EC2+RDS)で試してみた


こんにちは、@0yanです。
最近、課内で「戦略人事の実現のため、カオナビから別サービスに切り替えよう」という話が出始め、
- タレントパレット
- HRMOS CORE
- ヒトマワリ
などを比較検討しています。

そんな折、OSSのBIツール「Redash」の存在を知ったので試してみました。

前提条件

  • Windows 10 homeを使用
  • AWSアカウント登録済み
  • TeraTermインストール済み

手順

  1. EC2インスタンスを作成(Redash AMIを使用)
  2. RDSにMySQLデータベースを作成
  3. TeraTermでEC2に接続し、CSVを転送
  4. EC2にMySQLクライアントをインストールし、RDSのMySQLデータベースに接続
  5. データベースとテーブルを作成し、CSVを取り込み
  6. Redashにデータベースを接続
  7. Redashにクエリを作成し、ダッシュボードで表示

1. EC2インスタンスを作成(Redash AMIを使用)

①AWSマネジメントコンソールからEC2を検索、EC2ダッシュボードのサイドバーからインスタンスを選択します。

②「インスタンスの作成」をクリックし、ステップ1: Amazon マシンイメージ(AMI)でコミュニティAMIを選択します。

Setting up a Redash Instanceで、Redashが作成したAWS用RedashインスタンスのAMIを調べます(今回は東京リージョンを選択しました)。

④②の検索ボックスに③で調べたAMIを入れて検索し、選択ボタンをクリックします。

⑤ステップ2: インスタンスタイプの選択でt2.smallを選択し、確認と作成をクリックします。

なお、下記のとおり、t2.microでは動きません(最低でもt2.smallを選択する必要があります)のでご注意ください。

Launch the instance with the pre-baked AMI we create (for small deployments t2.small should be enough):

事前に作成したAMIを作成してインスタンスを起動します(小規模な展開の場合はt2.smallで十分です)。

引用: Setting up a Redash Instance

⑥ステップ7: インスタンス作成の確認でセキュリティグループの編集をクリックします。

⑦下記のとおり、SSHに加えてHTTPとHTTPSを許可する必要があるため、ステップ6: セキュリティグループの設定で追加し、確認と作成をクリックします。

When launching the instance make sure to use a Security Group, that only allows incoming traffic on ports: 22 (SSH), 80 (HTTP) and 443 (HTTPS). These AMIs are based on Ubuntu so you will need to use the user ubuntu when connecting to the instance via SSH.

インスタンスを起動するときは、ポート(22(SSH)、80(HTTP)、および443(HTTPS))でのみ着信トラフィックを許可するセキュリティグループを使用してください。これらのAMIはUbuntuに基づいているため、SSHを介してインスタンスに接続する場合は、ユーザーubuntuを使用する必要があります。

引用:Setting up a Redash Instance

なお、IP制御をする必要がある場合はソースのCIDRを適時変更してください。

⑧ステップ7: インスタンス作成の確認の最下部にある起動をクリックし、ポップアップで「既存のキーペアの選択」または「新しいキーペアの作成」のどちらかを選択した後、インスタンスの作成をクリックします。

以上でEC2インスタンスの作成は終了です。

2. RDSにMySQLデータベースを作成

①EC2ダッシュボードのサイドバーからセキュリティグループを選択、作成したEC2のセキュリティグループのグループID(sg-から始まるID)をコピーします。

②同ページ内のセキュリティグループの作成をクリックし、下図のとおりに設定後、作成をクリックします。

ポイントはソースに①でコピーしたグループIDを入れることです(このセキュリティグループは、EC2インスタンスがRDSに作成するMySQLデータベースにアクセスできるようにするために作成しております)。

③RDSのページに遷移し、下部にあるデータベースの作成をクリックします。

④データベースの作成ページで、下表のとおりに設定をします(記載のないものはデフォルト設定です)。

項目 内容
データベース作成方法を選択 簡単作成
エンジンのタイプ MySQL
DBインスタンスサイズ 無料利用枠
マスターパスワード 任意のパスワード

⑤データベース作成完了後、RDS>データベース>④で作成したデータベース名を選択し、変更をクリックします。

⑥セキュリティグループを②で作成したものに変更し、次へをクリックした後、DBインスタンスの変更をクリックします。

以上でRDSでのMySQLデータベースの作成は終了です。

3. TeraTermでEC2に接続し、CSVを転送

①EC2インスタンスのIPv4パブリックIPをコピーします。

②TeraTermを起動し、ホストに①でコピーしたIPv4パブリックIPをペーストしてOKをクリックします。

③ユーザー名に「ubuntu」、パスワードは空白のまま、秘密鍵にEC2インスタンスの鍵ペア生成時にダウンロードしたpemファイルを選択してOKをクリックします。

【補足】
TeraTermでログインする際のユーザー名はOSによって異なります。

OS ユーザー名
Amazon Linux ec2-user
Ubuntu ubuntu
CentOS centos

Redash AMIはUbuntuベースのため、ユーザー名が「Ubuntu」となっております。ご注意ください。

④CSVを格納するフォルダを作成します。

$ pwd
/home/ubuntu
$ mkdir csv
$ cd csv
~/csv$ pwd
/home/ubuntu/csv

⑤以下の記事に従い、データベースに取り込みたいCSVファイルをEC2インスタンスのCSVフォルダに転送します。

TeraTermで効率良くファイル転送

⑥CSVフォルダに転送できたか確認します。

~/csv$ pwd
/home/ubuntu/csv
~/csv$ ls
student.csv

以上でEC2インスタンスへのCSVファイルの転送は終了です。

4. EC2にMySQLクライアントをインストールし、RDSのMySQLデータベースに接続

sudo apt install mysql-client-core-5.7コマンドでMySQLクライアントをEC2インスタンスにインストールします。

②RDSに作成したMySQLデータベースのエンドポイントをコピーします。

③以下のコマンドでMySQLデータベースに接続します。

$ mysql -h RDSエンドポイント -P 3306 -u admin -p
Enter password: マスターパスワード

以上でMySQLデータベースへの接続ができました。

5. データベースとテーブルを作成し、CSVを取り込み

①以下のコマンドでデータベース及びテーブルを作成します。なお、今回、データベース名はexample_db、テーブル名はstudentとしました。

mysql> create database example_db;
mysql> show databases;
mysql> use example_db;
mysql> create table student (
  列名 データ型,
  ・・・
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

なお、列名に丸かっこなどの記号が入っている際、MySQLではバッククォート「`」で囲みます。

SQL文のテーブルもしくは列名に[]をつけるのはどういう意味か

②以下のコマンドでCSVフォルダに転送したCSVファイルをMySQLデータベースに取り込みます。

mysql> load data local infile "/home/ubuntu/csv/student.csv" into table student fields terminated by ',';

なお、CSV取り込みについては以下の記事を参考にさせて頂きました。

【MySQL】CSVファイルをデータベースにインポートする

以上でRedashを使う準備がすべて終了しました。

6. Redashにデータベースを接続

①EC2インスタンスのIPv4パブリックIPをブラウザに入力し、Redashを起動します。

②起動すると、下図のとおり、Adminユーザー登録画面になるので登録します。

③ログインすると下図のような画面になるのでConnect a Data Sourceをクリックします。

④データソースの中からMySQL(RDS)を選択します。

⑤下図のとおり、入力を求められますので、下表に従い入力します。

項目 入力内容
Name データソース名(任意)
Host RDSのエンドポイント
User admin
Password RDSで設定したマスターパスワード
Database name example_db

Createをクリック後、Test Connectionをクリックします。「Success」と表示されればRedashとデータベースの接続成功です。

7. Redashにクエリを作成し、ダッシュボードで表示

力尽きました・・・(苦笑)
以下の記事が詳しいのでご覧くださいませ。

re:dash でグラフを作成してみる

さいごに

実は今までHeroku+PostgreSQLばかり触っていたので、AWSとMySQL自体、触るのが初めてでした。
なので備忘録も兼ねてAWSとMySQLの操作についても細かく記載しました。
「この記事長いな」と思われた方、すみませんでしたm(_ _)m

今回、Redashを試してみて「こんなに便利なもんがOSSで良いのか!」と感動しました。
非エンジニアの人事課メンバーにはRedashでもハードルは高い(SQLにすら抵抗がある)ので、タレントパレット・HRMOS CORE・ヒトマワリのどれかを入れることになるんだろうな~と思いますが、経営企画の方が安価なBIツールを探していたので、これを紹介したら喜びそうだなと感じました(ので教えようと思います)。

本記事をご覧くださった方、長文にも関わらずご覧頂きありがとうございました。