[PYTHON] Utiliser Tabpy avec Cloud Run (sur GKE)

Je n'ai jamais touché Tabpy, donc Un mémo lorsque j'ai essayé d'exécuter Tabpy sur Cloud Run (sur GKE) tout en étudiant Cloud Run

Qu'est-ce que Tabpy

Un mécanisme qui permet à Tableau de visualiser les résultats du traitement statistique et de l'apprentissage automatique en Python en liant Tableau et Python. Installez le module Python avec pip sur n'importe quel PC ou serveur, démarrez le service Tabpy et accédez à Tabpy à l'aide de la connexion de service externe de Tableau.

Qu'est-ce que Cloud Run?

https://cloud.google.com/run/?hl=ja Service entièrement géré pour l'exécution de conteneurs Facturé selon le temps de traitement de la demande Cela semble être une balance automatique avec une sensation agréable, donc elle nécessite moins d'infrastructure que GKE, mais il existe diverses restrictions (limite de temps, désignation du port, etc.) Image de type Cloud Functions permettant aux individus de tout déplacer

Différence par rapport à GKE https://tomokazu-kozuma.com/the-difference-between-cloud-run-and-cloud-run-on-gke/

Pourquoi Cloud Run sur GKE

Je n'ai pas pu me connecter à Tabpy avec Cloud Run. .. Je ne sais pas si l'incohérence entre le certificat SSL émis automatiquement par Cloud Run et le certificat SSL utilisé pour la conversion SSL de Tabpy est mauvaise. .. .. (Les certificats émis automatiquement par Cloud Run ne peuvent pas être utilisés)

Environnement de développement

Prémisse pour utiliser Cloud Shell

Déployer Tabpy sur Cloud Run

Dockerfile

Créer un cluster GKE (exemple)

Configuration en vous référant aux éléments suivants https://cloud.google.com/run/docs/gke/setup

Créer un exemple de cluster


gcloud beta container clusters create <Nom du cluster> \
   --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

Pour activer Cloud Run pour un cluster GKE déjà établi, activez les éléments du cercle bleu dans la capture ci-dessous dans l'ordre du haut.

image.png

Créer un Dockerfile

Ajouter des bibliothèques à installer selon les besoins Installez simplement tabpy avec pip install et démarrez tabpy, c'est fondamentalement OK

Dockerfile


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

file.conf


#Créez ce fichier dans le même répertoire que le Dockerfile
[TabPy]
TABPY_PORT = 8080
TABPY_PWD_FILE = /tmp/pwd.txt

Créer une image Docker

Exécutez la commande suivante dans le répertoire où le Dockerfile est stocké. Une image appelée tabpy-sample est créée.

python


docker image build -t asia.gcr.io/<ID du projet>/tabpy-sample:latest .

PUSH de l'image Docker

Push to Container Registry

python


docker push asia.gcr.io/<ID du projet>/tabpy-sample:latest

Déployer sur Cloud Run

CloudRunOnGKE


gcloud beta run deploy tabpy-sample \
   --image asia.gcr.io/<ID du projet>/tabpy-sample \
   --platform gke \
   --cluster <Nom du cluster GKE> \
   --cluster-location <Emplacement>

Déployer sur CloudRun lorsque l'option de plateforme est gérée

(référence)CloudRun


gcloud beta run deploy tabpy-sample \
   --image asia.gcr.io/<ID du projet>/tabpy-sample \
   --platform managed \
   --region <Région>

Mappage de domaine personnalisé

https://cloud.google.com/run/docs/mapping-custom-domains?hl=ja

Lorsqu'il est déployé sur Cloudrun sur GKE, Par défaut, le service n'est pas accessible sans spécifier l'hôte dans l'en-tête via curl. Puisqu'il n'est pas possible de spécifier des en-têtes avec le service de connexion externe de Tableau, il est nécessaire de mapper et d'accéder à un domaine personnalisé.

Confirmation de la propriété du domaine

python


gcloud domains verify [DOMAIN]

Mapper les domaines aux services

python


gcloud beta run domain-mappings create --service [SERVICE] --domain [DOMAIN]

Obtenir les données d'enregistrement DNS

python


gcloud beta run domain-mappings describe --domain [DOMAIN]

Réservation IP fixe (si vous utilisez Cloudrun sur GKE)

python


gcloud compute addresses create [IP-NAME] --addresses [EXTERNAL-IP] --region [REGION]

EXTERNAL-IP spécifie l'adresse IP de l'enregistrement A acquis dans la procédure d'acquisition des données d'enregistrement DNS.

Ajouter un enregistrement DNS avec le registraire de domaine

https://cloud.google.com/run/docs/mapping-custom-domains?hl=ja#dns_update

Point addictif

Dockerfile J'ai fait un Dockerfile en référence à ce qui suit, mais il semble que c'était un peu vieux. .. https://github.com/erichannell/TabPy-docker Actuellement, il semble que l'installation tabpy soit terminée avec l'installation de pip.

