プライベートサブネットにある永続的な 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 クラスターはエンドポイントに到達できません。この問題を解決するには、使用しているリージョンに対応する Amazon S3 エンドポイント (https://s3-eu-west-1.amazonaws.com など) を使用するように Jupyter を設定します。

解決方法

リージョンとエンドポイントは、実行中のクラスターで設定するか、新しいクラスターを起動するときに設定できます。

実行中のクラスターでのリージョンとエンドポイントの設定

リージョンおよび対応するエンドポイントを /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\""
        }
    }    
]

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合