Import-Fehler aus cyptography.hazmat.Bindungen._constant_time import-lib
So, ich versuche zum erstellen einer aws lambda-Funktion zur Anmeldung an einer Instanz, und führen Sie einige Sachen. Und das Skript funktioniert außerhalb von lambda, aber wenn ich das Paket mit den gleichen Anweisungen wie diese https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/ es funktioniert nicht. Es wirft diese Fehlermeldung.
libffi-72499c49.so.6.0.4: cannot open shared object file: No such file or directory: ImportError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 12, in lambda_handler
key = paramiko.RSAKey.from_private_key(key)
File "/var/task/paramiko/pkey.py", line 217, in from_private_key
key = cls(file_obj=file_obj, password=password)
File "/var/task/paramiko/rsakey.py", line 42, in __init__
self._from_private_key(file_obj, password)
File "/var/task/paramiko/rsakey.py", line 168, in _from_private_key
self._decode_key(data)
File "/var/task/paramiko/rsakey.py", line 173, in _decode_key
data, password=None, backend=default_backend()
File "/var/task/cryptography/hazmat/backends/__init__.py", line 35, in default_backend
_default_backend = MultiBackend(_available_backends())
File "/var/task/cryptography/hazmat/backends/__init__.py", line 22, in _available_backends
"cryptography.backends"
File "/var/task/pkg_resources/__init__.py", line 2236, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/var/task/cryptography/hazmat/backends/openssl/__init__.py", line 7, in <module>
from cryptography.hazmat.backends.openssl.backend import backend
File "/var/task/cryptography/hazmat/backends/openssl/backend.py", line 15, in <module>
from cryptography import utils, x509
File "/var/task/cryptography/x509/__init__.py", line 7, in <module>
from cryptography.x509.base import (
File "/var/task/cryptography/x509/base.py", line 15, in <module>
from cryptography.x509.extensions import Extension, ExtensionType
File "/var/task/cryptography/x509/extensions.py", line 19, in <module>
from cryptography.hazmat.primitives import constant_time, serialization
File "/var/task/cryptography/hazmat/primitives/constant_time.py", line 9, in <module>
from cryptography.hazmat.bindings._constant_time import lib
ImportError: libffi-72499c49.so.6.0.4: cannot open shared object file: No such file or directory
- überprüfen Sie Ihre Bibliothek Versionen - besonders openssl
- wie soll ich das tun? Wenn ich es installieren, ich installiere es von pip. Die nur zwei Befehle, die ich mache, sind
pip install pycrypto
undpip install paramiko
und es funktioniert wenn ich es auf meinem eigenen server. Das problem tritt nur auf, wenn ich werfen Sie auf aws lambda pip freeze
listet alle Bibliotheken auf Ihrem server-Umgebung. Ich weiß nicht, wie zu überprüfen, auf AWS. Sie könnten Fragen auf dem blog, wo solche Anweisungen gegeben wurden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zip-Befehle in diesem tutorial fehlt ein parameter. Ich lief in genau dieses problem heute mit pysftp, welche auf paramiko.
libffi-72499c49.so.6.0.4
ist in einem versteckten Punkt Verzeichnis imlib64/python2.7/site-packages/.libs_cffi_backend
. Je nachdem, wie Sie gezippt werden die Abhängigkeiten in den virtualenv, haben Sie möglicherweise versehentlich ausgeschlossen dieses Verzeichnis.Erstens, stellen Sie sicher, libffi-devel und openssl-devel installiert werden, die auf Ihre Amazon Linux-instance, da sonst die Kryptographie-Modul werden möglicherweise nicht korrekt kompilieren.
Wenn diese Pakete nicht installiert wurden, bevor Sie, löschen Sie und neu erstellen Sie, die virtualenv.
Sicherzustellen, dass wenn Sie komprimieren Sie Ihre Website-Pakete, die Sie verwenden,'. ' statt '*', sonst werden Sie nicht werden, einschließlich der Dateien und Verzeichnisse, die versteckt sind, weil Ihre Namen mit einem Punkt beginnen.
python-devel
undgcc
vor derpip install pycrypto
sudo yum install python27-devel
weil Lambda verwendet Python2.7 und wenn Sie schon python27-devel installiert, anfordern python-devel installieren, python26-devel. Zusammen mit, dass Sie bekommen würde, python26 und python26-libs, und dann werden Sie in eine Welt der Schmerzen. Wenn Sie do diesen Fehler machen, können Siepython27 -m virtualenv projname
undpython27 -m pip install pkgname
*
statt einer.
und es funktionierte alles, aber der Kryptographie. #seufzlib64
dir ein symlink auflib
, so brauchen Sie nicht, um zu hinzufügen zu Ihrer zip..
statt*
! You rock!*
intead.
wie erwähnt von Gabriel in #2 oben ist.libs_cffi_backend
My 2 cents: wenn Sie möchten, bauen&testen Sie Ihre lambda-Funktion in der Umgebung so ähnlich zu tatsächlichen lambda wie möglich, aber immer noch unter Ihrer Kontrolle, würde ich vorschlagen, mit LambCI die Docker-images. Sie basieren auf Deponien der ursprünglichen lambda-Dateisystem. Auch Sie bauen-spezifische Varianten (tags
build-python2.7
undbuild-python3.6
sind die meisten für uns interessant).Diese Bilder sind nicht sehr klein ist - mehr als 500mb - aber Sie ermöglichen es Ihnen zu vermeiden, Kopfschmerzen, wenn Gebäude.
Wichtigen Vorteil gegenüber Amazon Linux ist, dass alle Paket-Versionen, etc. sind die gleichen wie auf der echten lambda.
Hier ist, wie ich Gebäude selbst:
Für die Automatisierung mit GitLab CI, nur anweisen, es zu benutzen, dass die gleichen docker image
und diese Befehle im script "deploy" - Abschnitt: