Сервер JupyterHub не может запуститься в кластере Terraformed EMR, работающем в частной подсети - PullRequest
0 голосов
/ 26 июня 2019

Я создаю кластер EMR (emr-5.24.0) с Terraform, развернутый в частной подсети, в которую входят Spark, Hive и JupyterHub.

Я добавил дополнительную конфигурацию JSON для развертывания, которая должна добавить устойчивость для ноутбуков Jupiter в S3 (вместо локально на диске).

Общая архитектура включает в себя конечную точку VPC для S3, и я могу получить доступ к корзине, в которую пытаюсь записать записные книжки.

Когда кластер подготовлен, сервер JupyterHub не может запуститься.

Вход в главный узел и попытка запустить / перезапустить докер-контейнер для jupyterhub не помогают.

Конфигурация для этого постоянства выглядит следующим образом:

[
    {
        "Classification": "jupyter-s3-conf",
        "Properties": {
            "s3.persistence.enabled": "true",
            "s3.persistence.bucket": "${project}-${suffix}"
        }
    },
  {
     "Classification": "spark-env",
     "Configurations": [
       {
         "Classification": "export",
         "Properties": {
            "PYSPARK_PYTHON": "/usr/bin/python3"
          }
       }
    ]
  }
]

В определении ресурса terraform EMR на него ссылаются:

configurations         = "${data.template_file.configuration.rendered}"

Это читается с:

data "template_file" "configuration" {
  template = "${file("${path.module}/templates/cluster_configuration.json.tpl")}"

  vars = {
    project  = "${var.project_name}"
    suffix   = "bucket"
  }
}

Когда я не использую постоянство на ноутбуках, все работает нормально, и я могу войти в JupyterHub.

Я вполне уверен, что это не проблема политики IAM, поскольку политика роли кластера EMR Разрешить действие определяется как "s3: *".

Есть ли какие-либо дополнительные шаги, которые необходимо предпринять, чтобы это функционировало?

/ K

1 Ответ

0 голосов
/ 27 июля 2019

Кажется, что Jupyter на EMR использует S3ContentsManager для соединения с S3.

https://github.com/danielfrg/s3contents

Я копаю бит S3ContentsManager и нашел конечные точки S3, которые являются общедоступными (как и ожидалось).Поскольку конечная точка S3 является общедоступной, jupyter требуется доступ к Интернету, но вы запускаете EMR в частной подсети, которая, я думаю, не позволяет подключить конечную точку.

Возможно, вам потребуется использовать шлюз NAT вобщедоступной подсети или создайте конечную точку s3 для вашего VPC.

...