Я пытаюсь автоматизировать настройку своего приложения Elastic Beanstalk, используя Сохраненные конфигурации.
Есть ли у кого-нибудь пример того, как заставить балансировщик нагрузки приложения, созданный из Elastic Beanstalk, использовать другой порт проверки работоспособности?
Если нет, есть ли способ получить доступ к базовому ресурсу, чтобы я мог применить настраиваемый HealthCheckPort: 8081
в целевую группу?
Подробности и попытки на сегодняшний день:
Приложение представляет собой простое приложение Java на основе DropWizard, которое предоставляет API-интерфейсы HTTP на порту 8080 и API проверки работоспособности на порту 8081.
Мне удалось настроить среду с помощью Classic ELB с помощью следующих OptionSettings:
OptionSettings:
aws:elasticbeanstalk:environment:
EnvironmentType: LoadBalanced
LoadBalancerType: classic
aws:elasticbeanstalk:application:
Application Healthcheck URL: HTTP:8081/healthcheck
aws:elasticbeanstalk:environment:process:default:
MatcherHTTPCode: '200'
Port: '8080'
Protocol: HTTP
aws:elb:healthcheck:
HealthyThreshold: '3'
Interval: '10'
Timeout: '5'
UnhealthyThreshold: '5'
aws:elb:listener:80:
ListenerProtocol: HTTP
InstancePort: '8080'
InstanceProtocol: HTTP
ListenerEnabled: true
aws:elb:loadbalancer:
CrossZone: true
Однако, когда я обновляю конфигурацию для использования приложения ELB, проверка работоспособности, связанная с целевой группой, устанавливается на порт приложения (8080), а не на порт проверки работоспособности (8081). Это приводит к тому, что приложение запускается в состоянии сбоя, которое можно исправить, только вручную изменив порт проверки работоспособности целевой группы.
OptionSettings:
aws:elasticbeanstalk:environment:
EnvironmentType: LoadBalanced
LoadBalancerType: application
aws:elasticbeanstalk:application:
Application Healthcheck URL: HTTP:8081/healthcheck
aws:elasticbeanstalk:environment:process:default:
MatcherHTTPCode: '200'
Port: '8080'
Protocol: HTTP
aws:elbv2:listener:default:
DefaultProcess: default
ListenerEnabled: true
Protocol: HTTP
aws:elbv2:loadbalancer:
AccessLogsS3Enabled: false
IdleTimeout: '60'
Я не могу найти другие соответствующие поля в документации по параметрам команды AWS Elastic Beanstalk.
Я также думал о том, чтобы сделать пользовательские модификации ресурсов, но упоминается только ELB AWSEBLoadBalancer
типа AWS::ElasticLoadBalancing::LoadBalancer
который является классическим балансировщиком нагрузки, но изменения, которые мне нужно внести, находятся в типе AWS::ElasticLoadBalancingV2::TargetGroup
для балансировщика нагрузки приложений.
Используйте Terraform или CloudFormation для управления необходимым балансировщиком нагрузки, экземплярами EC2 и другими ресурсами. Хотя это требует больше предварительной работы, чем ElasticBeanstalk, можно точно контролировать каждый аспект ваших ресурсов. Установка программного обеспечения и настройка экземпляра из .ebextensions
можно заменить на AWS::CloudFormation::Init
и AWS cfn-init
вспомогательный скрипт.
Я также рекомендую тропосфера для создания шаблонов CloudFormation. Синтаксис сопоставляет 1 к 1 синтаксису ресурсов CloudFormation, но будет генерировать ошибки для имен свойств с ошибками или недопустимых типов свойств. В сочетании с boto
можно было полностью автоматизировать жизненный цикл развертывания моего приложения с помощью простых утилит командной строки python.