2015-02-09 11 views
5

Sto provando a creare una funzione AWS Lambda, che elabora un file caricato nel primo bucket, quindi lo salva nel secondo bucket e quindi elimina il file di input.AWS Lambda non può eliminare l'oggetto Amazon S3

Il problema è che quando sto cercando di eliminare il file mi sto

{ 
    "message": "Access Denied", 
    "code": "AccessDenied", 
    "time": "2015-02-09T22:08:45.926Z", 
    "statusCode": 403, 
    "retryable": false, 
    "retryDelay": 30 
} 

Il frammento di codice, che cerca di eliminare il file è

s3.deleteObject({ 
    Bucket: inputBucket, 
    Key: inputKey 
}, function(a, b) { 
    if (a) { 
     console.error("Error on delete"); 
     console.error(a); 
    } else { 
     console.log("Deleted successfully"); 
    } 
}); 

risposta

7

La possibile causa perché lambda non è stato in grado di eliminare il file (oggetto S3) potrebbe essere dovuto al ruolo di esecuzione di Lambda.

passaggi per risolvere questo

  1. Passare alla IAM in AWS Management Console
  2. cerca per il ruolo IAM utilizzato (o creati) per il lambda (se è di default sarebbe lambda_exec_role)
  3. Vai a Collegare Politica Ruolo -> Politica personalizzato e aggiungere il sotto Politica IAM documento

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt1423535846414", 
     "Action": [ 
     "s3:DeleteObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::*" 
    } 
    ] 
} 
+2

O preferibilmente "Risorsa": "arn: aws: s3 ::: firstbucket/*" – jarmod

+0

Cos'è Sid? dove lo posso prendere? –

+0

ID dichiarazione per categorizzare/identificare ciascuna istruzione IAM. Più simile a un nome descrittivo "for-s3-access-for-app1" –

0

Ho avuto problemi con caratteri e spazi strani all'interno di inputKey. Prova con un nome semplice.