#amazon-web-services #amazon-ec2 #aws-security-group #aws-load-balancer
#amazon-web-services #amazon-ec2 #aws-security-group #aws-балансировщик нагрузки
Вопрос:
В настоящее время я изучаю AWS, следуя курсу Pluralsight AWS Developer: начало работы. В рамках этого курса приложение nodejs (приложение для создания пиццы) необходимо развернуть в AWS. Это приложение работает на экземпляре EC2, и когда мы создаем новую пиццу и нажимаем создать, файл png будет сохранен в корзину S3 (код, запущенный в экземпляре EC2, будет записан в S3).
Когда я запускал это приложение с URL-адресом балансировщика нагрузки, приложение загружалось, и когда я пытаюсь сохранить только что созданную пиццу (изображение в формате png), веб-страница зависает, а файл не сохраняется в s3.
Но, если я свяжу эластичный IP-адрес с одним из экземпляров в целевой группе, файл будет правильно сохранен в S3.
Что касается разрешений для экземпляра EC2, у группы безопасности есть только балансировщик нагрузки, отличный от SSH.
А EC2 имеет полную роль доступа к S3.
Но, тем не менее, приложение работает, только если связан эластичный IP, даже если эластичный IP непригоден для использования (поскольку целевая группа EC2 security group имеет доступ только к балансировщику нагрузки, кроме SSH)
Почему эластичный IP необходим в этом случае для правильного поведения.
Редактировать: дополнительная информация:
Сегмент S3: предоставляется полный общедоступный доступ.
Приведенные ниже PUT
разрешенные методы могут быть недействительными. В качестве следа и ошибки я предоставил это.
Моя конфигурация маршрута подсети. Я думал, что это общедоступная подсеть. Пожалуйста, поправьте меня, если я ошибаюсь.
Мое предположение: я могу быть совершенно неправ, но я понимаю, что моя подсеть является общедоступной подсетью, и мои экземпляры ec2 создаются в этой подсети. Экземпляр EC2 (с полной ролью доступа s3) имеет код для записи файлов PNG в S3 с вышеуказанными настройками (все общедоступные, согласно моему пониманию).
Следовательно, я ожидаю, что этот ec2 должен записать файл в S3 без эластичного IP.
Но понятно, что если включено автоматическое назначение IP-адресов, он находится в точно таком же состоянии, в каком я назначаю эластичные IP-адреса вручную EC2, и, следовательно, этот сценарий работает.
Я понял, что каждому экземпляру EC2 будет присвоен другой общедоступный IP-адрес после включения автоматического назначения IP-адресов. Подходит ли этот метод для таких требований?
Назначение нескольких общедоступных IP-адресов, даже если они не используются (означает, что для доступа к приложению, не являющемуся общедоступным IP, будет использоваться только браузер URL-адреса балансировщика нагрузки), будет стоить больше денег?
Ответ №1:
Обычно существует три способа, с помощью которых ваш экземпляр может получить доступ к S3 для загрузки вашего файла pizza:
- Подключитесь к общедоступной конечной точке S3. Это означает, что ваш экземпляр должен иметь возможность подключаться к этой конечной точке через Интернет. Если ваш экземпляр находится в общедоступной подсети с автоматически назначенными общедоступными IP-адресами, тогда это работает из коробки. Если ваш экземпляр не получает автоматически назначенный общедоступный IP-адрес, вы можете использовать эластичный IP-адрес для получения общедоступного IP-адреса для вашего экземпляра.
- Подключитесь к общедоступной конечной точке S3 с помощью шлюза NAT. Это полезно, когда ваш экземпляр находится в частной подсети, без прямого доступа к Интернету или каких-либо общедоступных IP-адресов.
- Используйте шлюз VPC S3. Это позволяет полностью приватно подключаться к S3 без необходимости какого-либо доступа в Интернет.
Похоже, что в вашем описании указано, что к вам применим вариант 1.
Могут быть и другие возможности, например, в корзине S3 есть политика корзины, которая разрешает загрузку только с IP-адресов из белого списка или диапазонов IP-адресов. Таким образом, возможно, ваш эластичный IP-адрес занесен в белый список, а другие IP-адреса — нет.
Комментарии:
1. Спасибо @Marcin за ваш ответ. Я понял вас # 1. Просто чтобы еще раз подтвердить случай, я внес некоторые изменения в описание вопроса. И не могли бы вы ответить на вопрос в конце редактирования.
Ответ №2:
это потому, что ваш экземпляр не получает доступ к Интернету.
ваш экземпляр получит доступ к Интернету, если у него есть общедоступный IP (или EIP), и он находится в общедоступной подсети, и вы добавили «Интернет-шлюз».
похоже, вы не можете назначить общедоступный IP-адрес .. для назначения выполните следующие действия:
Выберите свою подсеть и выберите Действия подсети, измените параметры автоматического назначения IP. Затем включите автоматическое назначение общедоступного IPv4-адреса
если вы не можете настроить общедоступный IP-адрес, свяжите с ним EIP..
или
если вы хотите получить доступ к Интернету без общедоступного IP-адреса, необходимо использовать «Шлюз NAT»
или
если вы хотите сохранить файл в s3, не выходя из сети AWS (без Интернета), используйте конечную точку VPC для S3
Комментарии:
1. Спасибо @Ravindra Bagale за ваш ответ.
your instance will get access to internet if it having public IP ( or EIP) and it is in Public subnet and you have added "Internet Gateway"
. Это информация, которую я ищу. Я отредактировал вопрос с дополнительной информацией. Не могли бы вы ответить на это в конце редактирования.