Как я могу решить эту проблему дальше? Я пытаюсь запустить простой контейнер nginx, но балансировщик нагрузки жалуется, что проверки работоспособности не выполнены, и задача не отвечает на свой IP-адрес, вероятно, из-за ошибки балансировщика нагрузки.
Я установил для задачи приоритет 2 в облачной информации. Если я попытаюсь установить приоритет на 1, стек CF не сможет развернуться. Может это как-то связано?
# Create a rule on the load balancer for routing traffic to the target group
LoadBalancerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Properties:
Actions:
- TargetGroupArn: !Ref 'TargetGroup'
Type: 'forward'
Conditions:
- Field: path-pattern
Values: [!Ref 'Path']
ListenerArn:
Fn::ImportValue: !Ref LoadBalancerListener
Priority: !Ref 'Priority'
Ресурсы выглядят так:
Resources:
# The task definition. This is a simple metadata description of what
# container to run, and what resource requirements it has.
TaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: nginx
Cpu: 256
Memory: 512
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
ContainerDefinitions:
- Name: nginx
Cpu: 128
Memory: 256
Image: nginx
PortMappings:
- ContainerPort: 80
Service:
Type: AWS::ECS::Service
DependsOn: LoadBalancerRule
Properties:
ServiceName: !Ref 'ServiceName'
Cluster:
Fn::ImportValue: !Ref EcsCluster
LaunchType: FARGATE
DeploymentConfiguration:
MaximumPercent: 200
MinimumHealthyPercent: 75
DesiredCount: !Ref 'DesiredCount'
NetworkConfiguration:
AwsvpcConfiguration:
AssignPublicIp: ENABLED
SecurityGroups:
- !Ref EcsHostSecurityGroup
Subnets:
- !ImportValue core-vpc-PublicSubnet1AID
- !ImportValue core-vpc-PublicSubnet1BID
TaskDefinition: !Ref 'TaskDefinition'
LoadBalancers:
- ContainerName: !Ref 'ServiceName'
ContainerPort: 80
TargetGroupArn: !Ref TargetGroup
TargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
HealthCheckIntervalSeconds: 6
HealthCheckPath: /
HealthCheckProtocol: HTTP
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 2
TargetType: ip
Name: !Ref 'ServiceName'
Port: !Ref 'ContainerPort'
Protocol: HTTP
UnhealthyThresholdCount: 2
VpcId: !ImportValue core-vpc-VPCID
# This security group defines who/where is allowed to access the ECS hosts directly.
# By default we're just allowing access from the load balancer. If you want to SSH
# into the hosts, or expose non-load balanced services you can open their ports here.
EcsHostSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !ImportValue core-vpc-VPCID
GroupDescription: Access to the ECS hosts and the tasks/containers that run on them
SecurityGroupEgress:
- CidrIp: 0.0.0.0/0
IpProtocol: "-1"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '443'
ToPort: '443'
CidrIp: 138.106.0.0/16
# Create a rule on the load balancer for routing traffic to the target group
LoadBalancerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Properties:
Actions:
- TargetGroupArn: !Ref 'TargetGroup'
Type: 'forward'
Conditions:
- Field: path-pattern
Values: [!Ref 'Path']
ListenerArn:
Fn::ImportValue: !Ref LoadBalancerListener
Priority: !Ref 'Priority'
Вы не включили фактический балансировщик нагрузки в свой шаблон. Пожалуйста, включите это, чтобы получить полный ответ.
Ваша проблема, скорее всего, заключается в том, что вашему балансировщику нагрузки, который, скорее всего, имеет частный IP-адрес в ваших подсетях и связывается с ним, не разрешено связываться с вашими экземплярами ECS, поскольку они разрешают трафик только от 138.106.0.0/16
.
Для других, которые могут столкнуться с той же проблемой:
Возможно, проблема связана с маршрутом, который вы настроили для проверки работоспособности.
Ваш настроенный маршрут должен возвращать success response(status : 200)
на ПОЛУЧИТЬ вызов.
Если "/"
это маршрут, который вы настроили для проверки работоспособности, убедитесь, что вы ПОЛУЧИТЬ позвонить yourwebsitename.com/
возвращает 200
код состояния.
Аналогично, если "/health-check"
вы настроили проверку работоспособности, убедитесь, что вы ПОЛУЧИТЬ позвонить yourwebsitename.com/health-check
возвращает 200
код состояния.