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.
- приложение beanstalk подключиться к VPC = проверено.
- Порт VPC 8080 открыт = проверено.
- измените жестко заданный порт 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 для использования балансировки нагрузки TCP на соответствующих портах. Вы можете зайти в веб-консоль EC2 в разделе "Балансировщики нагрузки" и обновить конфигурацию балансировщика нагрузки для уже созданного Beanstalk, чтобы он выглядел следующим образом:
Вы также захотите изменить проверку работоспособности балансировщика нагрузки, чтобы он находился на правильном порту:
Наконец, проверьте еще раз, чтобы убедиться, что группы безопасности для экземпляров балансировщика нагрузки и EC2 разрешают доступ к соответствующим портам. Последнее, что нужно проверить, но вы уже упомянули, что смотрели, это то, что NACL вашего VPC также позволяют осуществлять доступ к соответствующим портам.