未为任务创建 ECS awslogs 日志组

ECS awslogs Log group not being created for Task

这是我的任务定义的一部分:

"logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/ecs/main-frontend-production-php",
        "awslogs-region": "us-west-1",
        "awslogs-stream-prefix": "ecs",
        "awslogs-create-group": "true"
      }
    },

如果我在 aws 控制台中查看任务,它说日志驱动程序是 awslogs 并且在我单击它时立即显示“在 cloudwatch 中查看日志”我收到错误消息:There was an error getting log events. The specified log group does not exist. 并且没有日志。

有点不知所措,看来是这样的:https://docs.aws.amazon.com/AmazonECS/latest/userguide/using_awslogs.html我做的对吗?

现在我的任务停留在“待定”状态,我没有可以查看的日志来找出原因。

这将由于写入 CloudWatch 日志的权限无效而发生。

您必须将权限附加到您正在使用的角色。

如果您不确定如何执行此操作,请参阅 Using CloudWatch Logs with container instances 文档。

导致此错误的可能原因是错误似乎是容器实例能够获取日志组列表。

  • 确保容器和日志组在同一区域us-west-1
  • 确保容器有创建日志组的权限
  • 只是为了缩小问题范围,只需使用 aws cli 或 aws 控制台创建日志组 /ecs/main-frontend-production-php,这样您就会知道实际原因,因为区域或权限。
aws logs create-log-group --log-group-name /ecs/main-frontend-production-php --region us-west-1

政策应该类似于

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}

好吧,我终于想通了。我没有云监视日志的原因是因为图像没有从 ECR 中提取。我一直认为“最新”是一些神奇的 docker 标签。显然不是,我必须实际标记它最新才能找到它。

我想 cloudwatch 日志本来可以一直工作的,但是镜像拉不出来,所以没有日志可言。