2015-02-09 7 views
5

Ich versuche eine AWS-Lambda-Funktion zu erstellen, die eine in den ersten Bucket hochgeladene Datei verarbeitet, sie dann im zweiten Bucket speichert und anschließend die Eingabedatei löscht.AWS Lambda kann Amazon S3-Objekt nicht löschen

Das Problem ist, dass, wenn ich die Datei zu löschen versuche ich bin immer

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

Der Code-Schnipsel, die die Datei zu löschen versucht, ist

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

Antwort

7

Der mögliche Grund Warum Lambda die Datei nicht löschen konnte (S3-Objekt), könnte auf die Ausführungsrolle von Lambda zurückzuführen sein.

Schritte, dieses

  1. Navigieren Sie zu der IAM in AWS Management Console zu lösen
  2. für die IAM-Rolle (oder erstellt) für die Lambda-Used-Look (wenn es es ist standardmäßig wäre lambda_exec_role)
  3. Go Rolle Politik anhängen -> Benutzerdefinierte Politik und unter IAM Richtlinie hinzufügen Dokument

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

Oder vorzugsweise "Ressource": "arn: aws: s3 ::: firebucket/*" – jarmod

+0

Was ist Sid? wo kann ich das bekommen? –

+0

Anweisungs-ID zum Kategorisieren/Identifizieren jeder IAM-Anweisung. Mehr wie ein freundlicher Name "for-s3-access-for-app1" –

0

Ich hatte Probleme mit seltsamen Zeichen und Leerzeichen innerhalb von InputKey. Versuche es mit einem einfachen Namen.