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 s3 Zappa打包的lambda错误..botocore.exceptions.SSLError:SSL验证失败,原因是<;s3文件>;[Errno 2]没有这样的文件或目录_Amazon S3_Openssl_Zappa - Fatal编程技术网

Amazon s3 Zappa打包的lambda错误..botocore.exceptions.SSLError:SSL验证失败,原因是<;s3文件>;[Errno 2]没有这样的文件或目录

Amazon s3 Zappa打包的lambda错误..botocore.exceptions.SSLError:SSL验证失败,原因是<;s3文件>;[Errno 2]没有这样的文件或目录,amazon-s3,openssl,zappa,Amazon S3,Openssl,Zappa,运行使用Zappa.io打包的AWS lambda服务 服务正在运行,但是由于ssl错误,无法访问S3文件 尝试从s3存储桶访问远程_env时出现以下错误 [1592935276008] [DEBUG] 2020-06-23T18:01:16.8Z b8374974-f820-484a-bcc3-64a530712769 Exception received when sending HTTP request. Traceback (most recent call last): File

运行使用Zappa.io打包的AWS lambda服务

服务正在运行,但是由于ssl错误,无法访问S3文件 尝试从s3存储桶访问远程_env时出现以下错误

[1592935276008] [DEBUG] 2020-06-23T18:01:16.8Z b8374974-f820-484a-bcc3-64a530712769 Exception received when sending HTTP request.
Traceback (most recent call last):
  File "/var/task/urllib3/util/ssl_.py", line 336, in ssl_wrap_socket
  context.load_verify_locations(ca_certs, ca_cert_dir)
FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/runtime/botocore/httpsession.py", line 254, in send
  urllib_response = conn.urlopen(
  File "/var/task/urllib3/connectionpool.py", line 719, in urlopen
  retries = retries.increment(
  File "/var/task/urllib3/util/retry.py", line 376, in increment
  raise six.reraise(type(error), error, _stacktrace)
  File "/var/task/six.py", line 703, in reraise
  raise value
  File "/var/task/urllib3/connectionpool.py", line 665, in urlopen
  httplib_response = self._make_request(
  File "/var/task/urllib3/connectionpool.py", line 376, in _make_request
  self._validate_conn(conn)
  File "/var/task/urllib3/connectionpool.py", line 996, in _validate_conn
  conn.connect()
  File "/var/task/urllib3/connection.py", line 352, in connect
  self.sock = ssl_wrap_socket(
  File "/var/task/urllib3/util/ssl_.py", line 338, in ssl_wrap_socket
  raise SSLError(e)
urllib3.exceptions.SSLError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/runtime/botocore/endpoint.py", line 200, in _do_get_response
  http_response = self._send(request)
  File "/var/runtime/botocore/endpoint.py", line 244, in _send
  return self.http_session.send(request)
  File "/var/runtime/botocore/httpsession.py", line 281, in send
  raise SSLError(endpoint_url=request.url, error=e)
botocore.exceptions.SSLError: SSL validation failed for .......  [Errno 2] No such file or directory
我的环境 使用的Zappa版本:0.51.0 操作系统和Python版本:Ubuntu、Python 3.8 pip冻结输出

appdirs==1.4.3
argcomplete==1.11.1
boto3==1.14.8
botocore==1.17.8
CacheControl==0.12.6
certifi==2019.11.28
cffi==1.14.0
cfn-flip==1.2.3
chardet==3.0.4
click==7.1.2
colorama==0.4.3
contextlib2==0.6.0
cryptography==2.9.2
distlib==0.3.0
distro==1.4.0
docutils==0.15.2
durationpy==0.5
Flask==1.1.2
Flask-Cors==3.0.8
future==0.18.2
h11==0.9.0
hjson==3.0.1
html5lib==1.0.1
httptools==0.1.1
idna==2.8
ipaddr==2.2.0
itsdangerous==1.1.0
Jinja2==2.11.2
jmespath==0.10.0
kappa==0.6.0
lockfile==0.12.2
mangum==0.9.2
MarkupSafe==1.1.1
msgpack==0.6.2
packaging==20.3
pep517==0.8.2
pip-tools==5.2.1
placebo==0.9.0
progress==1.5
pycparser==2.20
pydantic==1.5.1
PyMySQL==0.9.3
pyOpenSSL==19.1.0
pyparsing==2.4.6
python-dateutil==2.6.1
python-slugify==4.0.0
pytoml==0.1.21
PyYAML==5.3.1
requests==2.22.0
retrying==1.3.3
s3transfer==0.3.3
six==1.14.0
starlette==0.13.4
text-unidecode==1.3
toml==0.10.1
tqdm==4.46.1
troposphere==2.6.1
typing-extensions==3.7.4.2
urllib3==1.25.8
uvloop==0.14.0
webencodings==0.5.1
websockets==8.1
Werkzeug==0.16.1
wsgi-request-logger==0.4.6
zappa==0.51.0
My
zappa\u settings.json
{
“开发”:{
“应用程序功能”:“main.app”,
“aws_地区”:“us-west-2”,
“配置文件名称”:“默认值”,
“项目名称”:“d3c”,
“运行时”:“python3.8”,
“保暖”:错,
“cors”:没错,
“s3_桶”:“我的lambda可部署设备”,
“远程环境”:”
}
}

我已经确认我的S3文件可以从我本地的ubuntu机器上访问,但是在aws上不起作用

通过将证书路径添加到环境(python)修复了这个问题

编辑:很抱歉,上面的代码并没有真正解决这个问题,但是通过为所有ssl请求添加verify=False,找到了一个解决方法

boto3.client('s3', verify=False)

这似乎与一个悬而未决的问题有关

我在Zappa部署时遇到了同样的问题, 我尝试了所有可能的选择,但没有任何效果,但在尝试了不同的建议后,以下步骤对我有效

  • 我将python3.8/site-packages/botocore/cacert.pem复制到我的lambda文件夹中
  • 我将“REQUESTS\u CA\u BUNDLE”环境变量设置为/var/task/cacert.pem
  • /var/task是AWS Lambda提取压缩代码的地方

  • 我更新了我的Zappa功能,一切正常

  • 欢迎并感谢您的回答,这确实解决了(至少是一个解决办法)我遇到的一个问题。请添加一个链接,指向Lambda代码部署到
    /var/task
    的位置?@elactic我在testlabs.io上读到一篇文章时发现Lambda代码部署在哪里,尽管这篇文章是关于AWS的感知安全缺陷的,但可以在这里找到@jaywonder20我进行了更多的调查,而且似乎没有必要复制cacert.pem文件。以下zappa envron设置在不移动证书的情况下对我有效(通过检查lambda上botocore库的安装位置):
    “REQUESTS\u CA\u BUNDLE”:“/var/task/botocore/cacert.pem”
    这只适用于您自己使用boto客户端的情况,不是吗?例如,如果您正在使用Zappa的
    @task
    ,那么您无法控制它如何进行调用。然而,一般来说,建议禁用SSL验证在我看来并不理想。@elactic你是对的……这就是为什么我称之为黑客破解。请不要建议人们停止验证证书。这些安全措施的存在是有原因的。相反,请尝试解决问题。
    os.environ['REQUESTS_CA_BUNDLE'] = os.path.join('/etc/ssl/certs/','ca-certificates.crt')
    
    boto3.client('s3', verify=False)