TabpyをCloud Run(on GKE)で使う
Tabpyに触ったことなかったので、
Cloud Runの勉強も兼ねてTabpyをCloud Run(on GKE)で稼働させてみた時のメモ
2021/6/17追記
久々にTabpy調べてみたら、CloudRun(フルマネージド)で動くようになってたり、TableauOnlineでも使えるようになってた。。
Dockerイメージ作って、GCRにプッシュして、あとはCloudRunにデプロイするだけで終わり。
GKEクラスタの設定変えたり、カスタムドメイン設定したり、SSL証明書どうするかとかの考慮が一切不要になった。
Tabpyとは
TableauとPythonを連携させ、Pythonで統計処理や機械学習した結果をTableauで可視化することができる仕組み
任意のPC、サーバにPythonモジュールをpipでインストールして、Tabpyサービスを起動させて、Tableauの外部サービス接続を使用してTabpyにアクセスする
Cloud Runとは
https://cloud.google.com/run/?hl=ja
コンテナを動かすためのフルマネージドサービス
リクエスト処理時間に応じて課金
いい感じにオートスケールとかもしてくれるっぽいので、GKEよりさらにインフラの手がかからないが色々と制限ある(制限時間だったり、ポート指定だったり)
個人には何でも動かせるCloud Functions的なイメージ
on GKEとの違い
https://tomokazu-kozuma.com/the-difference-between-cloud-run-and-cloud-run-on-gke/
なぜCloud Run on GKEなのか
Cloud RunだとTabpyに接続ができなかった。。
Cloud Runで自動で発行されるSSL証明書とTabpyのSSL化で使うSSL証明書との不整合が悪さしているのかもしれないがよくわからない。。。
(Clourd Runで自動発行される証明書は使用不可)
開発環境
Cloud Shell使う前提
TabpyをCloud Runにデプロイ
GKEクラスタを作成(サンプル)
以下参考にセットアップ
https://cloud.google.com/run/docs/gke/setup
gcloud beta container clusters create <クラスタ名> \
--machine-type=g1-small \
--preemptible \
--num-nodes=3 \
--disk-size=10 \
--zone=us-central1-a \
--addons=HorizontalPodAutoscaling,HttpLoadBalancing,Istio,CloudRun \
--cluster-version=latest \
--enable-stackdriver-kubernetes \
--enable-ip-alias \
--scopes cloud-platform
すでに立てているGKEクラスタに対してCloud Runを有効にするには、下のキャプチャの青丸項目を上から順に有効にする
Dockerfileの作成
インストールするライブラリは必要に応じて追加する
pip installでtabpyインストールして、tabpy起動するだけで基本OKぽい
from continuumio/miniconda3:latest
ARG config_dir=/tmp/
ADD file.conf $config_dir
WORKDIR $config_dir
RUN pip install --upgrade pip && \
pip install numpy pandas scikit-learn scipy textblob nltk vaderSentiment && \
pip install reverse_geocoder geopy && \
pip install tabpy==1.0.0
RUN tabpy-user add -u <username> -p <password> -f pwd.txt
ENV PORT 8080
EXPOSE 8080
ENTRYPOINT tabpy --config=file.conf
#このファイルはDockerfileと同じディレクトリに作る
[TabPy]
TABPY_PORT = 8080
TABPY_PWD_FILE = /tmp/pwd.txt
Dockerイメージの作成
Dockerfileが格納されているディレクトリで以下コマンド実行。
tabpy-sampleというイメージが作成される。
docker image build -t asia.gcr.io/<プロジェクトID>/tabpy-sample:latest .
DockerイメージのPUSH
Container RegistryへのPush
docker push asia.gcr.io/<プロジェクトID>/tabpy-sample:latest
Cloud Run へのデプロイ
gcloud beta run deploy tabpy-sample \
--image asia.gcr.io/<プロジェクトID>/tabpy-sample \
--platform gke \
--cluster <GKEクラスタ名> \
--cluster-location <ロケーション>
platformのオプションがmanagedになるとCloudRunへのデプロイになる
gcloud beta run deploy tabpy-sample \
--image asia.gcr.io/<プロジェクトID>/tabpy-sample \
--platform managed \
--region <リージョン>
カスタムドメインのマッピング
Cloudrun on GKEにデプロイすると、
デフォルトではcurl経由でヘッダでホストを指定しないとサービスにアクセスできない
Tableauの外部接続サービスではヘッダの指定等できないのでカスタムドメインをマッピングしてアクセスする必要がある
ドメインの所有権の確認
gcloud domains verify [DOMAIN]
サービスにドメインをマッピング
gcloud beta run domain-mappings create --service [SERVICE] --domain [DOMAIN]
DNSレコードデータを取得
gcloud beta run domain-mappings describe --domain [DOMAIN]
固定IPの予約(Cloudrun on GKEを使用している場合)
gcloud compute addresses create [IP-NAME] --addresses [EXTERNAL-IP] --region [REGION]
EXTERNAL-IPはDNSレコードデータを取得の手順で取得したAレコードのIPアドレスを指定する
ドメイン登録事業者で DNS レコードを追加する
ハマりポイント
Dockerfile
以下を参考に(丸パクリして)Dockerfile作ったが、少し古かった模様。。
https://github.com/erichannell/TabPy-docker
現在はpip installでtabpyインストール完了らしい。
公式のTabpyドキュメントを参考にDockerfile修正
https://github.com/tableau/TabPy/blob/master/docs/server-install.md#starting-tabpy
Cloudrunデプロイ時のポート
CloudrunはリッスンPORTを8080に指定しなければならない
https://stackoverflow.com/questions/55662222/container-failed-to-start-failed-to-start-and-then-listen-on-the-port-defined-b
https://cloud.google.com/run/docs/reference/container-contract?hl=ja#port
Tabpyはデフォルトポートが9004なので、configファイル使ってポートを8080指定する必要がある
https://github.com/tableau/TabPy/blob/master/docs/server-config.md
TableauでCloud Run上のTabpyへアクセス
TableauDesktopから接続
サーバー:設定したカスタムドメイン
ポート:80
ユーザー名:Dockerfileで設定したユーザー
パスワード:Dockerfileで設定したユーザー
TableauServerから接続
Tableau Serverでの外部サービス接続許可
https://help.tableau.com/current/server-linux/ja-jp/config_r_tabpy.htm
https://help.tableau.com/current/server-linux/ja-jp/cli_security_tsm.htm#tsm_security_vizql-extsvc-ssl-enable
TableauServerのコマンドラインで以下を実行
tsm security vizql-extsvc-ssl enable --connection-type tabpy --extsvc-host <ホスト名> --extsvc-port <PORT> --extsvc-username <Tabpyユーザー名> --extsvc-password <Tabpyパスワード>
tsm pending-changes apply
現時点(2020年1月)ではTableauOnlineからは使えないようです。。。
orz
https://help.tableau.com/current/pro/desktop/ja-jp/r_connection_manage.htm
外部サービス スクリプトを含むワークブックは Tableau Online にパブリッシュできません。
色々と参考にしたページ
Author And Source
この問題について(TabpyをCloud Run(on GKE)で使う), 我々は、より多くの情報をここで見つけました https://qiita.com/yakamazu/items/46c6921eb930f10ccb9f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .