En parlant de services cloud, il y avait une image comme AWS, mais IBM propose également des services comme «IBM Cloud». Après enquête, de nombreux services sont fournis dans IBM Cloud et certains services peuvent être utilisés gratuitement. En particulier, je pense qu'il est assez important que vous puissiez utiliser gratuitement un IBM RDBMS "DB2" typique s'il fait 200 Mo ou moins (à partir de 2020/07). Si vous faites différentes choses individuellement, 200 Mo suffiront. De même, en coopération avec "IBM Cloud Funtions" qui peut être utilisé gratuitement si le nombre de requêtes est inférieur à un certain montant, j'ai essayé de décrire jusqu'à ce qu'il devienne possible de parcourir / mettre à jour la table sur Db2 sur Cloud.
Il démarre après la création d'un compte IBM Cloud. Écran de connexion IBM Cloud (https://cloud.ibm.com/login)
Tapez db2 dans la zone de recherche pour ouvrir l'écran du service db2.
Sélectionnez Londres ou Dallas comme région et Lite comme plan tarifaire. Veuillez noter qu'il n'existe pas de plan Lite dans les régions autres que ces deux. Le bouton de création en bas à droite crée le service db2
Le service db2 a été créé. Avant de créer une table ou quelque chose, créez vos informations d'identification. Vous en aurez besoin lors de la connexion à la base de données depuis Cloud Function. Ouvrez "Informations d'identification du service" dans le menu de gauche.
Immédiatement après la création du service db2, je pense qu'il n'y a pas d'informations d'identification. ① Cliquez sur le bouton "Créer des informations d'identification". Vous serez invité à entrer un nom, alors entrez quelque chose. ② Les informations d'identification seront créées, alors appuyez sur la partie comme "V" sur le côté gauche du nom pour ouvrir les informations. ③ Notez la partie commençant par "ssldsn" car elle est requise pour la connexion.
Après avoir créé les informations d'identification, ouvrez la console db2. Sélectionnez "Gérer" dans le menu de gauche et appuyez sur le bouton "Ouvrir la console".
Maintenant que le service db2 a été créé, créez une table. Cette fois, nous allons créer une table en lisant le fichier csv préparé à l'avance. Cliquez sur l'icône verte à trois lignes en haut à gauche et ouvrez dans l'ordre LOAD → Load Data.
Cette fois, nous utiliserons le fichier csv suivant.
table_test.csv
NUMBER,NAME,UPDATE_TIME
1,Taro,2020-01-01 18:00:00
2,Hanako,2020-02-03 21:00:00
3,Mike,2020-02-14 14:30:00
Faites glisser et déposez le fichier csv cible vers "Sélection de fichier" près du centre. Après avoir téléchargé le fichier, cliquez sur le bouton "Suivant" en bas à droite pour continuer.
L'écran de sélection d'un schéma / table s'affiche. Cette fois, nous allons créer une nouvelle table avec le schéma existant. Quant à Schema, mis à part le schéma avec des noms systématiques tels que "AUDIT" et "DB2INST1", je pense qu'il existe un schéma avec 3 caractères anglais + 5 chiffres, alors sélectionnez-le. Pour le tableau suivant, cliquez sur «Nouveau tableau» en haut à droite. Dans Créer une nouvelle table, entrez le nom de la table et cliquez sur le bouton "Créer". Enfin, appuyez sur le bouton "Suivant" en bas à droite pour passer à l'écran suivant.
Ce sera un écran pour définir le nom de la colonne, etc. Cette fois, cliquez simplement sur le bouton "Suivant" en bas à droite pour continuer.
Cliquez sur le bouton "Commencer le chargement" en bas à droite.
Attendez un instant que le chargement ait lieu. Une fois le chargement terminé, vous pouvez vérifier la table chargée avec le bouton "Afficher la table". Il semble que vous puissiez voir le pourcentage d'enregistrements qui ont réussi / échoué à se charger dans le graphique circulaire.
Ceci termine la création de configuration / table du côté Db2.
Ensuite, préparez Cloud Functions (actions) pour exécuter python. Revenez à la page d'accueil d'IBM Cloud et saisissez function dans la zone de recherche pour ouvrir "Fonctions".
Cliquez sur le bouton "Démarrer la création".
Cette fois, sélectionnez "Action".
Saisissez le nom de l'action. Puisque nous codons en python cette fois, sélectionnez "Python 3.7" pour le runtime et appuyez sur le bouton "Créer".
C'est devenu un écran de codage. Il semble que le processus décrit dans la fonction principale préparée par défaut soit exécuté en invoquant l'action.
Dans la fonction principale, écrivez le processus avec python. Cette fois, j'ai créé le code ci-dessous pour obtenir une ligne spécifique de la table de test. Au minimum, seul le traitement à opérer est décrit, donc lors de la description du traitement à exécuter réellement, il est préférable d'avoir le traitement des erreurs et la sortie du journal d'état du traitement.
select_test
import sys
import ibm_db
def main(dict):
#Attribuez le contenu des informations d'identification à la variable ssldsn
# "ssldsn":"DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"
ssldsn = "DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"
#Connexion DB
db_conn = ibm_db.connect(ssldsn,"","")
#Assemblage SQL
sql = "SELECT * FROM TEST_TABLE WHERE NUMBER = ?"
db_stmt = ibm_db.prepare(db_conn,sql)
number = 3
ibm_db.bind_param(db_stmt,1,number)
#Exécution SQL
ibm_db.execute(db_stmt)
row = ibm_db.fetch_tuple(db_stmt)
#Déconnexion DB
ibm_db.close(db_conn)
return {'name' : row[1] }
Après le codage, enregistrez-le avec le bouton "Enregistrer" en haut à droite.
Une fois sauvegardé, un bouton "Démarrer" apparaîtra au même endroit. Lorsque vous appuyez dessus, le code écrit sera exécuté et le résultat du traitement sera affiché.
Il est bon de se rappeler lors de l'exécution, la quantité de charge des fonctions est calculée par (taille de la mémoire utilisée) × (nombre cumulé de secondes utilisées) (à partir de 2020/07, 400000 Go peuvent être utilisés comme image libre ). Par conséquent, il est préférable de limiter la taille de la mémoire lors de son utilisation à des fins d'essai. Vous pouvez modifier la taille de la mémoire utilisée depuis "Runtime" dans le menu de gauche.
Ensuite, créons des fonctions qui ajoutent des lignes à la table de test. À ce moment-là, essayez d'obtenir la valeur de la colonne "NAME" à partir de l'argument au moment de l'exécution de l'action. Assurez-vous également que la colonne "UPDATE_TIME" contient l'heure à laquelle l'action a été exécutée. Suivez les mêmes étapes que dans la section précédente pour créer une nouvelle action dans Funts. Cette fois, je l'ai nommé "insert_test". Le contenu du code est le suivant.
insert_test
import sys
import ibm_db
import datetime
def main(dict):
#Copiez le contenu des informations d'identification
ssldsn = "DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"
#Connexion DB
db_conn = ibm_db.connect(ssldsn,"","")
#Construction d'instruction SQL
sql = "INSERT INTO TEST_TABLE VALUES(?,?,?)"
db_stmt = ibm_db.prepare(db_conn,sql)
id = 5
name = dict['name']
update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ibm_db.bind_param(db_stmt,1,id)
ibm_db.bind_param(db_stmt,2,name)
ibm_db.bind_param(db_stmt,3,update_time)
#Exécution de l'instruction SQL
rtn = ibm_db.execute(db_stmt)
#Déconnexion DB
rc = ibm_db.close(db_conn)
return { 'return-code': rtn }
Pour effectuer une action avec des arguments, cliquez sur le bouton "Lancer avec des paramètres" à gauche du bouton "Lancer".
La fenêtre contextuelle suivante s'affiche, saisissez donc les informations d'argument au format json. Le contenu décrit est stocké dans l'argument dict de la fonction principale.
Cette fois, je veux obtenir la valeur de 'Jiro' à partir du dict avec la clé de 'nom', donc
{ 'name' : 'Jiro'}
Et appuyez sur le bouton "Appliquer".
Appuyez ensuite sur le bouton "Lancer" pour effectuer l'action.
Assurez-vous que les lignes sont correctement ajoutées à la table de test. Ouvrez la console Db2 et cliquez sur l'icône verte à trois lignes en haut à gauche pour ouvrir RUN SQL.
Une console d'écriture SQL s'ouvre. Écrivez SQL ici et appuyez sur "Tout exécuter" en bas à gauche pour exécuter l'instruction SQL.
Cette fois, je veux vérifier le contenu de la table de test, donc
SELECT * FROM TEST_TABLE;
Quand j'ai exécuté le SQL de, j'ai pu confirmer que la ligne avec le Name'Jiro'a été ajoutée.
Je viens de démarrer IBM Cloud et il semble que je puisse créer quelque chose qui fonctionne comme ça même avec un compte Lite. Je pense que c'est parfait pour l'expérience du traitement sans serveur dans un environnement cloud. À l'avenir, je voudrais l'étendre afin que les actions puissent être exécutées par des déclencheurs (heure d'arrivée / téléchargement de fichier) et que les résultats du traitement puissent être transmis à un autre service.
Recommended Posts