python - AWS使用Lambda将文件从S3存储桶下载到Windows本地目录

标签 python amazon-web-services amazon-s3 aws-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 函数。

关于python - AWS使用Lambda将文件从S3存储桶下载到Windows本地目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60581969/

相关文章:

javascript - aws-sdk putObject 访问被拒绝 Request.extractError

python - 使用 pandas 根据其他列中的值计算行和列的平均值

python - Pandas Dataframe - 用倒数替换列值

python - 使用 DseAuthenticator 和 DseAuthorizer 从 Windows 将 python 连接到 cassandra 集群

java - URL 中的 & 符号使 XML 格式不正确?

node.js - S3.getSignedUrl 接受多种内容类型

python - Pandas 两个数据帧在 CIDR 中查找 IP 并在 CIDR 列中映射

java - 尝试将 JpaRepository 注入(inject) AWS Lambda 时没有合格的 bean

amazon-web-services - Cloudformation ECS集群

php - pg_query() - “无法将连接设置为阻塞模式(错误号 8)