Ich habe ein Python-Skript, das ein Lambda-Skript in AWS zusammen mit allen Richtlinien und Triggern erstellt. Ich benutze Python Boto3-Bibliothek dafür. Ich erstelle die Zip-Datei für das Lambda als On-the-Fly, anstatt eine statische Zip-Datei von der Festplatte hochzuladen. Ich verwende diesen einfachen Code von unten, um meine Zip-Datei zu erstellen. Es erstellt die Zip-Datei ohne Probleme und mein Python-Code lädt diese Zip-Datei als Lambda-Skript hoch und ich kann mein Lambda-Skript ohne Probleme im AWS anzeigen. Aber wenn ich mein Lambda-Skript ausfühle, gibt es mir den Modul nicht gefunden Fehler, obwohl ich deutlich sehen kann, dass sowohl der Modulname als auch der Dateiname existiert und sichtbar ist.Erstellen einer On-the-Fly-Zip-Datei aus Zeichenfolge Inhalt für AWS Lambda in Python
kann nicht Modul importieren ‚xxxx‘: Keine Modul namens xxxx
In dem Dateisystem ich diese Zip-Datei doppelklicken, um die von diesem Code erstellt wurde, und sehen Sie, dass der Inhalt erstellt und sieht alles normal.
Wenn ich umgehen zippen und das Zip statisch mit WinZip erstellen und den Rest des Python & boto3 Skript hochladen diese Datei dann funktioniert es gut.
def CreateLambdaZip(self, fileName, fileContent):
with zipfile.ZipFile('Lambda/' + fileName + '.zip', 'w') as myzipc:
myzipc.writestr(fileName + '.py', fileContent)
myzipc.close()
Es sieht ein bisschen wie für die Zip-Datei, die ich einige spezielle Header bin Skipping, die von Aws Lambda benötigt wird. Gibt es so etwas? Denn im Dateisystem ist die Zip-Datei, die von Python-Code erstellt wird und die andere, die von WinZip erstellt wird, genau die gleichen. Ich weiß also, dass mit dem Lambda-Skript nichts falsch ist.
Update: Ich lade die Zip-Datei mit dem folgenden Code, der die ZIP-Datei liest, die mit dem obigen Snippet erstellt wurde.
with open('Lambda/'+ fileName +'.zip', 'rb') as zipFile:
func = boto3.client("Lambda").create_function(
FunctionName=lambdaFunction,
Runtime='python2.7',
Role=role['Role']['Arn'],
Handler= fileName + "." + functionName,
Description=description,
Timeout=10,
MemorySize=256,
Publish=True,
Code={'ZipFile': zipFile.read()},
)
Wenn ich zipFile.read() bekomme ich 2 unterschiedliche Header für den gleichen Inhalt, wenn ich es zip mit WinZip und wenn ich zip it Python-Modul. Zip-Datei, die programmatisch mit Python
b'PK\x03\x04\x14\x00\x00\x00\x00\x00\xe4~\x01IO\x96J=Z\x07\x00\x00Z\x07\x00\x00\x19\x00\x00\x00schedule-ec2-snapshots.pyimport json\nimport boto3\nimport time\nfrom datetime import date, timedelta\n\nprint(\'Loading scheduled EC2 backup actions\')\n\ndef create_snapshots(event, context):\n """\n Lambda function that executes daily snapshots for the instances that
und ZipFile von WinZip
b'PK\x03\x04\x14\x00\x02\x00\x08\x004X\xfcH\x88\x1f\xce\xb5&\x03\x00\x00b\x07\x00\x00\x19\x00\x00\x00schedule-ec2-snapshots.py\x8dU]k\[email protected]\x10|7\xf4?,\nA\x12qL\xda\x06B\r~I\x93Bh\x9b\x87&\xf4E\x15\xe1\xac[\xdb\xd7HwBw2\t\xc1\xff\xbd{+\xeb\xcb.\xb4\n\xc4\xba\xdb\xd1\xec\xce\xdc\xae\xa4\x8a\xd2T\x0e~[\xa3\'\xaa\xb9_\x1ag>\xb6\x0b\xa7\n\x9c\xac*S\x80\x14\x0e\xfd\n\xf6\x11\xbf\x9er\\b\xee\xc4dRVJ\xbb(\xfcf\x84Tz\r6\xdb\xa0\xacs\x94p\xfb\xf9\x03,E\xf6\\\x97
Versuchen Sie, die Datei über die Befehlszeile zu entpacken. Was schreibt es? –
Wie lade ich dieses zip-Archiv hoch, was/wie CLI-Befehl, den Sie verwenden? –
@ b.b3rn4rd Ich verwende keine CLI. Ich führe ein py-Skript aus, das boto3.client ("lambda") verwendet. Create_function. Aktualisierter Code über –