Доступ к межрегиональной конечной точке s3 через частную подсеть - PullRequest
0 голосов
/ 10 апреля 2019

У меня EMR, который вращается в eu-west-1 частной подсети . Я определил конечную точку шлюза для S3 в таблице маршрутов. Мне нужно получить доступ к этому общедоступному сегменту / местоположению, предоставленному AWS: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar, что дает ошибку ниже. Я думаю, что это из-за межрегионального доступа через конечную точку шлюза, которая не разрешена. Я могу получить доступ к другим сегментам, которые находятся в том же регионе . Есть ли обходной путь для доступа к этому, возможно, через NAT? Таблица маршрутов уже имеет NAT, но запрос как-то не проходит через него.

2019-04-10T05:17:06.849Z INFO Ensure step 1 jar file s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
INFO Failed to download: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
java.lang.RuntimeException: Error whilst fetching 's3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar'
    at aws157.instancecontroller.util.S3Wrapper.fetchS3HadoopFileToLocal(S3Wrapper.java:412)
    at aws157.instancecontroller.util.S3Wrapper.fetchHadoopFileToLocal(S3Wrapper.java:351)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner$Runner.<init>(HadoopJarStepRunner.java:243)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner.createRunner(HadoopJarStepRunner.java:152)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner.createRunner(HadoopJarStepRunner.java:146)
    at aws157.instancecontroller.master.steprunner.StepExecutor.runStep(StepExecutor.java:136)
    at aws157.instancecontroller.master.steprunner.StepExecutor.run(StepExecutor.java:70)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.enqueueStep(StepExecutionManager.java:248)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.doRun(StepExecutionManager.java:195)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.access$000(StepExecutionManager.java:33)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager$1.run(StepExecutionManager.java:94)
Caused by: com.amazonaws.AmazonClientException: Unable to execute HTTP request: connect timed out
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:618)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1143)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1021)
    at aws157.instancecontroller.util.S3Wrapper.copyS3ObjectToFile(S3Wrapper.java:303)
    at aws157.instancecontroller.util.S3Wrapper.getFile(S3Wrapper.java:287)
    at aws157.instancecontroller.util.S3Wrapper.fetchS3HadoopFileToLocal(S3Wrapper.java:399)
    ... 10 more

1 Ответ

1 голос
/ 11 апреля 2019

Конечная точка шлюза S3 никогда не будет пытаться маршрутизировать межрегиональный трафик, но шлюз NAT должен обрабатывать этот трафик автоматически. Учитывая утверждение о наличии шлюза NAT, то Unable to execute HTTP request: connect timed out означает, что шлюз NAT (или связанный с ним параметр) настроен неправильно.

Как отмечалось в комментариях, особая проблема заключалась в том, что шлюз NAT был предоставлен в той же подсети, для которой он был предназначен. Это недопустимая конфигурация, потому что в этом случае шлюз NAT пытается подключиться к Интернету ... через себя ... так как он получает маршрут по умолчанию из подсети, в которой он развернут.

Чтобы создать шлюз NAT, необходимо указать подсеть public , в которой должен находиться шлюз NAT.

...

После того, как вы создали шлюз NAT, вы должны обновить таблицу маршрутов, связанную с одной или несколькими вашими частными подсетями, чтобы направлять интернет-трафик на шлюз NAT. Это позволяет экземплярам в ваших частных подсетях общаться с Интернетом. (выделение добавлено)

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-basics

...