Задача AWS Fargate не проходит проверку работоспособности ELB
Как я могу устранить неисправность дальше? Я пытаюсь запустить простой контейнер 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'
1 ответ
Вы не включили фактический балансировщик нагрузки в свой шаблон. Пожалуйста, включите это, для полного ответа.
Скорее всего, ваша проблема заключается в том, что ваш балансировщик нагрузки - который, скорее всего, имеет частный IP-адрес в ваших подсетях и взаимодействует с ним, - не может обмениваться данными с вашими экземплярами ECS, поскольку они допускают только трафик от 138.106.0.0/16
,
Для других, кто может столкнуться с той же проблемой:
Это может быть проблема с маршрутом, который вы настроили для проверки работоспособности.
Ваш настроенный маршрут должен вернуть success response(status : 200)
по вызову.
Если "/"
маршрут, который вы настроили для проверки работоспособности, убедитесь, что вы ПОЛУЧАЕТЕ звонок yourwebsitename.com/
возвращает 200
код состояния.
Точно так же, если "/health-check"
вы настроили для проверки работоспособности, пожалуйста, убедитесь, что вы получаете вызов yourwebsitename.com/health-check
возвращает 200
код состояния.