приложение amazon beanstalk tcp не отвечает


Я запускаю приложение NodeJS tcp на своем экземпляре aws linux ec2 . основной код приведен ниже

var net = require('net');
net.createServer(function(socket){
socket.write('hellon');

socket.on('data', function(data){
    socket.write(data.toString().toUpperCase())
  });
}).listen(8080);

И его запуск похож на charm, но я хотел запустить это же приложение в aws beanstalk (просто чтобы получить преимущество автоматического масштабирования). йа-йа, я не ниндзя aws. кстати, чтобы получить публичный ip в beanstalk, я использую aws VPC.

  1. приложение beanstalk подключается к VPC = проверено.
  2. порт VPC 8080 открыт = проверено .
  3. измените жестко закодированный порт 8080 на process.ОКР.ПОРТ = проверен.

Но если я пингую что-нибудь в порту 8080, это не возвращает "привет" из приложения. чего мне не хватает ?

1 4

1 ответ:

Ваше приложение не реализует протокол HTTP. ElasticBeanstalk по умолчанию настроит Elastic Load Balancer (ELB) для работы в качестве балансировщика нагрузки HTTP. Это означает, что ваш экземпляр не является работоспособным и не вводится в эксплуатацию ELB, а сам ELB также отклоняет запрос, не относящийся к HTTP.

Важное замечание: хотя можно было бы изменить ElasticBeanstalk для работы в вашем случае использования, вы собираетесь использовать его нестандартным способом, так что будут и некоторые риски. Если вы регулярно создаете и удаляете среды с помощью CloudFormation или API, то, скорее всего, столкнетесь с большой головной болью.

Если вы собираетесь просто создать среду и оставить ее запущенной, то я предлагаю вам предпринять следующие шаги.

Во-первых, конфигурация nodejs ElasticBeanstalk настроит сервер Nginx на экземпляре EC2, поскольку вы используете TCP, вы захотите полностью обойти это. Это можно сделать с помощью повторная настройка ELB и групп безопасности. Проще всего было бы просто оставить nginx запущенным, он просто не будет использоваться, просто убедитесь, что он не находится на том же порту, что и nodejs.

По умолчанию конфигурация ELB будет выглядеть следующим образом:

Стандартная конфигурация ELB для применения бобового стебля nodejs

Шаг, который вы пропустили, состоял в обновлении ELB для использования балансировки нагрузки TCP на соответствующих портах. Вы можете перейти в веб-консоль EC2 в разделе балансировщики нагрузки и обновить конфигурацию балансировщика нагрузки для уже созданных Бобовый стебель должен выглядеть так:

Конфигурация TCP для приложения NodeJS Beanstalk

Вы также захотите изменить проверку работоспособности балансировщика нагрузки, чтобы он был на правильном Порту:

Введите описание изображения здесь

Наконец, дважды проверьте, чтобы убедиться, что группы безопасности для обоих экземпляров балансировщика нагрузки и EC2 позволяют получить доступ к соответствующим портам. Последнее, что нужно проверить, но вы уже упомянули, что смотрели, - это то, что NaCl вашего VPC также позволяют получить доступ к соответствующим портам.