2015-02-09 44 views
5

Tôi đang cố gắng tạo một hàm AWS Lambda, xử lý tệp được tải lên nhóm đầu tiên, sau đó lưu nó vào nhóm thứ hai và sau đó xóa tệp đầu vào.AWS Lambda không thể xóa đối tượng Amazon S3

Vấn đề là khi tôi đang cố gắng để xóa các tập tin tôi nhận được

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

Đoạn mã, mà cố gắng để xóa các tập tin là

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

Trả lời

7

Các lý do có thể tại sao lambda không thể xóa tập tin (đối tượng S3) có thể là do Vai trò Thực thi của Lambda.

bước để giải quyết việc này

  1. Điều hướng đến IAM trong AWS Management Console
  2. Tra cứu cho Vai trò IAM được sử dụng (hoặc tạo) cho lambda (nếu nó là mặc định nó sẽ là lambda_exec_role)
  3. đến Đính kèm chính sách Vai trò -> Chính sách Tuỳ chỉnh và thêm dưới đây Policy IAM Document

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

Hoặc tốt hơn là "Tài nguyên": "arn: aws: s3 ::: firstbucket/*" – jarmod

+0

Sid là gì? Tôi có thể lấy nó ở đâu? –

+0

Id sao kê để phân loại/xác định từng câu lệnh IAM. Giống như một cái tên thân thiện hơn "for-s3-access-for-app1" –

0

Tôi gặp sự cố với các ký tự và khoảng trắng lạ trong inputKey. Hãy thử với một cái tên đơn giản.

Các vấn đề liên quan