[IBM Cloud] Ich habe versucht, über Cloud Funtions (Python) auf die Tabelle Db2 on Cloud zuzugreifen.

Einführung

In Bezug auf Cloud-Services gab es ein Image wie AWS, aber IBM bietet Services auch als "IBM Cloud" an. Nach der Untersuchung werden viele Services in der IBM Cloud bereitgestellt, und einige Services können kostenlos verwendet werden. Insbesondere finde ich es ziemlich groß, dass Sie ein typisches IBM RDBMS "DB2" kostenlos verwenden können, wenn es 200 MB oder weniger beträgt (Stand 2020/07). Wenn Sie verschiedene Dinge einzeln ausführen, reichen 200 MB aus. In ähnlicher Weise habe ich in Zusammenarbeit mit "IBM Cloud Funtions", die kostenlos verwendet werden können, wenn die Anzahl der Anforderungen einen bestimmten Betrag unterschreitet, versucht zu beschreiben, bis es möglich wird, die Tabelle in Db2 in der Cloud zu durchsuchen / zu aktualisieren.

Was ich getan habe

① Versuchen Sie, einen DB2-Dienst zu erstellen

Es beginnt nach dem Erstellen eines IBM Cloud-Kontos. IBM Cloud-Anmeldebildschirm (https://cloud.ibm.com/login)

01.Login.jpg

Geben Sie db2 in das Suchfeld ein, um den db2-Servicebildschirm zu öffnen. 02.db2を選択.jpg

Wählen Sie London oder Dallas als Region und Lite als Tarif. Bitte beachten Sie, dass es in anderen Regionen als diesen beiden keinen Lite-Plan gibt. Die Schaltfläche "Erstellen" unten rechts erstellt den db2-Dienst 03.db2サービス作成.png

Der db2-Dienst wurde erstellt. Bevor Sie eine Tabelle oder etwas erstellen, erstellen Sie Ihre Anmeldeinformationen. Sie benötigen es, wenn Sie über die Cloud-Funktion eine Verbindung zur Datenbank herstellen. Öffnen Sie "Service Credentials" aus dem Menü auf der linken Seite. 04.db2サービス作成した後.png

Unmittelbar nach dem Erstellen des db2-Dienstes gibt es meines Erachtens keine Anmeldeinformationen. ① Klicken Sie auf die Schaltfläche "Anmeldeinformationen erstellen". Sie werden aufgefordert, einen Namen einzugeben. Geben Sie also etwas ein. ② Anmeldeinformationen werden erstellt. Drücken Sie daher auf das Teil wie "V" auf der linken Seite des Namens, um die Informationen zu öffnen. ③ Notieren Sie sich den Teil, der mit "ssldsn" beginnt, da er für die Verbindung erforderlich ist. 07.資格情報作成の後_copy.jpg

Öffnen Sie nach dem Erstellen der Anmeldeinformationen die db2-Konsole. Wählen Sie "Verwalten" aus dem linken Menü und klicken Sie auf die Schaltfläche "Konsole öffnen". 08.コンソールを開く.jpg

Nachdem der db2-Dienst erstellt wurde, erstellen Sie eine Tabelle. Dieses Mal erstellen wir eine Tabelle, indem wir die zuvor vorbereitete CSV-Datei lesen. Klicken Sie oben links auf das grüne dreizeilige Symbol und öffnen Sie es in der Reihenfolge LADEN → Daten laden. 09.LoadData.jpg

Dieses Mal verwenden wir die folgende CSV-Datei.

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

Ziehen Sie die CSV-Zieldatei per Drag & Drop auf "Dateiauswahl" in der Nähe der Mitte. Klicken Sie nach dem Hochladen der Datei unten rechts auf die Schaltfläche "Weiter", um fortzufahren. 10.FileUpload.jpg

Der Bildschirm zur Auswahl eines Schemas / einer Tabelle wird angezeigt. Dieses Mal erstellen wir eine neue Tabelle mit dem vorhandenen Schema. Abgesehen vom Schema mit systematischen Namen wie "AUDIT" und "DB2INST1" gibt es meines Erachtens ein Schema mit 3 englischen Zeichen + 5 Ziffern. Wählen Sie es also aus. Klicken Sie für die nächste Tabelle oben rechts auf "Neue Tabelle". Geben Sie unter Neue Tabelle erstellen den Tabellennamen ein und klicken Sie auf die Schaltfläche "Erstellen". Drücken Sie abschließend unten rechts auf die Schaltfläche "Weiter", um zum nächsten Bildschirm zu gelangen. 11.CreateTable.png

Es wird ein Bildschirm zum Festlegen des Spaltennamens usw. angezeigt. Klicken Sie diesmal einfach auf die Schaltfläche "Weiter" unten rechts, um fortzufahren. 12.TableColumnSetting.png

Klicken Sie unten rechts auf die Schaltfläche "Begin Load". 14.ReviewSetting.jpg

Warten Sie einen Moment, bis die Ladung erfolgt. Nach Abschluss des Ladevorgangs können Sie die geladene Tabelle mit der Schaltfläche "Tabelle anzeigen" überprüfen. Es scheint, dass Sie den Prozentsatz der Datensätze, die erfolgreich / fehlgeschlagen geladen wurden, im Kreisdiagramm sehen können. 15.LoadDetail.jpg

Damit ist die Einrichtung / Tabellenerstellung auf der Db2-Seite abgeschlossen.

Erstellen wir eine Funktion zum AUSWÄHLEN

Bereiten Sie als Nächstes Cloud-Funktionen (Aktionen) vor, um Python auszuführen. Gehen Sie zurück zur IBM Cloud-Homepage und geben Sie function in das Suchfeld ein, um "Functions" zu öffnen. 16.FindFunction.jpg

Klicken Sie auf die Schaltfläche "Erstellung starten". 17.BeginFunction.png

Wählen Sie diesmal "Aktion". 16-2.SelectFunction.jpg

Geben Sie den Aktionsnamen ein. Da wir diesmal in Python codieren, wählen Sie zur Laufzeit "Python 3.7" und klicken Sie auf "Erstellen". 18.MakeAction.jpg

Es wurde ein Codierungsbildschirm. Es scheint, dass der in der standardmäßig vorbereiteten Hauptfunktion beschriebene Prozess durch Aufrufen der Aktion ausgeführt wird. 19.Coding.jpg

Schreiben Sie in der Hauptfunktion den Prozess mit Python. Dieses Mal habe ich den folgenden Code erstellt, um eine bestimmte Zeile aus der Testtabelle abzurufen. Zumindest wird nur die zu betreibende Verarbeitung beschrieben. Wenn Sie also die tatsächlich zu betreibende Verarbeitung beschreiben, ist es besser, eine Fehlerverarbeitung und eine Verarbeitung des Statusprotokolls auszugeben.

select_test


import sys
import ibm_db

def main(dict):
    
    #Weisen Sie den Inhalt der Anmeldeinformationen der Variablen ssldsn zu
    # "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;"
    
    #DB-Verbindung
    db_conn = ibm_db.connect(ssldsn,"","")
    
    #SQL-Assembly
    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)
    
    #SQL-Ausführung
    ibm_db.execute(db_stmt)
    row = ibm_db.fetch_tuple(db_stmt)
    
    #DB-Trennung
    ibm_db.close(db_conn)
    
    return {'name' : row[1] }

