Не удается заставить 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 ответ
Когда вы не получаете сигнал об успехе, это может быть одной из двух вещей:
- Сигнал успеха никогда не отправлялся из экземпляра EC2
- Проблемы с сетью не позволили получить сигнал
Самый простой способ отладить эту проблему - подключиться к серверу EC2, чтобы вы могли проверять файлы журналов и запускать ручные тесты. Когда я говорю "подключиться", я имею в виду SSH для экземпляров Linux, RDP для окон и т. Д. Для этого требуется, чтобы экземпляр EC2 продолжал работать достаточно долго для устранения проблемы.
Способы поддержания его работоспособности во время устранения проблемы:
- Установите время ожидания в CreationPolicy, чтобы оно было больше.
- Удалите CreationPolicy, чтобы CloudFormation не завершалась ошибкой, если не было отправлено сообщение об успехе.
- Запустите свой стек с атрибутом OnFailure DO_NOTHING вместо значения по умолчанию ROLLBACK.
Существует несколько проблем, которые могут привести к сбою сетевого подключения, препятствующему получению сигнала об успешном завершении.
Скорее всего, в этом случае SubnetRouteTableAssociation отсутствует. Если вы не связываете свою подсеть с таблицей маршрутов, тогда подсеть будет использовать таблицу маршрутов по умолчанию. Значение по умолчанию не будет связано с вашим интернет-шлюзом или NAT-шлюзом, если вы не настроите его вручную. Я предполагаю, что вы не настраивали таблицу маршрутов по умолчанию вручную, так как пытаетесь использовать CloudFormation, чтобы избежать ручных изменений.
Вот некоторые другие возможности, по которым невозможно установить сетевое соединение:
- Сетевые ACL-списки настроены таким образом, что они блокируют либо исходящие пакеты, либо входящие пакеты для попытки подключения. Любой из них будет препятствовать отправке данных успешным TCP-соединением.
- Группа безопасности EC2 настроена на предотвращение исходящего сетевого трафика.
- Экземпляр EC2 использует гигантские кадры (большой сетевой MTU), но сервер или маршрутизатор в сети его не поддерживают, и вы блокируете пакеты ICMP, которые сообщают вашему экземпляру EC2 о необходимости настроить его MTU. (Вряд ли, но случилось со мной однажды)