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

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

var net = require('net');
net.createServer(function(socket){
socket.write('hello\n');

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

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

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

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

1 ответ

Решение

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

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

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

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

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

Стандартная конфигурация ELB для приложения Beanstalk nodejs

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

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

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

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

Другие вопросы по тегам