【问题标题】:AWS ECS Fargate Task is not working properly from Cloudformation StackAWS ECS Fargate 任务无法从 Cloudformation 堆栈正常工作
【发布时间】:2020-01-05 02:01:03
【问题描述】:

我有一个使用 AWS 控制台创建的 ECS Fargate 启动类型任务的工作“模型”。但是,我需要创建一个 Cloudformation YAML 文件并进行部署。

我遇到的问题是,当我部署堆栈时,集群和服务被创建,任务也被创建并在控制台中显示为“正在运行”。它只是一个简单的 NGINX 容器,里面有我自己的内容。但是部署的版本永远不会对其公共 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'

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-ecs aws-fargate


    【解决方案1】:

    如果可以看到 Task 进入RUNNING 状态,则说明 ECR 中的镜像拉取成功,表示出站连接成功。但是,如果您无法通过点击 PUBLIC_IP:80 从任务中获得任何回复,这通常表明 安全组或 NACL 相关问题。我假设您正在收到请求超时。如果没有,请分享以下输出:

    curl -v http://<PUBLIC_IP_OF_THE_TASK>


    观察模板,

    NetworkConfiguration 中没有指定安全组

          NetworkConfiguration:
            AwsvpcConfiguration:
              AssignPublicIp: ENABLED
              Subnets:
                - 'subnet-XXXXXXXXXXXX'
    

    AWS::ECS::Service AwsVpcConfiguration - 如果不指定安全组,则使用 VPC 的默认安全组。

    默认安全组可能未打开端口 80。你可以看看那个。

    其次,这可能是一个错字,我看到 Name 属性被指定了两次,

        ContainerDefinitions:
            - Name: jwh20-container
              Image: 'XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/jwh20'
              Name: jwh20-nginx-cont
              PortMappings:
    

    【讨论】:

    • 谢谢!这是安全组。我忽略了指定一个,默认组不允许入站端口 80 流量。有趣的是,重复的 Name 属性没有被标记。但这似乎不会造成问题。
    • 很奇怪,但我想可能没问题,因为它可能会获取第一个属性。 @jwh20 你能确认任务定义中给容器起什么名字吗?
    • “名称”:“jwh20-nginx-cont”,
    • 哦,我明白了,感谢您告诉我。我也会试试这个。
    猜你喜欢
    • 2019-09-10
    • 2022-11-14
    • 2019-09-25
    • 2022-06-23
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2023-03-13
    相关资源
    最近更新 更多