templateCloudFormationECSdocker-composeredashecs-cliテックタッチアドベントカレンダーも無事8日目になりました。昨日は@analogrecordによる「goのhot-reload」でした。テックタッチの開発環境は彼がrealizeを導入してくれたおかげで、docker-compose一発で快適な環境が立ち上がり、生産性が大幅アップしました。本日はタイトルの通り、社内でのデータ民主化に欠かせないRedashを、本番運用まで見据えて立ち上げる方法の紹介です。Redash?https://redash.io/Redashは多様なデータソースに統合的にクエリを発行し、結果を可視化するためのOSSです。2019年現在においては、開発やユーザーサポートも活発に続けている印象です。Metabaseなどいくつか類似のOSSがありますが、対応しているデータソースの数が豊富な点、UIがシンプルで使いやすい点が気に入っています。動機Redashのフォーラムでもスレッドがありますが、ECSでRedashを動かす方法が確立されていなさそうだったので、運用実績のあるCfnテンプレートを少し手直しして公開することにしました。対応バージョンは現時点で最新のver.8です。applicationやDBを1つのサーバーに詰め込んで運用するのが問題なければ、このレポジトリが手っ取り早いと思います。本体とは別に、Slackにクエリの結果を展開してくれる便利なBotもあるので、そちらも合わせて立ち上がるような設定にしてあります。(SlackにredashのクエリやダッシュボードのURLをPostするリマインダーを設定しておくと、Slackチャンネルへのポストが手間なく実現できます。templateと手順があります。https://github.com/ikazoy/redash-on-ecsREADMEも丁寧めに書いたので見てください。面白くないので、少しだけ構成などを解説します。ElastiCacheを自前で定義しています。groupやECSのService設定があるので、EC2インスタンスやコンテナが落ちても自動復旧してくれる(はず)ECSの設定を変更すれば冗長性を確保できるその他Tipsなどecs-cli上述の通り、Redashレポジトリのdocker-compose.ymlをなるべく流用する形でecs上にServiceを立ち上げようと思いました。ECSにdocker-compose.yml形式でTaskDefinitionを作成する際は、ecs-cliを使っています。logging(CloudWatchへの出力)、Redashに必要な環境変数の定義を調整しました。SSMの活用また、ECSのTaskDefinitionに対してconfidentialな環境変数を設定する際は、ecs-cliでecs-paramsオプションを指定することで、SSMに格納したパラメーターを参照できるようにしました。REDASH_REDIS_URLこれでデータベースへの接続情報など、機密情報を安全に管理できますね。SESを使っています。Fargateを比較したときの稼働時間あたりの金銭的コストデバッグのしやすさを考慮してEC2で運用する選択をしました。上記リポジトリのREADMEにもありますが、構築作業中はEC2インスタンスに接続して、起動に失敗したdockerコンテナのログを見て原因を探り、設定を変更するという作業が必要でした。EC2のほうが作業をしやすいです。EC2インスタンスをPrivateなSubnetで起動していると踏み台サーバーが必要になるので、一時的にPublicなSubnetで起動した上でsshするとデバッグしやすかったです。バージョンアップの方法Redashはこれまでおよそ半年に1回程度の頻度で新しいバージョンがリリースされています。公式のバージョンアップガイドにある通り、バージョンアップの作業時はデータベースのバックアップを取っておくのが安全です。templateを使えば、RDSを含んだStackがまるっと一式立ち上がりますので、実際のバージョンアップ時には以下のような方法で気軽に新バージョンを試しつつ、アップデートすることができます。stackのパラメーターとして変更可能になっています。新バージョンの動作確認。問題なければ旧バージョンと新バージョンのドメインを切り替える。以上、参考になれば幸いです。使って快適生活」です。homeを使って、もっぱらテレビを点けたり消したりしています。「テックの力を最大化する」をミッションに掲げ、ヒトとテクノロジーの架け橋となるサービスを提供します。upLoginユーザーは見つかりませんでした。