À 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.
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, '', '')
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)
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)
Il s'agit du résultat de l'exécution après avoir été déployé sur Bluemix.
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).
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.
(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