Comment écrire du code pour accéder à python dashDB sur Bluemix ou local

À la suite des Notes sur l'accès à dashDB à partir de python, voici une note sur le développement de code qui s'exécute comme une application CF pour local et Bluemix.

Lisez l'exemple de code IBM-Bluemix / get-started-python (1) de l'application CloudFoundry de Bluemix (ci-après dénommée BMX-CFA). Ensuite, j'ai trouvé que le code était basé sur deux cas, l'un pour fonctionner localement et l'autre pour fonctionner sur Bluemix. Alors, réfléchissons au code pour accéder à dashDB tout en se référant à la façon d'écrire ce code.

Et un exemple de code pour accéder à dashDB depuis Python [dashDB et Python] (https://hub.jazz.net/project/ibmdatabase/dashDB/overview#https://hub.jazz.net/git/ibmdatabase%252FdashDB/list/master/samples/dashDBPython) (2) est pour référence Il y a beaucoup de problèmes à résoudre, et il y a des codes inutiles, y compris des codes en double, donc ce n'est pas très utile, j'ai donc décidé de créer du code sophistiqué en regardant de côté.

Le référentiel GitHub correspondant à cet article est https://github.com/takara9/python-dashDB. Voir README.md à cette URL pour les instructions d'installation.

Utilisez le service dashDB dans un environnement local et Bluemix

Afin de vérifier le fonctionnement du programme de base, nous créons régulièrement un extrait de code, réfléchissons à la façon de l'écrire et l'incorporons dans le programme principal. Cependant, pour écrire un extrait sur Bluemix et vérifier l'opération, il est nécessaire de répéter bx cf push et de vérifier le journal depuis l'écran web, ce qui demande plusieurs fois plus d'efforts. Pour cette raison, idéalement, il peut s'exécuter localement, aux premiers stades du développement et de la maintenance, et le service peut s'exécuter à partir de l'infrastructure PaaS de Bluemix.

Dans l'environnement d'exploitation de BMX-CFA, en tant que méthode de connexion du service lié à l'environnement d'exécution du programme, la variable d'environnement VCAP_SERVICES est définie avec les informations d'identification d'accès et transmise au programme. Lors de l'exécution dans l'environnement BMX-CFA, vous pouvez vous référer aux variables d'environnement, mais lors de l'exécution dans l'environnement local, vous devez lire le fichier JSON, etc. pour obtenir les informations d'identification du service.

La CLI Bluemix a des commandes pour obtenir les informations d'identification du service, c'est donc une bonne idée de les utiliser. La commande suivante affiche une liste des noms d'informations d'identification de service définis dans une instance de dasDB. La partie entre guillemets est le nom d'occurrence de dashDB.

bx cf service-keys "dashDB for Analytics-iq"

Vous pouvez obtenir les informations au format JSON en sélectionnant dans la liste avec la commande suivante. Le dernier paramètre, Credentials-1, est le nom des informations d'identification de service obtenues avec la commande ci-dessus.

bx cf service-key "dashDB for Analytics-iq" Credentials-1

Le code suivant est un extrait de code qui définit les informations requises à partir de la variable d'environnement VCAP_SERVICES et d'un fichier au format JSON. Lorsque ce code est exécuté, les informations d'identification de service de dashDB seront définies dans creds. Des informations correspondant à diverses méthodes d'accès sont fournies, mais la dernière ligne, ssldsn, est définie sur la chaîne à connecter par la communication chiffrée fournie au pilote ODBC.

    creds = None
 #Set à partir de la variable d'environnement
    if 'VCAP_SERVICES' in os.environ:
	vcap = json.loads(os.getenv('VCAP_SERVICES'))
	print('Found VCAP_SERVICES')
	if 'dashDB' in vcap:
            creds = vcap['dashDB'][0]['credentials']
 #Set à partir du fichier local
    elif os.path.isfile('vcap-local.json'):
	with open('vcap-local.json') as f:
            print('Found local VCAP_SERVICES')
            vcap = json.load(f)
            creds = vcap['services']['dashDB'][0]['credentials']
 # Chaîne de communication chiffrée
    url = creds["ssldsn"]

Connectez-vous à dashDB en appelant la fonction du pilote ODBC (3) ibm_db avec la variable url.

    conn = ibm_db.connect(url, '', '')

Numéro de port dans l'environnement local et Bluemix

Dans l'environnement d'exécution BMX-CFA, PaaS spécifie le numéro de port que l'application peut utiliser. Ce numéro de port est également utilisé comme variable d'environnement d'exécution pour transmettre le numéro de port attribué dynamiquement au moment de l'approvisionnement. D'autre part, lors de l'exécution dans un environnement local, connaissez les numéros de port qui peuvent être utilisés par l'autogestion et attribuez-les manuellement. Les extraits ci-dessous concernent les deux.

    port = int(os.getenv('PORT', 8080))
    app.run(host='0.0.0.0', port=port, debug=True)

Cadre Python Flask

Cette application utilise Flask pour afficher l'écran Web. Flask est un framework d'application Web léger pour le langage de programmation Python. Il se qualifie lui-même de "microframework" car il réduit au minimum les fonctionnalités fournies en standard. Il est basé sur le toolkit Werkzeug WSGI et le moteur de template Jinja2. Il est publié sous une licence BSD. (6), (5)

Un exemple de la plus petite application (5) est présenté et expliqué ci-dessous. Ce qui suit renverra la chaîne "Hello, World!" Lors de l'accès. hello_world () est rappelé lorsque la route est GET avec @ app.route ('/').

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!\n'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9080, debug=True)

Le serveur Web est simplement lancé à partir de la ligne de commande.

ubuntu@ubuntu-xenial:~/dashDB$ python test7.py
 * Running on http://0.0.0.0:9080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 195-308-734

Je cours avec la commande curl en tant que client.

buntu@ubuntu-xenial:~/dashDB/python-dashDB$ curl http://localhost:9080/
Hello, World!

Le code de cette application déclenche un HTTP GET vers / pour rappeler hello () et permettre à ODBC d'accéder à dashDB.

# Rappel à l'accès
@app.route('/')
def hello():
    conn = ibm_db.connect(url, '', '')
    stmt = ibm_db.prepare(conn, 'SELECT RACE_CODE, RACE_DESC from SAMPLES.RACE_CODE FETCH FIRST 5 ROWS ONLY')
    ibm_db.execute(stmt)

Résultat d'exécution de l'application

Il s'agit du résultat de l'exécution après avoir été déployé sur Bluemix. スクリーンショット 2017-06-03 16.15.07.png

Description de l'ensemble de fichiers

bx cf push Les dossiers et fichiers précédents sont listés ci-dessous pour une description.

ubuntu@ubuntu-xenial:~/dashDB$ tree python-dashDB
python-dashDB/
├── LICENSE
├── main.py
├── manifest.yml
├── Procfile
├── README.md
├── requirements.txt
└── vcap-local.json

Au moment du déploiement, lisez manifest.yml pour réserver des ressources pour le runtime Bluemix ClooudFoundry, installez le package à partir de requirements.txt et exécutez la commande Procfile pour démarrer l'application.

La référence (7) peut aider à expliquer les éléments du manifeste. Une description du Procfile peut être trouvée dans Reference (8).

Résumé

Bluemix n'est pas un concept de développement uniquement dans un environnement PaaS, mais prend en charge le fonctionnement à la fois dans l'environnement de développement local et dans l'application CF, efficacement avec des outils familiers aux développeurs, et laisse le fonctionnement du serveur gênant au PaaS Ce faisant, nous visons à fournir l'environnement le plus heureux pour les développeurs. J'ai compris ça.

Matériel de référence

(1) IBM-Bluemix/get-started-python https://github.com/IBM-Bluemix/get-started-python (2) dashDB and Python https://hub.jazz.net/project/ibmdatabase/dashDB/overview#https://hub.jazz.net/git/ibmdatabase%252FdashDB/list/master/samples/dashDBPython (3) Python DBI driver for DB2 (LUW, zOS, i5) and IDS https://pypi.python.org/pypi/ibm_db/2.0.7 (4) Python Packaging User Guide https://packaging.python.org/ (5) Flask Home page http://flask.pocoo.org/ (6) Flacon Wikipédia https://ja.wikipedia.org/wiki/Flask (7) Application manifestn https://console.ng.bluemix.net/docs/manageapps/depapps.html#appmanifest (8) CloudFoundry Application about Procfile https://docs.cloudfoundry.org/buildpacks/prod-server.html#procfile

Recommended Posts

Comment écrire du code pour accéder à python dashDB sur Bluemix ou local
Comment accéder à wikipedia depuis python
Remarques sur la rédaction de requirements.txt
Qiita (1) Comment écrire un nom de code
Comment lire pydoc sur l'interpréteur python
[Kivy] Comment installer Kivy sur Windows [Python]
Comment créer facilement un environnement où le code Python peut s'exécuter sur Jupyter sans polluer l'environnement local
Comment écrire des commentaires de document Python (Docstrings)
Comment effacer Python 2.x sur Mac.
Mémorandum sur l'utilisation du python gremlin
Comment accéder à RDS depuis Lambda (python)
Comment écrire Ruby to_s en Python
Essayez d'écrire du code python pour générer du code go - Essayez de porter JSON-to-Go et ainsi de suite
Comment écrire un test unitaire pour l'extraction d'URL dans GAE / P
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Stratégie sur la façon de monétiser avec Python Java
Comment installer OpenCV sur Jetson Nano Python
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
Pour écrire dans Error Repoting en Python sur GAE
[Python] Comment installer OpenCV sur Anaconda [Windows]
[Go] Comment écrire ou appeler une fonction
Comment écrire des variables d'environnement que vous ne voulez pas mettre sur [GitHub] Python
Je veux écrire en Python! (1) Vérification du format de code
20e Comment écrire des problèmes en temps réel hors ligne en Python
Réfléchissez à la programmation de Python sur votre iPad
Comment installer Python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment mesurer le temps de traitement avec Python ou Java
Réécrire le code Python2 en Python3 (2to3)
Commande Yum pour accéder à MySQL avec Python 3 sous Linux
Comment installer python
Comment écrire un type liste / dictionnaire de Python3
Comment créer un environnement Django (python) sur Docker
Comment créer un package Python à l'aide de VS Code
[Python] Comment écrire une docstring conforme à PEP8
Comment utiliser Django avec Google App Engine / Python
Écrire du code dans UnitTest une application Web Python
Comment profiter de Python sur Android !! Programmation en déplacement !!
Comment créer un environnement Python sur Amazon Linux 2
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Tutoriel "Cython" qui rend Python explosif: lorsque le code C ++ dépend de la bibliothèque. Écrivez setup.py.
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Comment gérer la version mineure de Python (créer un environnement virtuel) sous Windows (sans Pyenv ou WSL)
Comment installer Python2.7 python3.5 avec pyenv (sur RHEL5 CentOS5) (novembre 2016)
[Introduction à Python] Comment écrire des branches conditionnelles en utilisant des instructions if
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
Comment créer un nouvel environnement virtuel Python sur Ubuntu
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku
Comment utiliser VS Code dans un environnement Venv avec Windows
[Ev3dev] Comment afficher une image bmp sur un écran LCD avec python
[Python] Comment écrire une instruction if en une phrase.
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Comment doi peut-il être utile lorsque vous demandez comment écrire du code?
[ROS] Comment écrire un éditeur et un abonné sur un nœud