【问题标题】:Running AWS Java SDK code without public ip在没有公共 ip 的情况下运行 AWS Java SDK 代码
【发布时间】:2014-11-03 11:01:51
【问题描述】:

我们是否需要互联网连接才能在 AWS 的实例中使用 AWS Java SDK?

我有一个在 VPC 中运行的实例,我没有为其分配任何公共 IP 地址。

根据我最初的调查发现,我发现要从亚马逊的这个实例运行基于 AWS Java 开发工具包的 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 开发工具包! [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 程序?

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 amazon-vpc


    【解决方案1】:

    您需要 Internet 连接,但不需要通过分配给运行代码的实例的公共 IP。

    公共 IP 可以在 NAT 实例上,它允许您 VPC 中的其他机器访问 Internet,但不允许 Internet 上的系统访问您的私有实例。

    您在 Virtual Private Cloud (VPC) 中的私有子网中启动的实例无法与 Internet 通信。您可以选择在您的 VPC 的公有子网中使用网络地址转换 (NAT) 实例,以使私有子网中的实例能够发起到 Internet 的出站流量,但阻止实例接收由 Internet 上的某人发起的入站流量。

    http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html

    有关“私有”与“公共”子网、NAT 实例和路由的更多讨论,另请参阅 https://stackoverflow.com/a/22212017/1695906

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多