2016-04-05 38 views
17

Viene visualizzato l'errore "Il ruolo definito per la funzione non può essere assunto da Lambda" quando sto provando a creare una funzione lambda con comando create-function.Il ruolo definito per la funzione non può essere assunto da Lambda

AWS lambda creare funzioni
--region noi-ovest-2
--function-nome HelloPython
--zip file fileB: //hello_python.zip
ARN --role: AWS: iam :: my-acc-account-id: ruolo/default
--handler hello_python.my_handler
python2.7 --runtime
--timeout 15
--memory-size 512

+2

Qual è l'errore? Qual'è la domanda? – jotik

+0

Sto ottenendo lo stesso errore, un po 'di fortuna? –

+2

@ox., Vedere la nuova risposta di seguito. Aspettando qualche secondo fissato per me. – Zanon

risposta

20

Sto riscontrando anche questo errore. Non ho ancora una risposta definitiva (ancora) ma ho pensato di passare un paio di suggerimenti che potrebbero aiutare te e/o chiunque altro a risolvere questo problema.

A) Se si crea l'ARN ruolo mettendo insieme il vostro account ID e nome del ruolo, credo che l'ID account deve essere senza trattini

B) Se avete appena creato il ruolo, e le politiche eventualmente aggiunti ad esso, sembra esserci una (piccola) finestra temporale in cui il ruolo attiverà questo errore. Dormire 5 o 6 secondi tra l'ultima operazione sul ruolo e la chiamata alla funzione di creazione mi ha permesso di aggirare il problema (ma, naturalmente, i tempi potrebbero essere variabili, quindi questo è al meglio un work-around).

+13

+1 "Dormire 5 o 6 secondi" è la soluzione qui. Ho avuto lo stesso problema usando l'SDK di JavaScript e ho aspettato che mi risolvesse. Ho postato una risposta a una domanda [domanda] (http://stackoverflow.com/q/37503075/1476885) con un esempio di codice per Nodo. – Zanon

+1

@Zanon - grazie per il puntatore al tuo Q/A. Se avessi tempo, proverei a trasmetterlo ai forum ufficiali, come di solito quando le risorse hanno bisogno di tempo per essere pronte, otteniamo uno stato che possiamo interrogare (e anche oggetti cameriere se stai usando boto3), quindi questo sembra come un incoerente (non documentato afachco) – FOR

+1

il pacchetto python 'retrying' è stato un salvataggio rapido - ha appena decorato la funzione di creazione con il seguente:' @ retrying.retry (wait_exponential_multiplier = 1000, wait_exponential_max = 10000) ' –

26

Ho ricevuto l'errore "Il ruolo definito per la funzione non può essere assunto da Lambda" perché non avevo aggiornato il file di configurazione "Trust Relationship". Non ho riscontrato problemi di timeout come nella risposta collegata nei commenti.

I commenti nelle risposte precedenti hanno evidenziato che è necessario aggiungere quanto segue.

  1. vai a 'IAM> Ruoli> YourRoleName'
    • (Nota: se il ruolo non è elencato, allora avete bisogno di crearlo.)
  2. Selezionare la 'fiducia scheda
  3. Seleziona 'I rapporti Modifica relazione di trust'

miniera finito come il seguente.

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

Grazie mille, ha funzionato per me. Questo dovrebbe essere contrassegnato come la risposta accettata. – arnold

9

Per me, il problema era che avevo un nome incompleto per il ruolo.Ho impostato

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

quando avrebbe dovuto essere

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

(ovviamente il mio AWS id non è in realtà 000000000000)

Ho scoperto questo eseguendo

aws iam get-role --role-name MyRoleName 

e guardando nella proprietà "Arn" nel set di risultati.

+0

Grazie, mi mancava. – apines

1

Per me, il problema era che avevo impostato la chiave dell'ambiente regione predefinita errata.