Speichern Sie es nach dem Codieren mit der Schaltfläche "Speichern" oben rechts. 21.ActionSave.jpg

Nach dem Speichern wird an derselben Stelle eine Schaltfläche "Start" angezeigt. Wenn Sie darauf drücken, wird der geschriebene Code ausgeführt und das Verarbeitungsergebnis angezeigt. 20.ActionExec.jpg

Beachten Sie bei der Ausführung, dass der Ladebetrag der Funktionen durch (verwendete Speichergröße) × (kumulierte Anzahl der verwendeten Sekunden) berechnet wird (ab 2020/07 können 400.000 GB als freier Frame verwendet werden ). Daher ist es besser, die Speichergröße klein zu halten, wenn Sie sie zu Testzwecken verwenden. Sie können die verwendete Speichergröße unter "Laufzeit" im Menü links ändern. 26.Runtime.jpg

Versuchen Sie, eine Funktion (mit Argumenten) für INSERT zu erstellen

Als Nächstes erstellen wir Funktionen, die der Testtabelle Zeilen hinzufügen. Versuchen Sie zu diesem Zeitpunkt, den Wert der Spalte "NAME" aus dem Argument zum Zeitpunkt der Ausführung der Aktion abzurufen. Stellen Sie außerdem sicher, dass die Spalte "UPDATE_TIME" den Zeitpunkt enthält, zu dem die Aktion ausgeführt wurde. Befolgen Sie die gleichen Schritte wie im vorherigen Abschnitt, um eine neue Aktion in Funts zu erstellen. Diesmal habe ich es "insert_test" genannt. Der Code-Inhalt ist wie folgt.

