2016-04-05 2 views
17

Ich erhalte den Fehler "Die von Lambda definierte Rolle für die Funktion kann nicht übernommen werden, wenn ich versuche, mit dem Befehl create-function eine Lambda-Funktion zu erstellen.Die für die Funktion definierte Rolle kann von Lambda nicht angenommen werden

aws Lambda-create-Funktion
--region us-west-2
--function-name HelloPython
--zip-Datei FILEB: //hello_python.zip
--role arn: aws: iam :: my-acc-Account-ID: Rolle/default
--handler hello_python.my_handler
--runtime python2.7
--timeout 15
--memory-Größe 512

+2

Was ist der Fehler? Was ist die Frage? – jotik

+0

Ich bekomme den gleichen Fehler, Glück? –

+2

@ox., Siehe die neue Antwort unten. Ich warte ein paar Sekunden auf mich. – Zanon

Antwort

20

Ich habe auch diesen Fehler gefunden. Ich hatte (noch) keine definitive Antwort, aber ich dachte, ich würde ein paar Hinweise weitergeben, die Ihnen und/oder anderen helfen könnten, dieses Problem zu lösen.

A) Wenn Sie die Rolle ARN bauen, indem sie zusammen, um Ihre Konto-ID und Rollennamen, ich glaube, das Konto-ID ohne Bindestriche sein muss

B) Wenn Sie nur die Rolle erstellt und möglicherweise Richtlinien hinzugefügt dazu scheint es ein (kleines) Zeitfenster zu geben, in dem die Rolle diesen Fehler auslöst. Wenn ich 5 oder 6 Sekunden zwischen der letzten Operation der Rolle und dem Aufruf der Funktion create-function verbrachte, konnte ich das Problem umgehen (aber natürlich kann das Timing variabel sein, so dass dies bestenfalls ein Workaround ist).

+13

+1 "Schlafen 5 oder 6 Sekunden" ist die Lösung hier. Ich hatte das gleiche Problem mit dem JavaScript SDK und wartete auf mich. Ich habe eine selbstbeantwortete [Frage] (http://stackoverflow.com/q/37503075/1476885) mit Codebeispiel für Node gepostet. – Zanon

+1

@Zanon - danke für den Zeiger auf Ihr Q/A. Wenn ich Zeit hätte, würde ich versuchen, dies an die offiziellen Foren weiterzuleiten, da wir normalerweise einen Status erhalten, den wir abfragen können (und sogar Kellnerobjekte, wenn Sie boto3 verwenden), so scheint es wie eine ungerade (undokumentierte afaik) Inkonsistenz – FOR

+1

'retrying' Python-Paket war eine schnelle Rettung - nur dekoriert die Erstellungsfunktion mit dem folgenden:' @ retrying.retry (wait_exponential_multiplier = 1000, warte_exponential_max = 10000) ' –

26

Ich habe den Fehler "Die für die Funktion definierte Rolle kann nicht von Lambda übernommen werden", weil ich die Rollen "Trust Relationship" -Konfigurationsdatei nicht aktualisiert hatte. Ich habe die Timeout-Probleme nicht wie in der verknüpften Antwort in den Kommentaren gefunden.

Die Kommentare in den obigen Antworten darauf hingewiesen, dass Sie Folgendes hinzufügen müssen.

  1. Zum 'IAM> Rollen> YourRoleName'
    • (Hinweis: Wenn Sie Ihre Rolle nicht aufgeführt ist, dann müssen Sie es erstellen.)
  2. Wählen Sie das ‚Vertrauen Beziehungen Registerkarte
  3. Wählen Sie 'Edit Vertrauensbeziehung'

-Mine beendet wie die unten nach oben.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     <your other rules> 
    }, 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "lambda.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole" 
    } 
    ] 
} 
+1

Vielen Dank, es hat funktioniert für mich. Dies sollte als akzeptierte Antwort markiert werden. – arnold

9

Für mich war das Problem, dass ich einen unvollständigen Namen für die Rolle hatte.Ich habe

--role arn:aws:iam::000000000000:role/MyRoleName 

wenn es

gewesen sein sollte
--role arn:aws:iam::000000000000:role/service-role/MyRoleName 

(natürlich meine aws-ID ist nicht wirklich 000000000000)

Ich entdeckte diese durch

aws iam get-role --role-name MyRoleName 
läuft

und suchen unter der "Arn" Eigenschaft in der Ergebnismenge.

+0

Danke, das war ich fehlte. – apines

1

Für mich war das Problem, dass ich den falschen Standardregion-Umgebungsschlüssel eingestellt hatte.

Verwandte Themen