Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda

introduction

Aperçu

Il s'agit de la procédure pour appeler du code Python à partir du service sans serveur AWS Lambda et gérer les données dans l'application kintone à l'aide du pilote ODBC CData.

Diagramme

image.png

Produits et services utilisés

AWS Lambda ・ "Kintone" (https: //kintone.cybozu.kom/jp/) ・ Pilote ODBC CData kintone pour Linux

Exemple de code

https://github.com/kuwazzy/pycdatakintonedemo

référence

Préparation du package de fonctions Lambda

Préparation du pilote ODBC CData kintone

Accédez à la page Web du logiciel CData. La version d'évaluation et la version produit du pilote ODBC CData kintone peuvent être téléchargées depuis ici. Cependant, depuis le 20 août 2017, la version Linux est disponible en version bêta, veuillez donc la télécharger depuis ici. Veuillez consulter ici pour le manuel du produit.

Extraction de bibliothèques à partir du pilote ODBC CData kintone pour Linux

Décompressez le fichier de construction setup.x86_64.deb. Lorsque vous le décompressez, data.tar sera créé, alors décompressez-le davantage. Ensuite, un répertoire de données avec la structure suivante est créé.

data/ ├ opt/ | └ cdata/ |   └ cdata-odbc-driver-for-kintone/ |     ├ bin/ |     ├ db/ |     ├ demos/ |     ├ etc/ |     ├ help/ |     └ lib/ |       ├ cdata.odbc.kintone.ini |       ├ CData.ODBCm.Kintone.DLL |       ├ libcdatart.x64.so.4 |       └ libkintoneodbc.x64.so └ usr/   └ doc/     └ cdata-odbc-driver-for-kintone/

Extrayez 4 fichiers sous / data / opt / cdata / cdata-odbc-driver-for-kintone / lib.

Préparation de pyodbc et des bibliothèques dépendantes

Préparez la bibliothèque pyodbc.so. Dans mon environnement, je l'ai copié depuis /usr/lib64/python2.7/site-packages de RHEL7.3.

De plus, préparez un groupe de bibliothèques dépendantes de pyodbc. Dans mon environnement, je l'ai copié depuis / usr / lib64 sous RHEL7.3.

Liste des bibliothèques dépendantes ajoutées

libodbc.so libodbc.so.2 libodbccr.so libodbccr.so.2 libodbcdrvcfg1S.so libodbcdrvcfg1S.so.2 libodbcdrvcfg2S.so libodbcdrvcfg2S.so.2 libodbcinst.so libodbcinst.so.2 libodbcminiS.so libodbcminiS.so.2 libodbcmyS.so libodbcmyS.so.2 libodbcnnS.so libodbcnnS.so.2 libodbcpsqlS.so libodbcpsqlS.so.2 libodbctxtS.so libodbctxtS.so.2 libomapi.so.0 liboplodbcS.so liboplodbcS.so.2 liboraodbcS.so liboraodbcS.so.2

Préparation du code Python

Obtenez-le sur GitHub ici.

pycdatakintonedemo.py



# -*- coding: utf-8 -*-
import pyodbc
import sys

def Main(event, context):
    print('************************************************')
    print('\t\t Kintone Demo')
    print('This demo uses the CData ODBC for Kintone')
    print('************************************************')
    print('option:1,               - List all the tables in the database')
    print('option:2, table:name    - List all the columns for a specific table')
    print('option:3, table:name    - Select data from table')
    print('option:4, sql:statement - Custom SQL Query')
    print('------------------------------------------------')

    connStr =  'Driver={./cdata/libkintoneodbc.x64.so};' + event['conn_str']
    conn = pyodbc.connect(connStr)

    if event['option'] == '1':
        for table in conn.cursor().tables():
            print(table.table_name)
    elif event['option'] == '2':
        tableName = event['table']
        for column in conn.cursor().columns(tableName):
            print(column.column_name)
    elif event['option'] == '3':
        tableName = event['table']
        c = conn.cursor();
        c.execute('SELECT * FROM ' + tableName)
        for row in c.fetchall():
            print(row)
    elif event['option'] == '4':
        sql = event['sql']
        c = conn.cursor();
        c.execute(sql)
        for row in c.fetchall():
            print(row)
    else:
            print('Invalid option')

    conn.close();

    return {
        'status' : 'finish'
    }

La mise en garde est que la bibliothèque ODBC est spécifiée directement au lieu du DSN. J'ai fait référence à la page ici.

 connStr =  'Driver={./cdata/libkintoneodbc.x64.so};' + event['conn_str']

Créer un package de fonctions

Préparez les fichiers préparés dans la procédure ci-dessus avec la structure de répertoires suivante. . ├ pycdatakintonedemo.py (code Python appelé depuis Lambda) ├ pyodbc.so (bibliothèque pyodbc) ├ cdata / (bibliothèque CData) | ├ cdata.odbc.kintone.ini | ├ CData.ODBCm.Kintone.DLL | ├ libcdatart.x64.so (renommé libcdatart.x64.so.4) | └ libkintoneodbc.x64.so └ lib/ └ libodbc * .so etc (bibliothèques dépendantes de pyodbc)

Ce groupe de fichiers est compressé. * Veuillez ne pas inclure le répertoire parent

Créer une fonction Lambda

Créer une fonction

Cliquez sur le bouton "Créer une fonction" sur l'écran du tableau de bord AWS Lambda. image.png Cliquez sur le bouton «Créer à partir de zéro» sur l 'écran de sélection du dessin de conception à l' étape 1. image.png Puisqu'il n'est pas réglé cette fois sur l'écran de réglage du déclencheur à l'étape 2, cliquez sur le bouton «Suivant». image.png Entrez le nom de la fonction (facultatif) et la description (facultative) sur l'écran de configuration de la fonction à l'étape 3, et sélectionnez «Python 2.7» comme moteur d'exécution. image.png Dans le code de la fonction Lambda, sélectionnez le type d'entrée de code "Télécharger un fichier .ZIP" et téléchargez le fichier ZIP créé dans la procédure "Créer un package de fonctions". image.png Pour les gestionnaires de fonctions et les rôles Lambda, définissez le nom du fichier (exemple: pycdatakintonedemo) en excluant l'extension du code Python téléchargé depuis GitHub et le nom du gestionnaire (exemple: Main) connecté par des points. image.png Dans les paramètres avancés, définissez le délai d'expiration sur une valeur appropriée (exemple: 1 minute). image.png

Après avoir terminé les paramètres jusqu'à présent, cliquez sur le bouton "Suivant" en bas, et s'il n'y a pas de problèmes sur l'écran de confirmation, cliquez sur le bouton "Créer une fonction". image.png Confirmez que la fonction a été créée. image.png

Exécution de la fonction Lambda

Créer un événement de test

Dans Actions, sélectionnez Définir un événement de test. image.png

L'exemple de modèle d'événement reste HelloWorld et définit les valeurs des quatre paramètres.

sample.json


{
  "conn_str": "Url=https://***.cybozu.com;User=***;Password=***;",
  "option": "1",
  "table": "table_name",
  "sql": "SELECT * FROM table_name"
}

"Conn_str" est la chaîne de connexion à kintone. Au minimum, vous aurez besoin de trois éléments: URL, utilisateur et mot de passe. Il y a quatre «options» ci-dessous. Pour quelques-uns, spécifiez également «table». Dans le cas de 4, spécifiez également "sql".

・ Option: 1, - Répertorier toutes les tables de la base de données ' ・ Option: 2, table: nom - Répertorie toutes les colonnes d'une table spécifique ' ・ Option: 3, table: nom --Sélectionnez les données de la table ' · Option: 4, sql: instruction - Requête SQL personnalisée '

image.png

Essai

Cliquez maintenant sur le bouton "Test" pour l'exécuter. image.png

C'est OK si "Success" est affiché dans le résultat de l'exécution. Cliquez sur "Détails" et cliquez sur "Cliquez ici" dans la sortie du journal pour voir le journal dans CloudWatch. Si une erreur se produit, vérifiez le contenu du journal. image.png

Si vous sélectionnez le flux de journal et regardez le contenu du message, vous pouvez voir que la liste des applications dans kintone est sortie. image.png

Ensuite, ouvrez un événement de test, définissez "3" (affichage des données de la table) dans "option", définissez le nom de l'application (exemple: CDataJapanSKU) existant dans kintone dans "table", et "save" Cliquez sur Test. image.png

Si vous ouvrez à nouveau le journal dans CloudWatch, vous pouvez voir que les données de l'application kintone (par exemple les données produit dans CDataJapanSKU) sont affichées. image.png

Résumé

Il s'agissait d'une procédure d'intégration kintone par Python à partir d'AWS Lambda à l'aide du pilote ODBC CData. En plus de kintone, le pilote ODBC CData peut se connecter à plus de 90 Saas, applications et bases de données. Veuillez télécharger et essayer différents pilotes ODBC à partir de la page Web ici.

Recommended Posts

Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
Obtenir des données de la base de données via ODBC avec Python (Access)
Appeler C depuis Python avec DragonFFI
Notifier HipChat avec AWS Lambda (Python)
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Recevoir des données textuelles de mysql avec python
[Note] Obtenir des données de PostgreSQL avec Python
Manipulation des données DynamoDB avec Lambda (Node et Python)
Connectez-vous à s3 avec AWS Lambda Python
Utilisation des fonctions C ++ de python avec pybind11
Intégration de données depuis l'application Python sur Windows vers Amazon Redshift avec ODBC
Envelopper C avec Cython pour une utilisation à partir de Python
LINE BOT avec Python + AWS Lambda + API Gateway
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Envelopper C ++ avec Cython pour une utilisation à partir de Python
Extraire des données d'une page Web avec Python
Analyse de données avec python 2
Pages HTML dynamiques créées avec AWS Lambda et Python
Comment récupérer des données d'image de Flickr avec Python
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créer une couche pour AWS Lambda Python dans Docker
Je veux AWS Lambda avec Python sur Mac!
Tweet d'AWS Lambda
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
[Bases de la science des données] Collecte de données depuis RSS avec python
Analyse de données avec Python
Accès ODBC à SQL Server depuis Linux avec Python
Un mémo qui lit les données de dashDB avec Python et Spark
Remarques sur l'importation de données depuis MySQL ou CSV avec Python
Résumé Xpath lors de l'extraction de données d'un site Web avec Python Scrapy
Obtenez des données de l'API d'analyse avec le client API Google pour python
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[Python] Exportez régulièrement de CloudWatch Logs vers S3 avec Lambda
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Exemple de données créées avec python
Exploitez TwitterBot avec Lambda, Python
[Python] Scraping dans AWS Lambda
Obtenez des données Youtube avec python
Interroger Athena depuis Lambda Python
PyTorch avec AWS Lambda [importation Lambda]
Avec skype, notifiez avec skype de python!
Lire des données json avec python
[AWS] Recherchez et acquérez les données nécessaires à partir des fichiers S3 avec S3 Select
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Passer la liste de Python vers C ++ par référence dans pybind11
Extraire des tables de base de données avec CSV [connexion ODBC de R et python]
Résoudre ABC163 A ~ C avec Python
Python: exclure les balises des données html
Créer Awaitable avec l'API Python / C
Récapitulatif si vous utilisez AWS Lambda (Python)
Frappez les données du trésor de Python Pandas