3
votes

Comment se connecter à une instance RDS depuis AWS Glue Python Shell?

J'essaie d'accéder à l'instance RDS à partir d'AWS Glue, j'ai quelques scripts python en cours d'exécution dans des instances EC2 et j'utilise actuellement PYODBC pour me connecter, mais en essayant de planifier des tâches pour la colle, je ne peux pas importer PYODBC car il n'est pas pris en charge nativement par AWS Colle, je ne sais pas comment les pilotes fonctionneront également dans la coque de colle.


4 commentaires

Essayez d'utiliser la bibliothèque python boto3 pour interagir avec les services aws.


Puis-je exécuter des requêtes volumineuses dans BOTO3 dans un RDS? Si c'est le cas, comment?


Vérifiez cette réponse: stackoverflow.com/questions/35468372/...


Merci pour cette réponse, malheureusement j'aurais dû préciser que j'utilise une instance RDS avec SQL Server, qui ne prend malheureusement pas en charge cette méthode


6 Réponses :


5
votes

De: Présentation des travaux Python Shell dans l' annonce AWS Glue:

Les tâches de shell Python dans AWS Glue prennent en charge les scripts compatibles avec Python 2.7 et sont préchargés avec des bibliothèques telles que Boto3, NumPy, SciPy, pandas et autres.

La liste des modules n'inclut pas le module pyodbc , et il ne peut pas être fourni en tant que fichier .egg personnalisé car il dépend des bibliothèques libodbc.so.2 et pyodbc.so .

Je pense que vous avez 2 options:

  1. Créez une connexion jdbc à votre base de données à partir de la console de Glue et utilisez les méthodes internes de Glue pour l'interroger. Cela nécessitera bien sûr des changements de code.
  2. Utilisez plutôt la fonction Lambda. Vous devrez emballer pyodbc et les bibliothèques requises avec votre code dans un fichier zip. Quelqu'un a déjà compilé ces bibliothèques pour AWS Lambda, voir ici .

J'espère que cela aide


5 commentaires

Pouvez-vous inclure des bibliothèques comme psycopg2 en tant que fichier .egg personnalisé? J'espérais utiliser psycopg2 + pandas pour interagir avec les données par opposition aux méthodes internes de Glue.


Malheureusement, psycopg2 n'est pas préchargé dans le shell python de Glue. Mais vous pouvez utiliser la connexion jdbc + pandas


Donc, seules les bibliothèques préchargées dans le shell python peuvent être utilisées? Vous ne pouvez pas apporter de bibliothèques non préchargées via un fichier .egg personnalisé?


Pas avec le shell python de Glue. Mais c'est possible avec les travaux Spark de Glue (Python / Scala) sous Security configuration, script libraries, and job parameters > Python library path et Python library path Dependent jars path


J'ai publié une réponse avec quelques découvertes récentes qui pourraient vous intéresser.



1
votes

Pour AWS Glue, utilisez Dataframe / DynamicFrame et spécifiez le pilote JDBC SQL Server. AWS Glue contient déjà le pilote JDBC pour SQL Server dans son environnement, vous n'avez donc pas besoin d'ajouter de fichier jar de pilote supplémentaire avec la tâche de collage.

df1 = spark.read.format ("jdbc"). option ("pilote", "com.microsoft.sqlserver.jdbc.SQLServerDriver"). option ("url", url_src) .option ("dbtable", dbtable_src). option ("utilisateur", userID_src) .option ("password", password_src) .load ()

si vous utilisez un SQL au lieu d'une table:

df1 = spark.read.format ("jdbc"). option ("pilote", "com.microsoft.sqlserver.jdbc.SQLServerDriver"). option ("url", url_src) .option ("dbtable", (" votre sélectionnez l'instruction ici ") A) .option (" utilisateur ", userID_src) .option (" password ", password_src) .load ()

Comme solution alternative, vous pouvez également utiliser le pilote jtds pour le serveur SQL dans votre script python s'exécutant dans AWS Glue


7 commentaires

La question concerne le shell Python et non Spark. N'est-ce pas?


@ ya2410 Au meilleur de ma connaissance, AWS Glue n'a pas d'interface shell ou cli


Non, je veux dire le type de travail qu'il exécute. Lorsque vous créez une nouvelle tâche dans Glue, vous pouvez choisir entre Spark et Python shell. Votre syntaxe est pour Spark.


@ ya2410 Je vois une option entre SCALA et Python. Aucune option pour le shell python.


Je me tiens corrigé .. Je vois de quoi vous parlez. Je pense que la syntaxe devrait fonctionner car le travail de collage s'exécute sur Spark sur EMR. Mais je dois admettre que je ne l'ai pas utilisé moi-même sur le shell python.


