如何解决私有网络中的持久性 Amazon EMR JupyterHub 笔记本上的“终端节点 URL 连接超时”错误?
上次更新时间:2020 年 6 月 12 日
我已经为私有子网中的 Amazon EMR JupyterHub 集群配置了持久性。当集群尝试访问 Amazon Simple Storage Service (Amazon S3) 时,出现了如下错误:“botocore.exceptions.ConnectTimeoutError:终端节点 URL 上连接超时:https://s3.amazonaws.com/your-jupyter-backups/jupyter/jupyterhub-user-name。”
简短描述
当您为笔记本配置持久性时,s3.amazonaws.com 是默认终端节点。由于这是公有地址,因此私有子网中的 EMR 集群中无法访问该终端节点。要解决此问题,请将 Jupyter 配置为使用对应于您正在使用的区域的 Amazon S3 终端节点(例如,https://s3-eu-west-1.amazonaws.com)。
解决方法
您可以在正在运行的集群上配置区域和终端节点,也可以在启动新集群时配置。
在正在运行的集群上配置区域和终端节点
向 /etc/jupyter/jupyter_notebook_config.py 添加区域和对应的终端节点。下面的示例使用欧洲(爱尔兰)区域。如需区域及其终端节点的列表,请参阅 AWS 服务终端节点。
sudo vim /etc/jupyter/jupyter_notebook_config.py
config.S3ContentsManager.endpoint_url = "https://s3-eu-west-1.amazonaws.com"
config.S3ContentsManager.region_name = "eu-west-1"
在新集群上配置区域和终端节点
在启动集群时,添加以下类似的配置对象。您必须包含转义字符 ("\")。否则,双引号不会传输到文件,且 Python 代码失败。
[
{
"Classification": "jupyter-s3-conf",
"Properties": {
"s3.persistence.enabled": "true",
"s3.persistence.bucket": "my-precious-bucket"
}
},
{
"Classification": "jupyter-notebook-conf",
"Properties": {
"config.S3ContentsManager.endpoint_url": "\"https://s3-eu-west-1.amazonaws.com\"",
"config.S3ContentsManager.region_name": "\"eu-west-1\""
}
}
]