![使用 Java 连接到 Amazon EC2 实例](https://linux22.com/image/643506/%E4%BD%BF%E7%94%A8%20Java%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20Amazon%20EC2%20%E5%AE%9E%E4%BE%8B.png)
我用 Java 编写了一个客户端-服务器应用程序,我想在 Amazon EC2 Ubuntu 实例上运行它。客户端在一个 EC2 实例上运行,服务器在一个实例上运行,第三个 EC2 实例用于托管 postgreSQL 数据库。我对网络连接有一些疑问,希望有人能帮忙。:)
我知道我必须使用公共 DNS 从客户端连接到服务器。我是否可以将
socket = new Socket(host, port);
公共 DNS 作为字符串与主机一起使用,还是必须使用类似的东西InetAddress address = InetAddress.getByName(host);
?我可以使用哪些端口?套接字将监听此端口。
我是否必须为 EC2 实例配置其他东西才能获得连接?
我将在一个 EC2 实例上安装 postgreSQL。我认为我可以像使用普通 Ubuntu 一样安装它。然后我是否可以使用 EC2 实例中的公共 DNS 和我在 postgreSQL 中设置的端口连接到数据库,还是必须进行其他设置?
答案1
一般来说,最好避免这种多问问题。很难一次性对四个问题给出明确的答案,尤其是在专业领域不完全重叠的情况下。不过,还是尽最大努力:
在 EC2 内部和外部建立 TCP 套接字连接的方式相同。在 ETC 中,您在常规 TCP/IP 网络中所做的一切操作都是一样的。
唯一的区别在于你的代码之外,那就是在 EC2 区域内,该区域内其他节点的主机名解析为内部 IP,而在区域外,它们解析为公共 IP。
这通常只是您希望自动发生的事情,而且通常您不需要更改任何内容。
只要您的安全组允许,您就可以使用任何您喜欢的端口。EC2 与这里的其他端口没有什么不同。适用通常的规则,例如,在大多数 unix/linux 系统上,端口 1024 及以下是为 root 保留的。
EC2-classic 实例始终可以连接到 Internet 以进行出站连接。
要相互连接并接收来自更广泛互联网的入站连接,您必须添加允许其他安全组和/或 IP 地址连接的安全组设置。请参阅有关安全组的 EC2 文档。
对于 VPC 实例,您可以配置 VPC 安全组,并且还可以设置子网路由规则。有关详细信息,请参阅VPC 文档。EC2-classic 越来越多地被弃用,取而代之的是 VPC,因此可能值得从具有默认公共 IP 地址的单子网 VPC 开始,而不是从 EC2 classic 开始。
使用主机名(是的,“公共 DNS”)而不是 IP 地址来连接到运行 PostgreSQL 的实例。当从同一区域的另一个 EC2 实例连接时,它将解析为内部 IP 地址,这正是您想要发生的,这样您的流量就不会被计量为互联网流量。
您必须为实例配置安全组以允许端口上的传入连接。如果主机操作系统有防火墙,您也需要允许通过防火墙进行连接。最后,您需要设置 PostgreSQL,
listen_addresses
以便它实际上接受来自非本地地址的连接。
我强烈建议你学习一些EC2 教程和文档在尝试之前,请先阅读相关材料。尝试一些微型实例,并习惯使用安全组、分离公共/私有 DNS 安排等。