2016-07-19 97 views
1

這是我在AWS拉姆達代碼:無法從S3下載文件,而無需任何HTTP錯誤

import boto3 
def worker_handler(event, context): 

s3 = boto3.resource('s3') 
s3.meta.client.download_file('s3-bucket-with-script','scripts/HelloWorld.sh', '/tmp/hw.sh') 
print "Connecting to " 

我只是想下載存儲在S3文件,但是當我開始的代碼,該程序只運行到超時並且不打印任何內容。 這是日誌文件

START RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 Version: $LATEST 
END RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 
REPORT RequestId: 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 Duration: 300000.12 ms Billed Duration: 300000 ms Memory Size: 128 MB Max Memory Used: 28 MB 
2016-07-18T23:42:10.273Z 8b9b86dd-4d40-11e6-b6c4-afcc5006f010 Task timed out after 300.00 seconds 

I have this role in the this Lambda function, it shows that I have the permission to get file from S3 
{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "ec2:CreateNetworkInterface", 
      "ec2:DescribeNetworkInterfaces", 
      "ec2:DeleteNetworkInterface" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
     "Resource": "arn:aws:logs:*:*:*" 
    }, 
    { 
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:GetObject" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::*" 
     ] 
    } 
] 
} 

是否有任何其他的設立我錯過了什麼?或者無論如何,我可以繼續這個計劃? 謝謝先進。

+0

我試着下載我的文件在S3到本地計算機。我可以使用AWS CLI通過'aws s3 sync'完成這項工作,但我不確定這裏有多少權限。我知道許可在某些時候可能會很棘手。 –

回答

0

docs你的代碼應該是有一點不同:

import boto3 

    # Get the service client 
    s3 = boto3.client('s3') 

    # Download object at bucket-name with key-name to tmp.txt 
    s3.download_file("bucket-name", "key-name", "tmp.txt") 

另外,還要注意LAMBDA有一個短暫的文件結構,這意味着下載文件,確實沒有什麼。您只需下載它,然後關閉Lambda並停止存在,如果您想保留它,則需要將它下載到Lambda後發送到某個地方。

0

正如你提到的超時,我會檢查網絡配置。如果您正在瀏覽VPC,這可能是由於缺少通往互聯網的路線。這可以使用NAT網關或S3 VPC端點來解決。下面的視頻介紹了所需的配置。

Introducing VPC Support for AWS Lambda