Oui, je cherchais à le faire sur Python Shell car j'aurais préféré une connexion pyodbc facile, mais cela crée un dataframe, pouvez-vous m'aider avec un exemple de création d'un dataframe en utilisant une requête de sélection sur une table dans cette base de données?


@RakeshGuha a mis à jour la réponse pour l'instruction "select". il existe également une syntaxe alternative qui a été expliquée dans la documentation SPARK pour dataframe.



-1
votes

J'ai pu utiliser la bibliothèque python psycopg2 même si elle n'est pas écrite en python pur et qu'elle n'est pas préchargée avec l'environnement shell python aws glue. Cela va à l'encontre de la documentation aws glue. Vous pourrez donc peut-être utiliser les bibliothèques python liées à odbc de la même manière. J'ai créé des fichiers .egg pour la bibliothèque psycopg2 et je les ai utilisés avec succès dans l'environnement shell python glue. Voici les journaux du shell python glue si vous avez import psycopg2 dans votre script et que le travail glue fait référence aux fichiers psycopg2 .egg associés.

Creating /glue/lib/installation/site.py
Processing psycopg2-2.8.3-py2.7.egg
Copying psycopg2-2.8.3-py2.7.egg to /glue/lib/installation
Adding psycopg2 2.8.3 to easy-install.pth file
Installed /glue/lib/installation/psycopg2-2.8.3-py2.7.egg
Processing dependencies for psycopg2==2.8.3
Searching for psycopg2==2.8.3
Reading https://pypi.org/simple/psycopg2/
Downloading https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz#sha256=897a6e838319b4bf648a574afb6cabcb17d0488f8c7195100d48d872419f4457
Best match: psycopg2 2.8.3
Processing psycopg2-2.8.3.tar.gz
Writing /tmp/easy_install-dml23ld7/psycopg2-2.8.3/setup.cfg
Running psycopg2-2.8.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dml23ld7/psycopg2-2.8.3/egg-dist-tmp-9qwen3l_
creating /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
Extracting psycopg2-2.8.3-py3.6-linux-x86_64.egg to /glue/lib/installation
Removing psycopg2 2.8.3 from easy-install.pth file
Adding psycopg2 2.8.3 to easy-install.pth file
Installed /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
Finished processing dependencies for psycopg2==2.8.3


3 commentaires

où voyez-vous ces journaux? J'ai vérifié les journaux d'erreurs et les journaux réguliers dans cloudwatch et je n'ai rien vu de similaire. J'utilise un paquet d'oeufs comme vous le suggérez. "Journalisation continue" est activée et "Filtrage des journaux" n'a "pas de filtre".


Salut, comment avez-vous créé le fichier œuf? quels fichiers avez-vous utilisés à partir du dépôt github psycopg2 d'origine?


J'ai essayé de faire la même chose mais je n'ai toujours eu No module named 'psycopg2._psycopg' et je ne le vois pas dans le github.



-1
votes

Voici les étapes que j'ai utilisées pour me connecter à un RDS à partir du travail de shell python glue:

  1. Packagez votre package de dépendances dans un fichier egg (ces packages doivent être du python pur si je me souviens bien). Mettez-le dans S3.
  2. Configurez votre travail pour référencer ce fichier egg sous la configuration du travail> chemin de la bibliothèque Python
  3. Vérifiez que votre travail peut importer le package / module
  4. Créez une connexion glue à votre RDS (c'est dans Base de données> Tables, Connexions), testez la connexion pour vous assurer qu'elle peut atteindre votre RDS
  5. Maintenant, dans votre travail, vous devez le configurer pour référencer / utiliser cette connexion. C'est dans la connexion requise lorsque vous configurez votre travail ou modifiez votre travail.

Une fois ces étapes terminées et vérifiées, vous devriez pouvoir vous connecter. Dans mon exemple, j'ai utilisé pymysql.


0 commentaires

0
votes

Si quelqu'un a besoin d'une connexion postgres avec sqlalchemy en utilisant le shell python, il est possible en référençant les fichiers de roue sqlalchemy, scramp, pg8000 , il est important de reconstruire la roue à partir de pg8000 en éliminant la dépendance scramp sur setup.py .


0 commentaires

0
votes

J'avais besoin de quelque chose de similaire et j'ai fini par créer un autre travail Glue dans Scala tout en utilisant Python pour tout le reste. Je sais que cela peut ne pas fonctionner pour tout le monde, mais je voulais mentionner Comment exécuter une instruction SQL DDL à l'aide d'AWS Glue


0 commentaires