Verificação de integridade do AWS Elastic Beanstalk na porta alternativa usando o Application Elastic Load Balancer

3

Estou tentando automatizar a configuração do meu aplicativo Elastic Beanstalk usando salvo Configs .

Alguém tem um exemplo de como obter o balanceador de carga de aplicativo criado a partir do Elastic Beanstalk para usar uma porta de verificação de integridade diferente?

Se não, existe uma maneira de acessar o recurso subjacente para que eu possa aplicar um HealthCheckPort: 8081 personalizado ao Grupo-alvo?

Detalhes e tentativas até a data:

O aplicativo é um aplicativo Java simples baseado no DropWizard, que fornece APIs HTTP na porta 8080, e uma API de verificação de integridade na porta 8081.

Tive sucesso na configuração do ambiente usando um ELB clássico por meio das seguintes opções:

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

No entanto, quando atualizo a configuração para usar um ELB de Aplicativo, a verificação de integridade associada ao grupo de destino é definida como a porta do aplicativo (8080) e não a porta de verificação de integridade (8081). Isso faz com que o aplicativo inicie em um estado de falha, que só pode ser corrigido alterando manualmente a porta de verificação de integridade do Grupo-alvo.

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'

Não consigo encontrar outros campos relevantes na documentação das opções de comando do AWS Elastic Beanstalk.

Eu também pensei em fazer modificações de recursos personalizados , mas o único ELB mencionado é AWSEBLoadBalancer do tipo AWS::ElasticLoadBalancing::LoadBalancer , que é um balanceador de carga clássico, mas a modificação que preciso fazer está no tipo AWS::ElasticLoadBalancingV2::TargetGroup para o balanceador de carga do aplicativo.

    
por J Messenger 08.03.2017 / 20:27

1 resposta

1

Use o Terraform ou o CloudFormation para gerenciar o Load Balancer, as instâncias do EC2 e outros recursos necessários. Embora exija mais trabalho inicial do que o ElasticBeanstalk, é possível controlar com precisão todos os aspectos de seus recursos. A instalação de software e a configuração da instância de .ebextensions podem ser substituídas por AWS::CloudFormation::Init e pelo script de ajuda cfn-init da AWS.

Também recomendarei troposphere para gerar modelos do CloudFormation. A sintaxe mapeia 1-para-1 na sintaxe de recurso do CloudFormation, mas gerará erros para nomes de propriedade com erros ortográficos ou tipos de propriedade inválidos. Combinado com boto , foi possível automatizar totalmente o ciclo de vida de implantação do meu aplicativo com utilitários simples de linha de comando do Python.

    
por 30.05.2017 / 19:13