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が内部で利用している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:
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
docker-compose up --force-recreate --build
sh /app/bin/docker-entrypoint manage db upgrade
〜略〜
containers:
app:
image:
repository: redash/redash
tag: 10.0.0.b50363
command: ["/bin/sh", "-c", "/app/bin/docker-entrypoint manage db upgrade"]
v10の画面レイアウト
公式の手順には書かれていないのですが、REDASH_COOKIE_SECRETという環境変数を、指定しなければいけなくなっています。弊社の環境では、この環境変数がないとエラーで起動できませんでした。このREDASH_COOKIE_SECRETは、DBの data_sources テーブルにある暗号化フィールドで使われるため、バージョンアップ中に値が変わってしまうと、設定内容が壊れてしまう事もあるようです。また、v8以前の構築時に未設定の場合で起動していた場合、flaskのデフォルト値が使われるようになっているため、セキュリティ的にもデフォルト値からの変更が必要となっています。
REDASH_COOKIE_SECRETの詳細については、下記も参照を
また、schedulerが利用するqueueが、CeleryからRQになっているため、環境変数に設定している、Redis接続情報についても注意が必要です。
REDASH_REDIS_URL: "rediss://PASSWORD@master.XXX.xxx.regeon.cache.amazonaws.com:6379/0"
弊社では、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つの作業に付随した細かい変更点や環境差分により、思わぬ所でハマってしまう事もあるかもしれません。
そんな時に、この記事がお役に立っていればと、思っています。
興味のある方は 採用ページ も見ていただけると嬉しいです。
Twitter @mot_techtalk のフォローもよろしくお願いします!
❌ 未対応のtype(child_page)が見つかりました