簡體   English   中英

AWS 使用 Lambda 將文件從 S3 存儲桶下載到 Windows 本地目錄

[英]AWS download file from S3 bucket to Windows local directory using Lambda

我想使用 Lambda 函數將文件從 S3 存儲桶下載到我的 Windows PC 上的本地目錄。

我試過這個名為“myLambdaFunction”的代碼:

import boto3
import os

def lambda_handler(event, context):   
    ACCESS_KEY = 'AAA...'
    SECRET_KEY = 'BBB...'

path = os.path.join("C:", "Users", "username", "Downloads")
if not os.path.exists(path):
    os.makedirs(path)
s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY , aws_secret_access_key=SECRET_KEY)
s3.download_file('bucketName','1.mat',path)

# TODO implement
return {
    'statusCode': 200,
    'body': json.dumps('Hello from Lambda!')
}

當我從 Windows PC 運行以下命令時:

aws lambda invoke --function-name myLambdaFunction response.json

我收到以下錯誤消息:

{"errorMessage": "[Errno 30] Read-only file system: 'C:'", "errorType": "OSError", "stackTrace": ["  File \"/var/task/lambda_function.py\", line 37, in lambda_handler\n    os.makedirs(path)\n", "  File \"/var/lang/lib/python3.8/os.py\", line 211, in makedirs\n    makedirs(head, exist_ok=exist_ok)\n", "  File \"/var/lang/lib/python3.8/os.py\", line 211, in makedirs\n    makedirs(head, exist_ok=exist_ok)\n", "  File \"/var/lang/lib/python3.8/os.py\", line 211, in makedirs\n    makedirs(head, exist_ok=exist_ok)\n", "  File \"/var/lang/lib/python3.8/os.py\", line 221, in makedirs\n    mkdir(name, mode)\n"]}

當我從代碼中刪除路徑檢查時,出現以下錯誤:

{"errorMessage": "[Errno 2] No such file or directory: 'C:/Users/username/Downloads.dce48B09'", "errorType": "FileNotFoundError", "stackTrace": ["  File \"/var/task/lambda_function.py\", line 39, in lambda_handler\n    s3.download_file('bucketName','1.mat',path)\n", "  File \"/var/runtime/boto3/s3/inject.py\", line 170, in download_file\n    return transfer.download_file(\n", "  File \"/var/runtime/boto3/s3/transfer.py\", line 307, in download_file\n    future.result()\n", "  File \"/var/runtime/s3transfer/futures.py\", line 106, in result\n    return self._coordinator.result()\n", "  File \"/var/runtime/s3transfer/futures.py\", line 265, in result\n    raise self._exception\n", "  File \"/var/runtime/s3transfer/tasks.py\", line 126, in __call__\n    return self._execute_main(kwargs)\n", "  File \"/var/runtime/s3transfer/tasks.py\", line 150, in _execute_main\n    return_value = self._main(**kwargs)\n", "  File \"/var/runtime/s3transfer/download.py\", line 573, in _main\n    fileobj.seek(offset)\n", "  File \"/var/runtime/s3transfer/utils.py\", line 361, in seek\n    self._open_if_needed()\n", "  File \"/var/runtime/s3transfer/utils.py\", line 344, in _open_if_needed\n    self._fileobj = self._open_function(self._filename, self._mode)\n", "  File \"/var/runtime/s3transfer/utils.py\", line 259, in open\n    return open(filename, mode)\n"]}

不知何故,路徑與.dce48B09連接在一起,我不明白為什么。

我知道我可以使用命令

aws s3 cp ...

為了復制文件,雖然我需要添加更多的邏輯,而且使用 Lambda 會更方便。

Lambda 函數未在您的本地計算機上運行。 當您運行aws lambda invoke您正在觸發 AWS 在某個 AWS 服務器上運行您的 Lambda 函數實例。 lambda 函數將無法訪問您的本地計算機。

如果要在本地計算機上運行一些 Python 代碼以從 S3 下載文件,則需要將其編寫為常規 Python 腳本,而不是 Lambda 函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM