OSS 版 Redash を Docker と AWS でセキュアに運用する

VPoEの小笠原(@yamitzky)です。

JX通信社では、NewsDigestFASTALERT の KPI 管理や、データ分析の用途などで、 Redash を活用しています。

ただしセキュリティ上の観点から、Redash の OSS 版をプライベートなネットワーク内で運用しています。セキュリティ的には良いのですが、機能的な面ではマネージド版に劣る部分があります。例えば、Slack の bot や、Google Spreadsheet との連携などはできなくなってしまいます。そこで、新しくOSSを作ってこれらの課題を解決しています。その他にも、通常のマネージド版にはない機能を拡張したりもしています。

2年半 Redash を運用して溜まった知見を紹介します。

Docker クラスター上での Redash のホスト

f:id:yamitzky:20180704000651p:plain

JX通信社のインフラは、基本的には AWS 上にあります。

Redash の公式 Docker イメージを利用し、Amazon ECS を使った社内の Docker クラスター上にデプロイしてホストしています。後述する各種 OSS も、同様に Docker 化してデプロイしています。また、バージョンのアップデートは、Docker イメージのタグを切り替えることによって対応しています。

先述したように、セキュリティ的な観点から Redash はプライベート環境で運用されており、社外からは直接アクセスできないようになっています。

弊社の他サービスでも使ってる Docker クラスターにデプロイすることで、余剰リソースで Redash を使ってることになるので、かなり安価にホストできていることになります。また、WEB+DB PRESSに寄稿させていただいたようなサーバーレスログ基盤を運用しているため、ログデータの管理なども安価です。

OSS 版 Slackbot

Redash には Slack の bot がありますが、Redash がプライベートネットワーク内にあると公式 bot (外部ネットワーク)からアクセスできないために、動きません。

JX通信社では、hakobera さんが開発したものをフォークした、 yamitzky/redash を使っています。もちろん、Dockerイメージ もあります。

フォークした版は、元のものに比べて次のような追加機能があります。

  • グラフだけではなく、テーブルやダッシュボードの結果の投稿
  • 結果の投稿時に、クエリ名などを補完する (検索するとき便利です)
  • puppeteer への移行
  • オフィシャル Docker イメージの提供

f:id:yamitzky:20180705190958p:plain

Google Spreadsheet への連携

Google Spreadsheet は、IMPORTDATA 関数でインターネット上の CSV ファイルをインポートする機能があります。これを使うと、Redash の結果を Spreadsheet へインポートすることができます。

しかし、Redash がプライベート環境にある場合、外部ネットワークにある Spreadsheet のサーバーから Redash にアクセスできないので、動きません。

そこで yamitzky/redash-to-spreadsheet を開発し、一定の命名規則で作った Spreadsheet に、Redash のクエリ結果を自動でエクスポートするようにしています。こちらも Docker イメージがあります。

例えば、 Q135: ほげほげ というタイトルの Spreadsheet を作ると、クエリID「135」のクエリの結果が、定期的に保存されます。

追加のデータソース「iTunes Connect App Analytics」

ここからは、通常のRedash にはない機能です

Redash には、特定のフォーマットの URL(API) をデータソースとして扱う機能があります。

そこで、yamitzky/itunes-connect-analytics-api を作り、iTunes Connect の App Analytics の情報を Redash 向けに加工し、Redash 上からクラッシュ情報やストア情報をクエリできるようにしました。こちらも Docker イメージがあります。

ログ可視化ツール

こちらはまだ開発途中なのですが、 Redash で集計したユーザーログを、SPA 上でわかりやすく可視化する OSSyamitzky/redash-log-viewer」を作っています。ユーザーの行動をより定性的に追って、気づきを得たり、さらに使いやすいものにしていくのが目的です。

f:id:yamitzky:20180704000716p:plain

まとめ

最初に上げた構成図に紹介した OSS も含めて拡張した結果、こんな感じになっています。

f:id:yamitzky:20180704001116p:plain

Redash は OSS であり、API も完備されているということもあり、かなり拡張性があるものだと感じています。

引き続き、外部OSS という形で Redash のエコシステムをより便利なものにしていきたいです。

JX通信社では一緒にログ基盤を作るエンジニアを募集しています

WEB+DB PRESS vol.105の特集「実践サーバレス」を寄稿しました #wdpress

VPoEの小笠原(@yamitzky)です。技術評論社出版「WEB+DB PRESS」の今月号の特集「実践サーバレス」にJX通信社のエンジニア3名で寄稿しました。WEB+DB PRESSで初めてのサーバレス特集とのことです。発売日は6月23日(土)です。

表紙画像
WEB+DB PRESS Vol.105|技術評論社

きっかけ

今年の春頃、デブサミ2018でNewsDigestのサーバレスに関して発表させていただいたのですが、資料をご覧になった技術評論社の担当者の方にお声がけいただきました。

www.wantedly.com

特集の構成と見どころ

前半は導入、中盤は実践、後半は運用、といった構成になっています。

第1章:サーバレスとは何か・・・メリットと制限を正しく知る
第2章:サーバレス環境の作り方・・・AWS LambdaでHello World
第3章:サーバレスなAPIを作ろう・・・APIの設計,開発環境の構築,デプロイ
第4章:サーバレスなデータ分析環境を作ろう・・・Firehoseによる収集,Kinesis/S3による保存,Athenaによる集計
第5章:サーバレスを支える継続的デリバリ・・・Circle CI/Terraformによるテストとデプロイの自動化
第6章:サーバレスなシステムの監視・・・今日からできるログ/メトリクス監視

JX通信社では、2016年ごろからサーバレスなシステムを本番稼働しています。

それも一部の小さな機能だけではなく、4章のビッグデータ基盤や、3章の API のような、ある程度大きなシステムです。当然チームでシステムを作るので「サーバレスなシステムを、どうやってチームで開発・保守していくのか?」が課題となり、その解決策として、CI/CDの自動化やコード設計の工夫をしています。

今回のサーバレス特集は、初心者向けの入門だけではなく、そのような実運用を経た上でのプラクティスを紹介していますので、初心者から上級者までぜひご覧いただければと思います!

おわりに

人生で初めての「紙のデプロイ」で、いろいろと慣れないところも多かったのですが、編集の方にサポートいただきながらなんとかデプロイすることができました。とても貴重な経験でした。ありがとうございました!

まだ校了の打ち上げをしていないので、校正に協力してくれたJXのメンバーと焼き肉で打ち上げをしたいと思います。

↓ 校了の際のSlack (※社内スピーカーでも読み上げられる仕組みです) f:id:yamitzky:20180621184043p:plain

JX通信社ではエンジニアを募集しています