Python на AWS Lambda: `запросы` от botocore.vendored устарели, но` запросы` недоступны - PullRequest
1 голос
/ 18 октября 2019

У меня есть скрипт Python для лямбда-функции AWS, которая выполняет HTTP-запросы POST к другой конечной точке. Поскольку Python urllib2.request, https://docs.python.org/2/library/urllib2.html, может обрабатывать данные только в стандартном формате application/x-www-form-urlencoded, и я хочу опубликовать данные JSON, я использовал библиотеку запросов, https://pypi.org/project/requests/2.7.0/.

Библиотека запросов не быланедоступно на AWS Lambda в среде исполнения Python, поэтому пришлось импортировать через from botocore.vendored import requests. Пока все хорошо.

Сегодня я получаю предупреждение об устаревании:

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.

Это также упоминалось в этом сообщении в блоге от AWS: https://aws.amazon.com/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/.

К сожалению, изменение from botocore.vendored import requests на import requests приводит к следующей ошибке:

No module named 'requests'

Почему requests недоступно для среды выполнения Python на AWS Lambda? И как я могу использовать / импортировать его?

Ответы [ 4 ]

2 голосов
/ 18 октября 2019

запросов НЕ является частью основного питона. См. https://docs.aws.amazon.com/en_pv/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html об упаковке Lambda с внешними зависимостями (в вашем случае библиотека запросов)

1 голос
/ 18 октября 2019

Мне удалось отправить запросы HTTP POST с помощью библиотеки urllib3, которая доступна на AWS Lambda без требований дополнительных инструкций по установке.

import urllib3

http = urllib3.PoolManager()

response = http.request('POST',
                        url,
                        body = json.dumps(some_data_structure),
                        headers = {'Content-Type': 'application/json'},
                        retries = False)
1 голос
/ 18 октября 2019

Укажите плагин в serverless.yml

plugins:
- serverless-python-requirements

В корневом каталоге каталога создайте файл requirements.txt

needs.txt

requests==2.22.0

Это установит упомянутые запросы и пакеты.

0 голосов
/ 18 октября 2019

pip install requests
и затем
import requests
для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...