amazon-s3 - 通过私有子网访问跨区域 s3 端点
问题描述
eu-west-1
我有一个在私有子网中旋转的 EMR 。我在路由表中为 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
解决方案
S3 网关端点永远不会尝试路由跨区域流量,但 NAT 网关应自动处理此流量。假设 NAT 网关已就位,则Unable to execute HTTP request: connect timed out
暗示 NAT 网关(或与之关联的设置)配置错误。
正如评论中所指出的,这里的具体问题是 NAT 网关被配置在它打算服务的同一子网上。这不是一个有效的配置,因为在这种情况下,NAT 网关会尝试通过自身访问 Internet……因为它从部署它的子网获取其默认路由。
要创建 NAT 网关,您必须指定 NAT 网关应驻留的公共子网。
...
创建 NAT 网关后,您必须更新与一个或多个私有子网关联的路由表,以将 Internet 绑定流量指向 NAT 网关。这使您的私有子网中的实例能够与 Internet 通信。(重点补充)
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-basics
推荐阅读
- sql - 当 datetime 字段期望满足删除条件时,为什么 SQL Server 不删除条目?
- typescript - 我需要从 ion-datetime 中选择的值中获取特定参数(日期、月份、年份)
- windows - 如何从笔记本安全地访问我的网站?(刚刚重新安装了windows7)
- firebase - E/FirebaseInstanceId(5789):主题同步或令牌检索因硬故障异常而失败:AUTHENTICATION_FAILED。不会重试操作
- rust - 如何处理被标记为包含特洛伊木马的箱子?
- r - 数据表包在 R 中是否支持超过 2^31 行的数据表?
- json - JSON 模式帮助,对象数组
- python - 这个分词实现的复杂性的时间和空间是多少?
- sql - 按平均评分排序,但也按总评论数排序
- r - 通过交互手动调整 ggplot 中的颜色和线型