如何解决私有网络中的持久性 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\""
        }
    }    
]

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?