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