insert_test


import sys
import ibm_db
import datetime

def main(dict):
    #Kopieren Sie den Inhalt der Anmeldeinformationen
    ssldsn = "DATABASE=XXXXX;HOSTNAME=XXXXX;PORT=XXXXX;PROTOCOL=TCPIP;UID=XXXXX;PWD=XXXXX;Security=SSL;"    
    
    #DB-Verbindung
    db_conn = ibm_db.connect(ssldsn,"","")
    
    #SQL-Anweisungskonstruktion
    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)
    
    #Ausführung der SQL-Anweisung
    rtn = ibm_db.execute(db_stmt)
    
    #DB-Trennung
    rc = ibm_db.close(db_conn)
    
    return { 'return-code': rtn }

Um eine Aktion mit Argumenten auszuführen, klicken Sie links neben der Schaltfläche "Starten" auf die Schaltfläche "Mit Parametern starten".

Das folgende Popup wird angezeigt. Geben Sie daher die Argumentinformationen im JSON-Format ein. Der beschriebene Inhalt wird im Argument dict der Hauptfunktion gespeichert. Dieses Mal möchte ich den Wert von "Jiro" aus dem Diktat mit dem Schlüssel "Name" erhalten { 'name' : 'Jiro'} Und klicken Sie auf die Schaltfläche "Übernehmen". 22.ActionInput.jpg

Drücken Sie dann die Taste "Starten", um die Aktion auszuführen.

Stellen Sie sicher, dass die Zeilen korrekt zur Testtabelle hinzugefügt wurden. Öffnen Sie die Db2-Konsole und klicken Sie oben links auf das grüne dreizeilige Symbol, um RUN SQL zu öffnen. 23.OpenSQLConsole.jpg

Eine Konsole zum Schreiben von SQL wird geöffnet. Schreiben Sie hier SQL und drücken Sie unten links auf "Alle ausführen", um die SQL-Anweisung auszuführen. Dieses Mal möchte ich also den Inhalt der Testtabelle überprüfen SELECT * FROM TEST_TABLE; Als ich die SQL von ausführte, konnte ich bestätigen, dass die Zeile mit dem Namen 'Jiro' hinzugefügt wurde. 24.RunSQL.png

Am Ende

Ich habe gerade IBM Cloud gestartet und es scheint, dass ich mit einem Lite-Konto etwas erstellen kann, das so funktioniert. Ich denke, es ist perfekt für die Erfahrung der serverlosen Verarbeitung in einer Cloud-Umgebung. In Zukunft möchte ich es erweitern, damit Aktionen durch Trigger (Ankunftszeit / Datei-Upload) ausgeführt und Verarbeitungsergebnisse an einen anderen Dienst übergeben werden können.

Recommended Posts

[IBM Cloud] Ich habe versucht, über Cloud Funtions (Python) auf die Tabelle Db2 on Cloud zuzugreifen.
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen
Versuchen Sie, die Datenbank unter IBM i mit Python + JDBC mithilfe von JayDeBeApi zu starten
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Ich wollte die Python-Bibliothek von MATLAB verwenden
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Greifen Sie über Python auf Oracle DB zu
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, den Ipython-Cluster unter AWS auf das Minimum zu starten
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, das Zugriffsprotokoll mit Node.js auf dem Server auszugeben
Ich habe versucht, die Punktgruppendaten-DB der Präfektur Shizuoka mit Vue + Leaflet anzuzeigen
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe versucht, die Sprachen, die Anfänger von nun an lernen sollten, absichtlich zusammenzufassen
Ich habe versucht, das Musikgenre anhand des Songtitels im Recurrent Neural Network vorherzusagen
Ich habe AdaNet gegen Tabellendaten ausprobiert
Ich habe versucht, Python zu berühren (Installation)
So greifen Sie über Python auf Wikipedia zu
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Aktualisieren Sie Mac Python von 2 auf 3
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich habe Python ausprobiert! ] Kann ich auf iPad Pro auf Kaggle posten?
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich habe versucht, alle Bemerkungen von Slack mit Wordcloud (Python) zusammenzufassen.
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
[Python + Heroku] Vom Zustand ohne Python zur Anzeige von etwas mit Heroku (Teil 2)
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe etwas mit Python gemacht, das sich JETZT LADEN auf dem Terminal von links nach rechts bewegt
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich konnte den Thermodrucker "PAPERANG" aus Python (Windows10, Python3.6) drucken.