Modifiez Dockerfile en vous référant à la documentation officielle Tabpy https://github.com/tableau/TabPy/blob/master/docs/server-install.md#starting-tabpy

Port lors du déploiement de Cloudrun

Cloudrun doit spécifier le port d'écoute sur 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 a un port par défaut de 9004, vous devez donc spécifier le port 8080 à l'aide du fichier de configuration. https://github.com/tableau/TabPy/blob/master/docs/server-config.md

Accédez à Tabpy sur Cloud Run avec Tableau

Connectez-vous depuis Tableau Desktop

Cliquez sur Gérer les connexions aux services externes dans le menu d'aide supérieur image.png

Serveur: ensemble de domaines personnalisés Port: 80 Nom d'utilisateur: utilisateur défini dans Dockerfile Mot de passe: utilisateur défini dans Dockerfile

Connectez-vous depuis Tableau Server

Autoriser la connexion au service externe dans 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

Exécutez ce qui suit sur la ligne de commande Tableau Server

Activer les services externes sur le serveur tableau


tsm security vizql-extsvc-ssl enable --connection-type tabpy --extsvc-host <nom d'hôte> --extsvc-port <PORT> --extsvc-username <Nom d'utilisateur Tabpy> --extsvc-password <Mot de passe Tabpy>

tsm pending-changes apply

Pour le moment (janvier 2020), il semble qu'il ne puisse pas être utilisé depuis Tableau Online. .. ..

orz https://help.tableau.com/current/pro/desktop/ja-jp/r_connection_manage.htm

Les classeurs contenant des scripts de service externes ne peuvent pas être publiés sur Tableau Online.

Pages auxquelles j'ai fait référence de différentes manières

[Lançons Tabpy dans un conteneur en utilisant Docker! ](Http://lovedata.main.jp/2018/11/20/docker%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6mac%E3%81%A7% E3% 82% 82tabpy% E3% 82% 92% E5% 8B% 95% E3% 81% 8B% E3% 81% 9D% E3% 81% 86% EF% BC% 81 /)

Pensez aux ports Google Cloud Run

[Knative dans Cloud Run sur GKE](https://qiita.com/toshi0607/items/eeeabe81b1beac343b6b#cloud-run-on-gke%E3%81%AE%E3%83%87%E3%83%97% E3% 83% AD% E3% 82% A4)

Recommended Posts

Utiliser Tabpy avec Cloud Run (sur GKE)
Exécutez SwitchBot avec Bleak sur Windows 10
Exécutez XGBoost avec Cloud Dataflow (Python)
Utilisez Tensorflow 2.1.0 avec Anaconda sur Windows 10!
Exécutez IDCF Cloud CLI sur Docker
Exécutez le servo avec Python sur ESP32 (Windows)
Exécutez Linux avec l'architecture ARM à l'aide de QEMU
Python> Exécuter avec des arguments d'exécution> Utiliser import argparse
Réalisez facilement des micro-services avec Cloud Run x Flask
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Jusqu'à l'utilisation de PhantomJS avec Python sur Heroku
Utilisez Python / Django avec Windows Azure Cloud Service!
Exécutez l'application flask sur Cloud 9 et Apache Httpd
Exécutez la matrice LED de manière interactive avec Raspberry Pi 3B + sur Slackbot
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Exécutez Paints Chainer sur CPU avec python officiel sur win10
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Autoencoder dans Chainer (Remarques sur l'utilisation de + trainer)
Utilisation de Google Cloud Storage (GCS) par "GAE / Py"
Scraping Web pour débutants avec Python (4) --2 Scraping sur Cloud Shell
Utilisez mecab-ipadic-neologd avec igo-python
Utilisez RTX 3090 avec PyTorch
Utiliser ansible avec cygwin
Utiliser pipdeptree avec virtualenv
Exécutez Python avec VBA
[Python] Utiliser JSON avec Python
Utilisez Mock avec pytest
Utiliser l'indicateur avec pd.merge
Utiliser Gentelella avec Django
Exécutez Django sur PythonAnywhere
Utiliser mecab avec Python 3
Utiliser tensorboard avec Chainer
Utiliser DynamoDB avec Python
Exécutez mysqlclient sur Lambda
Utiliser pip avec MSYS2
Utilisez pyvenv sous Windows
Exécutez Blender avec python
Utilisez Python 3.8 avec Anaconda
Utiliser les droits d'auteur avec Spacemacs
Utiliser python avec docker
Utiliser TypeScript avec django-compresseur
Nuage de points avec du poivre
Utilisez LESS avec Django
Exécutez OpenMVG sur Mac
Utilisez Ansible sur Windows
Utiliser MySQL avec Django
Utilisez QuTiP sur Windows
Tutoriel Cloud Run (python)
Utiliser pip sur Windows
Utiliser Enum avec SQLAlchemy
Utiliser tensorboard avec NNabla
Utiliser le GPS avec Edison
Utilisez nim avec Jupyter
Exécutez iperf avec python
API Nifty Cloud facile à utiliser avec botocore et python
Utilisez Python 3 introduit par l'outil de ligne de commande sur macOS Catalina