Comment résoudre l'erreur « Connect timeout on endpoint URL » sur un bloc-notes JupyterHub Amazon EMR persistant qui se trouve dans un sous-réseau privé ?

Dernière mise à jour : 12/06/2020

J'ai configuré la persistance pour un cluster JupyterHub Amazon EMR qui se trouve dans un sous-réseau privé. Lorsque le cluster essaie d'atteindre Amazon Simple Storage Service (Amazon S3), je vois une erreur similaire à celle-ci : « botocore.exceptions.ConnectTimeoutError : Connect timeout on endpoint URL : https://s3.amazonaws.com/your-jupyter-backups/jupyter/jupyterhub-user-name. »

Brève description

Lorsque vous configurez la persistance pour un bloc-notes, s3.amazonaws.com est le point de terminaison par défaut. Comme il s'agit d'une adresse publique, les clusters EMR qui se trouvent dans un sous-réseau privé ne peuvent pas atteindre le point de terminaison. Pour résoudre ce problème, configurez Jupyter pour utiliser le point de terminaison Amazon S3 qui correspond à la région que vous utilisez (par exemple, https://s3-eu-west-1.amazonaws.com).

Résolution

Vous pouvez configurer la région et le point de terminaison sur un cluster en cours d'exécution ou lorsque vous lancez un nouveau cluster.

Configuration de la région et du point de terminaison sur un cluster en cours d'exécution

Ajoutez la région et le point de terminaison correspondant à /etc/jupyter/jupyter_notebook_config.py. L'exemple suivant utilise la région Europe (Irlande). Pour obtenir la liste des régions et de leurs points de terminaison, consultez points de terminaison des services 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"

Configuration de la région et du point de terminaison sur un nouveau cluster

Ajoutez un objet de configuration similaire à ce qui suit lorsque vous lancez un cluster. Vous devez inclure les caractères d'échappement ( « \ »). Dans le cas contraire, les guillemets ne sont pas transférés vers le fichier et le code Python échoue.

[
    {
        "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\""
        }
    }    
]

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?