Python 无法使用api从s3获取文件
Python 无法使用api从s3获取文件,python,amazon-web-services,amazon-s3,amazon-iam,Python,Amazon Web Services,Amazon S3,Amazon Iam,我正在尝试从s3存储桶中提取文件。我已经使用aws的Chalice microservice编写了代码 我无法理解如何解决这个问题。由于我对aws非常陌生,根据我的理解,我允许IAM担任s3完全访问的角色。我该怎么办 这就是我得到的错误 Traceback (most recent call last): File "/var/task/chalice/app.py", line 1112, in _get_view_function_response response = view
我正在尝试从s3存储桶中提取文件
。我已经使用aws的Chalice microservice编写了代码
我无法理解如何解决这个问题。由于我对aws非常陌生,根据我的理解,我允许IAM担任s3完全访问的角色。我该怎么办
这就是我得到的错误
Traceback (most recent call last):
File "/var/task/chalice/app.py", line 1112, in _get_view_function_response
response = view_function(**function_args)
File "/var/task/app.py", line 58, in fetch
s3.Bucket(os.environ["BUCKET_NAME"]).download_file( 'key', 'key.pem')
File "/var/task/boto3/s3/inject.py", line 246, in bucket_download_file
ExtraArgs=ExtraArgs, Callback=Callback, Config=Config)
File "/var/task/boto3/s3/inject.py", line 172, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/var/task/boto3/s3/transfer.py", line 307, in download_file
future.result()
File "/var/task/s3transfer/futures.py", line 106, in result
return self._coordinator.result()
File "/var/task/s3transfer/futures.py", line 265, in result
raise self._exception
File "/var/task/s3transfer/tasks.py", line 126, in __call__
return self._execute_main(kwargs)
File "/var/task/s3transfer/tasks.py", line 150, in _execute_main
return_value = self._main(**kwargs)
File "/var/task/s3transfer/download.py", line 571, in _main
fileobj.seek(offset)
File "/var/task/s3transfer/utils.py", line 367, in seek
self._open_if_needed()
File "/var/task/s3transfer/utils.py", line 350, in _open_if_needed
self._fileobj = self._open_function(self._filename, self._mode)
File "/var/task/s3transfer/utils.py", line 261, in open
return open(filename, mode)
OSError: [Errno 30] Read-only file system: 'key.pem.a7A6afCF'
关联代码:
s3 = boto3.resource('s3')
# s3.Bucket(os.environ["BUCKET_NAME"]).upload_file(Filename="requirements.txt" , Key="tryagain")
s3.Bucket(os.environ["BUCKET_NAME"]).download_file( 'key', 'key.pem')
感谢您的帮助。由于代码是在lambda上执行的,因此从S3下载的文件应该存储在
/tmp
中,而不是存储在lambda功能代码执行的位置
建议的解决方案是改变:
s3.Bucket(os.environ["BUCKET_NAME"]).download_file( 'key', 'key.pem')
进入:
与此相关的代码是什么?似乎您无法写入文件系统:“只读文件系统”@Torxed我添加了相关的代码。@Marcin那么,如何解决此问题?它是否在lambda上运行?
s3.Bucket(os.environ["BUCKET_NAME"]).download_file('key', '/tmp/key.pem')