Google Cloud Platform API для Python и лямбда-несовместимость AWS: невозможно импортировать имя «cygrpc» - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь использовать Google Cloud Platform (в частности, API Vision) для Python с AWS Lambda.Таким образом, я должен создать пакет развертывания для моих зависимостей.Однако, когда я пытаюсь создать этот пакет развертывания, я получаю несколько ошибок компиляции, независимо от версии Python (3.6 или 2.7).Рассматривая версию 3.6, я получаю проблему «Невозможно импортировать имя« cygrpc »».Для 2.7 я получаю неизвестную ошибку с файлом .path.Я следую инструкциям пакета развертывания AWS Lambda здесь .Они рекомендуют два варианта, и оба не работают / приводят к одной и той же проблеме.GCP просто не совместим с AWS Lambda по какой-то причине?В чем же дело?

Ни Python 3.6, ни 2.7 не работают для меня.

ПРИМЕЧАНИЕ.Я хотел бы поделиться своим решением.

1 Ответ

0 голосов
/ 21 октября 2018

TL; DR: Вы не можете скомпилировать пакет развертывания на своем Mac или любом другом используемом компьютере.Вы должны сделать это, используя определенную ОС / «настройку», ту же самую, которую AWS Lambda использует для запуска вашего кода.Для этого вы должны использовать EC2.

Я приведу здесь ответ о том, как заставить Google Cloud Vision работать на AWS Lambda для Python 2.7.Этот ответ потенциально может быть распространен на другие API и другие языки программирования в AWS Lambda.

Итак, мое путешествие к решению началось с этой первоначальной публикации на Github с другими пользователями, у которых возникла такая же проблема.,Одно решение, которое кто-то опубликовал, было

У меня возникла та же проблема "невозможно импортировать имя" cygrpc "" при запуске лямбды.Решил это с помощью pip install google-cloud-vision в экземпляре AMI amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2 и экспортировал lib / python3.6 / site-packages в aws lambda Спасибо @ tseaver

Это частично верно, если я не прочитал это неправильно, но, тем не менее, это приведет меня на правильный путь.Вам придется использовать EC2.Вот шаги, которые я предпринял:

  1. Настройте экземпляр EC2, перейдя в EC2 на Amazon.Кратко прочитайте о AWS EC2, если вы этого еще не сделали.Настройте его для amzn-ami-hvm-2018.03.0.20180811-x86_64-gp2 или что-то в этом духе (то есть самое последнее).
  2. Получите файл EC2 .pem.Идите в свой терминал.Перейдите в вашу папку, где находится ваш .pem файл.ssh в ваш экземпляр, используя

    ssh -i "your-file-name-here.pem" ec2-user@ec2-ip-address-here.compute-1.amazonaws.com

  3. Создайте в своем экземпляре следующие папки с помощью mkdir: google-cloud-vision, protobuf, google-api-python-client, httplib2, uritemplate, google-auth-httplib2.

  4. На вашем экземпляре EC2 перейдите в google-cloud-vision.Запустите команду:

    pip install google-cloud-vision -t.

Примечание Если вы получили "bash: pip: команда не найдена", затем введите" sudo easy_install pip " source .

Повторите шаг 4 со следующими пакетами, одновременно перейдя в соответствующую папку: protobuf, google-api-python-client, httplib2, uritemplate, google-auth-httplib2.

Скопируйте каждую папку на свой компьютер.Вы можете сделать это с помощью команды scp.Опять же, в вашем терминале, а не в вашем экземпляре EC2 и не в окне терминала, которое вы использовали для доступа к своему экземпляру EC2, выполните команду (ниже приведен пример для вашей папки "google-cloud-vision", но повторяйте это для каждой папки):

sudo scp -r -i your-pem-file-name.pem ec2-user@ec2-ip-address-here.compute-1.amazonaws.com: ~ / google-cloud-vision ~ /Documents / your-local-directory /

Остановите свой экземпляр EC2 с консоли AWS, чтобы не перегружаться.

Для вашегопакет развертывания, вам понадобится одна папка, содержащая все ваши модули и ваши скрипты Python.Чтобы начать объединение всех модулей, создайте пустую папку под названием «модули».Скопируйте и вставьте все содержимое папки «google-cloud-vision» в папку «modules».Теперь поместите только папку с именем «protobuf» из главной папки «protobuf» (sic) в папку «Google» папки «modules».Также из основной папки «protobuf» вставьте файл Protobuf .pth и папку -info в папку Google.

Для каждого модуля после protobuf скопируйте и вставьте «модули»"папка папка с названием модуля, файлом .pth и папкой" -info ".

Теперь все ваши модули правильно объединены (почти).Чтобы завершить объединение, удалите эти два файла из папки «modules»: googleapis_common_protos-1.5.3-nspkg.pth и google_cloud_vision-0.34.0-py3.6-nspkg.pth.Скопируйте и вставьте все из папки «modules» в папку вашего пакета развертывания.Кроме того, если вы используете GCP, вставьте в файл .json свои учетные данные.

Наконец, поместите ваши скрипты Python в эту папку, заархивируйте содержимое (не папку), загрузите на S3 и вставьте ссылку в свою функцию AWS Lambda и приступайте!

Если что-то здесь не работает, как описано, пожалуйста, прости меня и либо напишите мне, либо не стесняйтесь редактировать мой ответ.Надеюсь, это поможет.

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