我们是否需要互联网连接才能在AWS中的实例中使用AWS Java SDK?
我在VPC内部运行了一个实例,我没有为其分配任何公共IP地址。
从我最初的调查发现,我发现要从亚马逊的这个实例运行基于AWS Java SDK的Java程序,该实例需要具有互联网连接。
运行AWS Java SDK附带的示例程序AwsConsoleApp,我看到以下错误:
[javac] /home/ubuntu/aws-java-sdk-1.8.9.1/samples/AwsConsoleApp/build.xml:12:警告:' includeantruntime'没有设置,默认为build.sysclasspath = last;对于可重复的构建,设置为false [java] =========================================== [java]欢迎使用AWS Java SDK! [java] ===========================================
[java] Sep 09, 2014 9:26:49 PM com.amazonaws.http.AmazonHttpClient executeHelper
[java] INFO: Unable to execute HTTP request: Connect to ec2.us-east-1.amazonaws.com:443 timed out
[java] org.apache.http.conn.ConnectTimeoutException: Connect to ec2.us-east-1.amazonaws.com:443 timed out
[java] at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:551)
[java] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
[java] at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
[java] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
[java] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
[java] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
[java] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
[java] at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:464)
[java] at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:273)
[java] at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:9320)
[java] at com.amazonaws.services.ec2.AmazonEC2Client.describeAvailabilityZones(AmazonEC2Client.java:359)
[java] at com.amazonaws.services.ec2.AmazonEC2Client.describeAvailabilityZones(AmazonEC2Client.java:8045)
[java] at AwsConsoleApp.main(Unknown Source)
[java]
我发现这与亚马逊如何提供对其EC2Metadata服务的访问权限相反。
有没有办法在不提供AWS实例公共IP的情况下运行这些Java程序?
答案 0 :(得分:2)
您需要互联网连接,但不需要通过分配给运行代码的实例的公共IP。
公共IP可以位于NAT实例上,允许您的VPC中的其他计算机访问Internet,但不允许Internet上的系统访问您的私有实例。
您启动到虚拟私有云(VPC)中的私有子网的实例无法与Internet通信。您可以选择在VPC的公有子网中使用网络地址转换(NAT)实例,以使私有子网中的实例能够启动到Internet的出站流量,但阻止实例接收Internet上某人发起的入站流量。 / p>
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html
另见https://stackoverflow.com/a/22212017/1695906有关" private"的其他讨论。 vs" public"子网,NAT实例和路由。