Подключение с Java к экземплярам Amazon EC2
Я написал клиент-серверное приложение на Java и хочу запустить его в Amazon EC2 Ubuntu instacnes. Клиент работает на экземпляре EC2, а сервер на одном и третьем экземпляре EC2 предназначен для размещения базы данных postgreSQL. У меня есть несколько вопросов, касающихся сетевого подключения, и надеюсь, что кто-нибудь может помочь.:)
Я знаю, что мне нужно использовать общедоступный DNS для подключения клиента к серверу. Могу ли я просто использовать
socket = new Socket(host, port);
с хостом публичный DNS в виде строки или я должен использовать что-то вродеInetAddress address = InetAddress.getByName(host);
?Какие порты мне разрешено использовать? Сокет будет прослушивать этот порт.
Нужно ли настраивать что-то еще для экземпляра EC2, чтобы получить соединение?
На одном экземпляре EC2 я установлю postgreSQL. Я думаю, что я просто могу установить его, как с обычным Ubuntu. Могу ли я затем просто подключиться к базе данных, используя общедоступный DNS из экземпляра EC2 и порт, который я установил в postgreSQL, или мне нужно настроить другие параметры?
1 ответ
В общем, лучше избегать такого рода вопросов. Трудно дать однозначный ответ на четыре вопроса в одном, особенно с не полностью совпадающими областями знаний. Тем не менее, лучшее усилие:
Установление соединений через сокет TCP в EC2 такое же, как и вне его. Все, что вы делаете в обычной сети TCP/IP, вы делаете то же самое в ETC.
Единственное отличие заключается в том, что вы находитесь за пределами вашего кода, и это тот факт, что в пределах области EC2 имена узлов для других узлов в этом регионе разрешаются как внутренние IP-адреса, а за пределами этого региона они разрешаются как публичные IP-адреса.
Обычно это именно то, что вы хотите, чтобы происходило автоматически, и вам вообще ничего не нужно менять.
Вы можете использовать любой порт, который вам нравится, если вы разрешите его в своих группах безопасности. EC2 ничем не отличается от всего этого здесь. Применяются обычные правила, например, в большинстве систем unix/linux порты 1024 и ниже зарезервированы для root.
Экземпляры EC2-classic всегда могут подключаться к Интернету для исходящих подключений.
Чтобы соединяться друг с другом и получать входящие соединения из более широкого Интернета, необходимо добавить параметры группы безопасности, которые позволяют другим группам безопасности и / или IP-адресам подключаться. См. Документацию EC2 по группам безопасности.
Для экземпляров VPC вы настраиваете группы безопасности VPC, и у вас также есть правила маршрутизации подсети. Для получения дополнительной информации см. Документацию по VPC. EC2-classic все чаще считается устаревшим в пользу VPC, поэтому стоит начать с VPC с одной подсетью и общедоступными IP-адресами по умолчанию, а не с EC2 classic.
Используйте имя хоста (да, "общедоступный DNS"), а не IP-адрес, чтобы подключиться к экземпляру, на котором работает PostgreSQL. Он будет преобразован во внутренний IP-адрес при подключении из другого экземпляра EC2 в том же регионе, что и должно происходить, поэтому ваш трафик не измеряется как интернет-трафик.
Вам нужно настроить группу безопасности для экземпляра, чтобы разрешить входящие соединения через порт. Если в хост-системе установлен брандмауэр, вам также необходимо разрешить подключения через него. Наконец, вам нужно установить PostgreSQL
listen_addresses
поэтому он на самом деле принимает соединения с нелокальных адресов.
Я настоятельно советую вам изучить некоторые учебные материалы и документацию по EC2, прежде чем пытаться сделать это. Поиграйте с некоторыми микроэкземплярами и привыкните к работе с группами безопасности, разделением публичного и частного DNS и т. Д.