AWS ECS Fargate 任务无法从 Cloudformation 堆栈正常工作
AWS ECS Fargate Task is not working properly from Cloudformation Stack
我有一个正在运行的 "model" 我使用 AWS 控制台创建的 ECS Fargate 启动类型任务。但是,我需要创建一个 Cloudformation YAML 文件并进行部署。
我遇到的问题是,当我部署堆栈时,会创建集群和服务,还会创建任务并在控制台中显示为 "RUNNING"。它只是一个简单的 NGINX 容器,里面有我自己的内容。但是部署的版本从不响应其 public IP。如果我停止它然后在控制台中启动另一个任务,它工作正常。我不知道为什么部署的版本不起作用而手动启动的版本却起作用。
Cloudwatch 日志中没有显示任何内容,Cloudtrail 中也没有显示任何内容。任何建议表示赞赏。这是我的 Cloudformation YAML 文件:
AWSTemplateFormatVersion: 2010-09-09
Description: ECS NGINX FARGATE
Resources:
ECSCluster:
Type: 'AWS::ECS::Cluster'
Properties:
ClusterName: 'jwh20-ecs-cluster'
NginxService:
Type: 'AWS::ECS::Service'
Properties:
Cluster: !Ref ECSCluster
LaunchType: FARGATE
TaskDefinition: !Ref NginxTask
DesiredCount: 1
NetworkConfiguration:
AwsvpcConfiguration:
AssignPublicIp: ENABLED
Subnets:
- 'subnet-XXXXXXXXXXXX'
NginxTask:
Type: 'AWS::ECS::TaskDefinition'
Properties:
Cpu: 512
Memory: 1024
Family: jwh-nginx
ContainerDefinitions:
- Name: jwh20-container
Image: 'XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/jwh20'
Name: jwh20-nginx-cont
PortMappings:
-
ContainerPort: 80
HostPort: 80
Protocol: 'tcp'
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-group: '/ecs/jwh-nginx-cf'
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: 'ecs'
ExecutionRoleArn: 'arn:aws:iam::XXXXXXXXXXXX:role/ecsTaskExecutionRole'
TaskRoleArn: 'arn:aws:iam::XXXXXXXXXXXX:role/ecsTaskExecutionRole'
NetworkMode: awsvpc
RequiresCompatibilities:
- 'FARGATE'
如果能看到Task进入RUNNING
状态,说明ECR镜像拉取成功,也就是出站连接成功。但是,如果您无法通过点击 PUBLIC_IP:80
从任务中获得任何响应,这通常表明 安全组或 NACL 相关问题 。我假设您正在请求超时。如果没有,请分享以下输出:
curl -v http://<PUBLIC_IP_OF_THE_TASK>
观察模板,
网络配置中没有指定安全组
NetworkConfiguration:
AwsvpcConfiguration:
AssignPublicIp: ENABLED
Subnets:
- 'subnet-XXXXXXXXXXXX'
AWS::ECS::Service AwsVpcConfiguration -
If you do not specify a security group, the default security group for the VPC is used.
默认安全组可能没有开放80端口。你可以看看那个。
其次,这可能是一个错字,我看到 Name 属性 被指定了两次,
ContainerDefinitions:
- Name: jwh20-container
Image: 'XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/jwh20'
Name: jwh20-nginx-cont
PortMappings:
我有一个正在运行的 "model" 我使用 AWS 控制台创建的 ECS Fargate 启动类型任务。但是,我需要创建一个 Cloudformation YAML 文件并进行部署。
我遇到的问题是,当我部署堆栈时,会创建集群和服务,还会创建任务并在控制台中显示为 "RUNNING"。它只是一个简单的 NGINX 容器,里面有我自己的内容。但是部署的版本从不响应其 public IP。如果我停止它然后在控制台中启动另一个任务,它工作正常。我不知道为什么部署的版本不起作用而手动启动的版本却起作用。
Cloudwatch 日志中没有显示任何内容,Cloudtrail 中也没有显示任何内容。任何建议表示赞赏。这是我的 Cloudformation YAML 文件:
AWSTemplateFormatVersion: 2010-09-09
Description: ECS NGINX FARGATE
Resources:
ECSCluster:
Type: 'AWS::ECS::Cluster'
Properties:
ClusterName: 'jwh20-ecs-cluster'
NginxService:
Type: 'AWS::ECS::Service'
Properties:
Cluster: !Ref ECSCluster
LaunchType: FARGATE
TaskDefinition: !Ref NginxTask
DesiredCount: 1
NetworkConfiguration:
AwsvpcConfiguration:
AssignPublicIp: ENABLED
Subnets:
- 'subnet-XXXXXXXXXXXX'
NginxTask:
Type: 'AWS::ECS::TaskDefinition'
Properties:
Cpu: 512
Memory: 1024
Family: jwh-nginx
ContainerDefinitions:
- Name: jwh20-container
Image: 'XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/jwh20'
Name: jwh20-nginx-cont
PortMappings:
-
ContainerPort: 80
HostPort: 80
Protocol: 'tcp'
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-group: '/ecs/jwh-nginx-cf'
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: 'ecs'
ExecutionRoleArn: 'arn:aws:iam::XXXXXXXXXXXX:role/ecsTaskExecutionRole'
TaskRoleArn: 'arn:aws:iam::XXXXXXXXXXXX:role/ecsTaskExecutionRole'
NetworkMode: awsvpc
RequiresCompatibilities:
- 'FARGATE'
如果能看到Task进入RUNNING
状态,说明ECR镜像拉取成功,也就是出站连接成功。但是,如果您无法通过点击 PUBLIC_IP:80
从任务中获得任何响应,这通常表明 安全组或 NACL 相关问题 。我假设您正在请求超时。如果没有,请分享以下输出:
curl -v http://
<PUBLIC_IP_OF_THE_TASK>
观察模板,
网络配置中没有指定安全组
NetworkConfiguration:
AwsvpcConfiguration:
AssignPublicIp: ENABLED
Subnets:
- 'subnet-XXXXXXXXXXXX'
AWS::ECS::Service AwsVpcConfiguration - If you do not specify a security group, the default security group for the VPC is used.
默认安全组可能没有开放80端口。你可以看看那个。
其次,这可能是一个错字,我看到 Name 属性 被指定了两次,
ContainerDefinitions:
- Name: jwh20-container
Image: 'XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/jwh20'
Name: jwh20-nginx-cont
PortMappings: