Проверки работоспособности целевой группы CloudFormation непоследовательны - PullRequest
0 голосов
/ 20 июня 2020

У меня есть шаблон AWS CloudFormation, который создает Application Load Balancer, который направляет трафик c в целевую группу, состоящую из двух запущенных экземпляров Apache.

Иногда, когда я создаю стек, работоспособность чеки в порядке, как показано ниже: enter image description here

But other times, when I create the stack using the exact same template, one or both of the health checks fail: введите описание изображения здесь

Часть шаблона, которая создает ALB и экземпляры:

Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    DependsOn: 
      - Ec2InstanceA
      - Ec2InstanceB
    Properties:
      IpAddressType: ipv4
      Scheme: internet-facing
      SecurityGroups:
        - !Ref InstanceSecurityGroup
      Subnets:
        - !Ref PublicSubnetA
        - !Ref PublicSubnetB
      Tags:
        - Key: Name
          Value: !Sub ${AWS::StackName}-ALB
      Type: application
  Listener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref MyTargetGroup
      LoadBalancerArn: !Ref MyApplicationLoadBalancer
      Port: '80'
      Protocol: HTTP

  MyTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties: 
      HealthCheckEnabled: true
      Port: 80
      Protocol: HTTP
      VpcId: !Ref VPC
      Targets: 
        - Id: !Ref Ec2InstanceA
        - Id: !Ref Ec2InstanceB
      TargetType: instance
  
  Ec2InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0323c3dd2da7fb37d
      KeyName: KeyPair
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet:
            - Ref: InstanceSecurityGroup
          SubnetId:
            Ref: PrivateSubnetA
      UserData:
        Fn::Base64:                                
          !Sub |
              #!/bin/bash -ex
              sudo yum install -y httpd;
              sudo echo "<html><h1>Hello CloudFormation A!!<h1></html>" > /var/www/html/index.html;
              cd /var/www/html;
              sudo chmod 755 index.html;
              sudo service httpd start;
              sudo chkconfig httpd on;
  Ec2InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0323c3dd2da7fb37d
      KeyName: KeyPair
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet:
            - Ref: InstanceSecurityGroup
          SubnetId:
            Ref: PrivateSubnetB
      UserData:
        Fn::Base64:                               
          !Sub |
              #!/bin/bash -ex
              sudo yum install -y httpd;
              sudo echo "<html><h1>Hello CloudFormation B!!<h1></html>" > /var/www/html/index.html;
              cd /var/www/html;
              sudo chmod 755 index.html;
              sudo service httpd start;
              sudo chkconfig httpd on;

Я предполагаю, что это какая-то проблема с синхронизацией ресурсов, но я не совсем уверен .

Ответы [ 2 ]

0 голосов
/ 29 июня 2020

, если вы используете автомасштабирование, добавьте эту строку в конец ваших пользовательских данных cfn-signal --exit-code $? --resource !!!AutoScalingGroup!!! --stack ${AWS::StackName} --region ${AWS::Region}, чтобы ваши серверы могли отправлять информацию о статусе на AWS, когда UserData завершается без ошибок.

allsow, как написал @Marcin, попробуйте использовать CreationPolicy, чтобы AWS знал, как долго ждать хорошего сигнала, в данном случае 10 минут, а если сигнала нет в течение 10 минут, AWS завершит работу вашего экземпляра и попытается снова.

Type: AWS::AutoScaling::AutoScalingGroup
CreationPolicy:
  ResourceSignal:
    Count: 2 --> DesiredCapacity number
    Timeout: 'PT10M'--> Time in minutes

на некоторых AWS ami-s CFN tool не установлен, поэтому для установки CFN signal tool используйте:

sudo apt-get install -y python3 python python3-pip python-pip
sudo pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz
0 голосов
/ 21 июня 2020

Обычно, когда вы bootstrap свои экземпляры, хорошая практика заключается в использовании cfn-signal вместе с политикой создания для ваших экземпляров.

Это гарантирует, что CloudFormation пометит ваши экземпляры как успешно созданные только тогда, когда UserData завершится без ошибок. Это также заставляет ждать, пока это не произойдет.

Следовательно, когда ALB запускает проверку работоспособности ваших экземпляров, вы точно знаете, что UserData выполнено успешно и ваш apache сервер запущен и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...