Не удается заставить CloudFormation AutoScalingGroup работать

Я пытаюсь создать AutoScalingGroup для EC2. Я продолжаю получать следующую ошибку:

Получено 0 сигналов УСПЕХА из 1. Невозможно удовлетворить требование 100% MinSuccessfulInstancesPercent

Экземпляр EC2 создается, но он не получает общедоступный IP-адрес или DNS.

Я нашел эту другую ветку об этой же проблеме, и в одном из ответов упоминается: "Убедитесь, что подсети, в которых будут установлены экземпляры AutoScalingGroup, могут подключаться к Интернету с использованием либо шлюза NAT, либо шлюза Интернета". Я считаю, что это проблема, однако я не уверен, как ее решить.

У моего VPC уже есть интернет-шлюз, но я не уверен, как сказать моей группе AutoScaling использовать его.

  PrivateSubnetOne:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      MapPublicIpOnLaunch: false
      CidrBlock: !Ref PrivateSubnetOneCidr
      AvailabilityZone:
        Fn::Select:
        - '0'
        - Fn::GetAZs: ''

  PrivateSubnetTwo:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      MapPublicIpOnLaunch: false
      CidrBlock: !Ref PrivateSubnetTwoCidr
      AvailabilityZone:
        Fn::Select:
        - '1'
        - Fn::GetAZs: ''

  WebServerAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    DependsOn:
    - Db
    - ElasticacheCluster
    Properties:
      AvailabilityZones:
      - !GetAtt PrivateSubnetOne.AvailabilityZone
      - !GetAtt PrivateSubnetTwo.AvailabilityZone
      DesiredCapacity: 1
      HealthCheckType: 'ELB'
      HealthCheckGracePeriod: '300'
      MinSize: '1'
      MaxSize: '10'
      LaunchConfigurationName: !Ref WebServer
      LoadBalancerNames:
      - !Ref WebServerElasticLoadBalancer
      VPCZoneIdentifier:
      - !Ref PrivateSubnetOne
      - !Ref PrivateSubnetTwo
      Tags:
      - Key: Name
        Value: Web Server
        PropagateAtLaunch: true
    CreationPolicy:
      ResourceSignal:
        Timeout: PT5M
        Count: 1
    UpdatePolicy:
      AutoScalingRollingUpdate:
        MinInstancesInService: 1
        MaxBatchSize: '1'
        PauseTime: PT5M
        WaitOnResourceSignals: 'true'

1 ответ

Когда вы не получаете сигнал об успехе, это может быть одной из двух вещей:

  1. Сигнал успеха никогда не отправлялся из экземпляра EC2
  2. Проблемы с сетью не позволили получить сигнал

Самый простой способ отладить эту проблему - подключиться к серверу EC2, чтобы вы могли проверять файлы журналов и запускать ручные тесты. Когда я говорю "подключиться", я имею в виду SSH для экземпляров Linux, RDP для окон и т. Д. Для этого требуется, чтобы экземпляр EC2 продолжал работать достаточно долго для устранения проблемы.

Способы поддержания его работоспособности во время устранения проблемы:

  1. Установите время ожидания в CreationPolicy, чтобы оно было больше.
  2. Удалите CreationPolicy, чтобы CloudFormation не завершалась ошибкой, если не было отправлено сообщение об успехе.
  3. Запустите свой стек с атрибутом OnFailure DO_NOTHING вместо значения по умолчанию ROLLBACK.

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

Скорее всего, в этом случае SubnetRouteTableAssociation отсутствует. Если вы не связываете свою подсеть с таблицей маршрутов, тогда подсеть будет использовать таблицу маршрутов по умолчанию. Значение по умолчанию не будет связано с вашим интернет-шлюзом или NAT-шлюзом, если вы не настроите его вручную. Я предполагаю, что вы не настраивали таблицу маршрутов по умолчанию вручную, так как пытаетесь использовать CloudFormation, чтобы избежать ручных изменений.

Вот некоторые другие возможности, по которым невозможно установить сетевое соединение:

  1. Сетевые ACL-списки настроены таким образом, что они блокируют либо исходящие пакеты, либо входящие пакеты для попытки подключения. Любой из них будет препятствовать отправке данных успешным TCP-соединением.
  2. Группа безопасности EC2 настроена на предотвращение исходящего сетевого трафика.
  3. Экземпляр EC2 использует гигантские кадры (большой сетевой MTU), но сервер или маршрутизатор в сети его не поддерживают, и вы блокируете пакеты ICMP, которые сообщают вашему экземпляру EC2 о необходимости настроить его MTU. (Вряд ли, но случилось со мной однажды)
Другие вопросы по тегам