В моем предыдущем посте я показал, как запускать приложение Spring Boot в AWS с помощью AWS Elastic Beanstalk . В этом посте я упоминаю, что можно обойти экземпляр Nginx по умолчанию на экземпляре EC2, и Elastic Load Balancer может напрямую взаимодействовать с пользовательским портом на ваших экземплярах EC2. В этом посте я покажу, как этого добиться.
Первый шаг — разрешить моему приложению Spring Boot прослушивать порт 8888 вместо 5000. Для этого просто измените следующую строку в файле application.yml:
1
2
3
4
|
... server: port: 8888 ... |
Когда мы сейчас развернем приложение с Elastic Beanstalk, оно больше не будет работать, и мы снова увидим 502 Bad Gateway.
Чтобы изменить порты Elastic Load Balancer (и соответствующие группы безопасности ), я добавляю папку «.ebextensions» в мой проект Spring Boot. В эту папку я поместил файлы конфигурации, которые будут использоваться Elastic Beanstalk для настройки ресурсов, которые он создает. Поскольку я развертываю свое приложение как файл jar и использую Maven для его создания, я добавляю папку в папку «main / resources», чтобы она оказалась в корне файла jar.
Первый файл, который я добавляю, это тот, который настраивает группу безопасности:
1
2
3
4
5
6
7
8
9
|
Resources: securityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: { "Fn::GetAtt" : [ "AWSEBSecurityGroup" , "GroupId" ]} IpProtocol: tcp ToPort: 8888 FromPort: 8888 SourceSecurityGroupName: { "Fn::GetAtt" : [ "AWSEBLoadBalancer" , "SourceSecurityGroup.GroupName" ]} |
Как видите, я добавляю входящий порт 8888 в группу безопасности «по умолчанию», в качестве разрешенного источника трафика используется Elastic Loadbalancer. Таким образом, порт 8888 доступен только от Elastic Load Balancer.
Следующий файл настроит Elastic Load Balancer, чтобы он перенаправлял входящий трафик через порт 80 на 8888 в нашем экземпляре EC2:
01
02
03
04
05
06
07
08
09
10
11
12
|
Resources: AWSEBLoadBalancer: Type: "AWS::ElasticLoadBalancing::LoadBalancer" Properties: Listeners: - {LoadBalancerPort: 80, InstanceProtocol: "TCP" , InstancePort: 8888, Protocol: "TCP" } HealthCheck: HealthyThreshold: "3" Interval: "30" Target: "HTTP:8888/hello" Timeout: "5" UnhealthyThreshold: "5" |
Как вы можете видеть, HealthCheck изменен, поскольку наш экземпляр EC2 теперь прослушивает порт 8888. После добавления этих файлов моя папка ресурсов выглядит следующим образом:
Когда мы перекомпилируем приложение и выполним ‘eb create’ с этими настройками, оно создаст Elastic Beanstalk со следующей группой безопасности:
И Elastic Load Balancer содержит следующий слушатель:
Таким образом, в этой конфигурации наш Elastic Load Balancer напрямую общается с нашими экземплярами EC2 и минует Nginx, работающий на порте 80.
Ссылка: | Конфигурирование Elastic Load Balancer для вашего приложения Elastic Beanstalk от нашего партнера JCG Паскаля Альмы в блоге Pragmatic Integrator . |