J'ai un script Python pour une fonction AWS Lambda qui exécute des requêtes HTTP POST vers un autre point de terminaison. Puisque le urllib2.request
De Python, - https://docs.python.org/2/library/urllib2.html , ne peut gérer que les données au format application/x-www-form-urlencoded
standard et je souhaite publier des données JSON, j'ai utilisé la bibliothèque Requests , https://pypi.org/project/requests/2.7.0/ .
Cette bibliothèque Requests n'était pas disponible sur AWS Lambda dans l'environnement d'exécution Python, donc a dû être importée via from botocore.vendored import requests
. Jusqu'à présent, tout va bien.
Aujourd'hui, je reçois un avertissement de dépréciation à ce sujet:
DeprecationWarning: You are using the post() function from 'botocore.vendored.requests'.
This is not a public API in botocore and will be removed in the future.
Additionally, this version of requests is out of date. We recommend you install the
requests package, 'import requests' directly, and use the requests.post() function instead.
Cela a également été mentionné dans cet article de blog d'AWS: https://aws.Amazon.com/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/ .
Malheureusement, la modification de from botocore.vendored import requests
En import requests
Entraîne l'erreur suivante:
No module named 'requests'
Pourquoi requests
n'est-il pas disponible pour le runtime Python chez AWS Lambda? Et comment puis-je l'utiliser/l'importer?
Le modèle d'application sans serveur (SAM) d'Amazon fournit une commande de génération qui peut regrouper des dépendances arbitraires python) dans l'artefact de déploiement.
Pour pouvoir utiliser le package requests
dans votre code, ajoutez la dépendance à votre fichier requirements.txt:
requests==2.22.0
puis exécutez sam build
pour obtenir un artefact que les vendeurs requests
. Par défaut, vos artefacts seront enregistrés dans le .aws-sam/build
répertoire mais un autre répertoire de destination peut être spécifié avec le --build-dir
option.
Consultez documentation de SAM pour plus d'informations.
Consultez les instructions ici: https://docs.aws.Amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies
Il vous suffit de télécharger le module de requêtes localement, puis de l'inclure dans votre package de déploiement de fonction Lambda (archive Zip).
Exemple (si toute votre fonction Lambda était constituée d'un seul Python + module de requêtes):
$ pip install --target ./package requests
$ cd package
$ Zip -r9 ${OLDPWD}/function.Zip .
$ cd $OLDPWD
$ Zip -g function.Zip lambda_function.py
$ aws lambda update-function-code --function-name my-function --Zip-file fileb://function.Zip