Mobility Technologies(MoT)では、クラウドサービス上にあるマネージドデータベースや、BigQueryに流しているサービスログの参照ツールとして、ダッシュボードツール「Redash」を活用しています。 以前の記事でご紹介した、Self Hosted版 Redashの構築時は、最新版であるRedashバージョンv10の安定版が出た直後だったため、ひとつ前の安定版であるバージョンv8での構築でした。 なので、今回、社内でのSelf Hosted版 Redashの運用も慣れてきたタイミングに、最新版であるv10へとアップデートを行いました。 この記事では、バージョンアップの際のポイントや、注意点をご紹介できればと思います。
はじめに
SREグループ・ヒロチカです。Mobility Technologies(MoT)では、サービスのクラウドインフラの設計から構築・運用までを担当しています。
以前の記事で、Self Hosted版 Redashの構築についてのご紹介を致しましたが、今回は、構築当時のRedashバージョンv8から、現行の最新バージョンであるv10系へのアップデート作業時の内容を、ご紹介できればと思います。
- Redash https://redash.io/
- Redash releases https://github.com/getredash/redash/releases
- Self Hosted版 Redashの構築(前回の記事) https://lab.mo-t.com/blog/redash-infrastructure-construction
バージョンアップへの経緯
今回、バージョンアップに至った経緯として、Redashが内部で利用しているPythonのバージョンを、2系から3系にあげたかった点があげられます。
Self Hosted版 Redashとして、v8の画面のレイアウトは、Self Hosted版を運用する前まで利用していたweb版と大きな相違がなかったため、web版からSelf Hosted版への移行の際、クエリや設定の変更を、とてもスムーズに行うことができました。
その点においては、現状のままでもよかったのですが、弊社では、Redashのデータソース・ユーザ権限・セキュリティ設定の定期チェックバッチを独自に作成しており、それらをv8が内部で利用しているPython2系に合わせた形で改修し運用し続けるのが負担となってきたため、今回、内部でPython3系が動いているv10にし、各種バッチもPython3系で運用したいと、バージョンアップに踏み切りました。
バージョンアップ手順
基本的な流れは、githubのreleases v10.0.0項にある、公式の手順をもとにバージョンアップを実施しました。弊社では、EKS環境 + RDS + Elasticache (+SendGrid) の構成でRedashを運用している(前回の記事を参照ください)ため、弊社の環境用に合わせた変更を行っていきます。
独自のポイントとしては、途中のDBマイグレーションコマンドを打つために、サービスの動いていないpodを起動し、そこからマイグレーションを実施しています。また、切り戻しができるよう作業開始直前のDBのスナップショット・ダンプ等は、適宜取得しておく方がよいかと思います。
REDASH_HOST: "https://example.xyz" PYTHONUNBUFFERED: "0" REDASH_LOG_LEVEL: "INFO" # Redis設定(secureな通信にするためrediss) REDASH_REDIS_URL: "rediss://PASSWORD@master.XXX.xxx.regeon.cache.amazonaws.com:6379/0" # RDS設定 REDASH_DATABASE_URL: "postgresql://USER:PASSWORD@XXX.cluster-xxx.regeon.rds.amazonaws.com/DB_NAME" POSTGRES_PASSWORD: "PASSWORD" POSTGRES_HOST_AUTH_METHOD: "trust" REDASH_COOKIE_SECRET: "XXXXXX"
- containers のimageのバージョン変更。各種worker, scheduler等も同様に。
- schedulerについては、利用しなくなったceleryのenvごと削除
- releasesを参照しつつ、あらたに、
worker
を起動するよう追加
〜略〜 containers: app: image: repository: redash/redash tag: ~~8.0.0.b32245~~ **10.0.0.b50363** command: ["/bin/sh", "-c", "/app/bin/docker-entrypoint server"] scheduler: image: repository: redash/redash tag: ~~8.0.0.b32245~~ **10.0.0.b50363** command: ["/bin/sh", "-c", "/app/bin/docker-entrypoint scheduler"] ~~environment: QUEUE: "celery" WORKERS_COUNT: 1~~ worker: image: repository: redash/redash tag: **10.0.0.b50363** command: ["/bin/sh", "-c", "/app/bin/docker-entrypoint worker"] environment: QUEUES: "periodic emails default" WORKERS_COUNT: 1 〜略〜 #途中のDBマイグレーション作業のために起動。アップデート後削除 manual: image: repository: redash/redash tag: **10.0.0.b50363**
- 現在動いている、バージョンv8の全てのサービスを停止
- (環境によっては、必要に応じて、手順にあるビルドコマンドを実行)
docker-compose up --force-recreate --build
- 作業用pod(上記、manual)を起動し、Redash用DBに対してマイグレーションコマンドを実行
sh /app/bin/docker-entrypoint manage db upgrade
- Redash用DBのマイグレーションは、デプロイ時に毎回マイグレーションを実行するpodを起動しているのですが、そちらのコマンドも修正しておきます
- MoTが管理するインフラ基盤Kenosでは、デプロイ時のマイグレーション実行にHelmフックを利用
- 参考: インフラ基盤Kenos(ケノス)について > Helm
〜略〜 containers: app: image: repository: redash/redash tag: **10.0.0.b50363** command: ["/bin/sh", "-c", "/app/bin/docker-entrypoint manage db upgrade"]
- 停止していた各サービスについて、上記の通りバージョンv10に変更した内容でデプロイし、無事起動・アクセスができれば、バージョンアップ完了です。
バージョンアップによる主な変更点
- メニューバーのレイアウトが、横向きから縦向きへ
- dashboardの各ページのURLが、dashboardのidを含む仕様に
- schedulerが、celeryの利用を廃止し、RQ jobsを利用するように
- 内部で利用しているPythonのバージョンが2系から3系に
- ログインに利用できるSAML設定で、static SAML と dynamic SAMLが選べるように
v10の画面レイアウト
バージョンアップ時のハマりポイント
環境変数
公式の手順には書かれていないのですが、REDASH_COOKIE_SECRET
という環境変数を、指定しなければいけなくなっています。弊社の環境では、この環境変数がないとエラーで起動できませんでした。このREDASH_COOKIE_SECRET
は、DBの data_sources テーブルにある暗号化フィールドで使われるため、バージョンアップ中に値が変わってしまうと、設定内容が壊れてしまう事もあるようです。また、v8以前の構築時に未設定の場合で起動していた場合、flaskのデフォルト値が使われるようになっているため、セキュリティ的にもデフォルト値からの変更が必要となっています。
REDASH_COOKIE_SECRET
の詳細については、下記も参照を
- https://redash.io/help/open-source/admin-guide/secrets#Changing-the-Application-Secret
- https://github.com/getredash/redash/security/advisories/GHSA-g8xr-f424-h2rv
また、schedulerが利用するqueueが、CeleryからRQになっているため、環境変数に設定している、Redis接続情報についても注意が必要です。
REDASH_REDIS_URL: "rediss://PASSWORD@master.XXX.xxx.regeon.cache.amazonaws.com:6379/0"
SAMLログイン
弊社では、RedashのログインにSAMLを利用しているのですが、今回のアップデート以降、ログインができなくなったという問い合わせを受けました。調べると、v8でSAMLを設定した場合、バージョンアップ時に、SAMLの設定が壊れてしまうというバグを抱えているようで、そちらを踏んだようです。
対応方法としては、再度、SAML設定をすることが必要で、幸いバージョンアップ作業後も、自分がログインできている状態が続いていたため、画面からSettings > General より、dynamic SAMLを再設定することで解決いたしました。併せてSSOの設定の見直しも行いました。
SAML Enabled: "Enabled (Dynamic)" SAML Metadata URL: "メタデータURL" SAML Entity ID: "https://<redash URL>/saml/callback?org_slug=default" SAML NameID Format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
ログインに関して、公式による設定方法の詳細は下記に記載されています。v10になると、SAMLの設定がstaticとdynamicに分かれるようになっています。
おわりに
MoTで利用している、Self Hosted版 Redash 構築のバージョンアップ作業についてご紹介いたしました。
基本的には、公式のdocker imageから利用バージョンを変更する作業と、RDSのマイグレーション作業で完結しますが、この2つの作業に付随した細かい変更点や環境差分により、思わぬ所でハマってしまう事もあるかもしれません。
そんな時に、この記事がお役に立っていればと、思っています。