Назад | Перейти на главную страницу

AWS Elastic Beanstalk Health Check на альтернативном порту с помощью Application Elastic Load Balancer

Я пытаюсь автоматизировать настройку своего приложения 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.