Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services boto3 v1.9.244是否支持创建';s3和x27;资源_Amazon Web Services_Amazon S3_Aws Lambda_Python 3.6_Boto3 - Fatal编程技术网

Amazon web services boto3 v1.9.244是否支持创建';s3和x27;资源

Amazon web services boto3 v1.9.244是否支持创建';s3和x27;资源,amazon-web-services,amazon-s3,aws-lambda,python-3.6,boto3,Amazon Web Services,Amazon S3,Aws Lambda,Python 3.6,Boto3,我正在尝试使用AWS Lambda从S3检索具有特定前缀的文件列表。我将Lambda与boto3-1.9.244(最新版本)捆绑在一起。当我运行Lambda时,我在S3资源分配上收到一个SyntaxError,尽管它可能与bot3会话有关 我使用的是Python 3.6,AWS Lambda使用的是boto3-1.9.221和botocore-1.12.221。当我运行代码而不捆绑最新版本的boto3时,它就工作了。我目前的解决方案是将boto3-1.9.221与lambda代码绑定,而不是使用

我正在尝试使用AWS Lambda从S3检索具有特定前缀的文件列表。我将Lambda与boto3-1.9.244(最新版本)捆绑在一起。当我运行Lambda时,我在S3资源分配上收到一个
SyntaxError
,尽管它可能与bot3会话有关

我使用的是
Python 3.6
,AWS Lambda使用的是
boto3-1.9.221
botocore-1.12.221
。当我运行代码而不捆绑最新版本的boto3时,它就工作了。我目前的解决方案是将
boto3-1.9.221
与lambda代码绑定,而不是使用最新版本的boto3

import boto3

s3 = boto3.resource('s3')
我希望它创建一个s3资源,但我得到了以下错误:

invalid syntax (_base.py, line 414): SyntaxError
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 20, in lambda_handler
    s3 = boto3.resource('s3')
  File "/var/task/boto3/__init__.py", line 100, in resource
    return _get_default_session().resource(*args, **kwargs)
  File "/var/task/boto3/session.py", line 389, in resource
    aws_session_token=aws_session_token, config=config)
  File "/var/task/boto3/session.py", line 263, in client
    aws_session_token=aws_session_token, config=config)
  File "/var/task/botocore/session.py", line 839, in create_client
    client_config=config, api_version=api_version)
  File "/var/task/botocore/client.py", line 80, in create_client
    cls = self._create_client_class(service_name, service_model)
  File "/var/task/botocore/client.py", line 110, in _create_client_class
    base_classes=bases)
  File "/var/task/botocore/hooks.py", line 356, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/var/task/botocore/hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "/var/task/botocore/hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "/var/task/boto3/utils.py", line 61, in _handler
    module = import_module(module)
  File "/var/task/boto3/utils.py", line 52, in import_module
    __import__(name)
  File "/var/task/boto3/s3/inject.py", line 15, in <module>
    from boto3.s3.transfer import create_transfer_manager
  File "/var/task/boto3/s3/transfer.py", line 127, in <module>
    from s3transfer.exceptions import RetriesExceededError as \
  File "/var/task/s3transfer/__init__.py", line 134, in <module>
    import concurrent.futures
  File "/var/task/concurrent/futures/__init__.py", line 8, in <module>
    from concurrent.futures._base import (FIRST_COMPLETED,
  File "/var/task/concurrent/futures/_base.py", line 414
    raise exception_type, self._exception, self._traceback
                        ^
SyntaxError: invalid syntax
无效语法(_base.py,第414行):语法错误
回溯(最近一次呼叫最后一次):
lambda_处理程序中的文件“/var/task/lambda_function.py”,第20行
s3=boto3.resource('s3')
文件“/var/task/boto3/_init__uuu.py”,第100行,在参考资料中
返回_get_default_session().resource(*args,**kwargs)
文件“/var/task/boto3/session.py”,第389行,在参考资料中
aws\u会话\u令牌=aws\u会话\u令牌,config=config)
文件“/var/task/boto3/session.py”,第263行,在客户端
aws\u会话\u令牌=aws\u会话\u令牌,config=config)
文件“/var/task/botocore/session.py”,第839行,在create\u client中
客户端配置=配置,api版本=api版本)
文件“/var/task/botocore/client.py”,第80行,在create\u client中
cls=self.\u创建\u客户端\u类(服务\u名称、服务\u模型)
文件“/var/task/botocore/client.py”,第110行,在创建客户端类中
基本类=基本类)
文件“/var/task/botocore/hooks.py”,第356行,在emit中
返回self.\u emitter.emit(别名为\u事件\u名称,**kwargs)
文件“/var/task/botocore/hooks.py”,第228行,在emit中
返回自发出(事件名称,kwargs)
文件“/var/task/botocore/hooks.py”,第211行,在
响应=处理程序(**kwargs)
文件“/var/task/boto3/utils.py”,第61行,在
模块=导入模块(模块)
导入模块第52行的文件“/var/task/boto3/utils.py”
__导入(名称)
文件“/var/task/boto3/s3/inject.py”,第15行,在
从boto3.s3.transfer导入创建\u transfer\u管理器
文件“/var/task/boto3/s3/transfer.py”,第127行,在
从s3transfer.exceptions导入RetrieseXceederRor作为\
文件“/var/task/s3transfer/_init__uuu.py”,第134行,在
进口期货
文件“/var/task/concurrent/futures/_init__.py”,第8行,在
从concurrent.futures.\u基本导入(第一次完成,
文件“/var/task/concurrent/futures/_base.py”,第414行
引发异常\u类型,self.\u异常,self.\u回溯
^
SyntaxError:无效语法

是的,它确实支持。因此,此问题与API版本无关

只需将最新版本替换为URL中所需的版本号,即可访问特定的API版本

最新版本

1.9.244


您的lambda函数似乎没有S3的IAM角色。您可以直接指定资源的访问密钥和密钥

resource = boto3.resource(
    's3',
    # Hard coded strings as credentials, not recommended.
    aws_access_key_id='AKIAIO5FODNN7E******', # not real
    aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYE******' # not real
)

或者必须给予lambda函数正确的权限。

问题是我是用Python2而不是Python3安装需求的。通过用Python3安装需求,我不再收到语法错误。

是的,它应该可以工作。请您向我们展示更多的代码(最好是a)因此,我们可以尝试重现您的情况?顺便说一句,为什么要打包boto3?它是默认包,已经安装在lambda上。