如何解决 Amazon ECS 中的“ResourceInitializationError:未能验证记录器参数”错误?

2 分钟阅读
0

我在 Amazon Elastic Container Service(Amazon ECS)中运行任务时,收到“ResourceInitializationError:未能验证记录器参数”错误。

简短描述

当 Amazon ECS 任务找不到任务 definitionAmazon 中定义的 Amazon CloudWatch 日志组时,Amazon ECS 将返回 ResourceInitialization 错误。您收到以下错误消息:

“ResourceInitializationError:未能验证记录器参数:创建流已重试 1 次:未能创建 CloudWatch 日志流: ResourceNotFoundException: 指定的日志组不存在:退出状态 1”

若要解决该错误,请为任务创建一个新的日志组。

若要解决 Amazon ECS 任务无法启动的问题,请使用 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册。请参照相关步骤,解决您遇到的问题。

解决方法

找到未能启动的任务

重要事项:

  • 在与您的 ECS 集群资源所在的同一 AWS 区域内使用 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册。
  • 使用运行手册时,必须使用最近失败的任务 ID。如果失败的任务是 Amazon ECS 服务的一部分,则在服务中使用最近一次失败的任务。在自动化执行期间,失败任务必须在 ECS:DescribeTasks 中可见。默认情况下,已停止的 ECS 任务在进入已停止状态后的 1 小时内保持可见。使用最近一次失败的任务的 ID 可避免在自动化过程中因为任务状态清理功能导致分析中断。

有关如何启动运行手册的说明,请参阅 AWSSupport-TroubleshootECSTaskFailedToStart。根据自动化的输出,从以下手动排查步骤中选择一种进行操作。

对错误进行故障排除

若要解决 ResourceInitialization 错误,请查看以下解决方案,为任务创建新的日志组。

如果您不知道任务定义中定义的哪个日志组返回了错误,请运行以下命令:

aws ecs describe-task-definition --task-definition nginx-fargate:3 | jq -r .taskDefinition.containerDefinitions[].logConfiguration

输出描述了您必须在 CloudWatch 中重新创建的日志组。

在控制台中创建 CloudWatch 日志组

  1. 打开 CloudWatch 控制台
  2. 从导航栏中选择 Amazon ECS 集群所在的区域
  3. 在导航窗格中,选择日志,然后选择日志组
  4. 日志组窗口中,选择创建日志组

使用 AWS CLI 创建 CloudWatch 日志组

使用 AWS 命令行界面(AWS CLI)命令 create-log-group 创建 CloudWatch 日志组。以下示例命令将创建一个名为 mylogs 的日志组:

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

aws logs create-log-group --log-group-name mylogs

在 Amazon ECS 控制台中使用自动配置功能

自动配置选项使用以 ecs 为前缀的任务定义系列名称来为您创建日志组。以下示例在您的任务定义中指定日志配置:

{  "containerDefinitions": [  
    {  
      "logConfiguration": {  
        "logDriver": "awslogs",  
        "options": {  
          "awslogs-create-group": "true",  
          "awslogs-group": "awslogs-wordpress",  
          "awslogs-region": "us-west-2",  
          "awslogs-stream-prefix": "awslogs-example"  
        }  
      }  
    }  
  ]  
}

您也可以通过以下步骤来创建自定义日志组:

  1. 指定日志配置选项。
  2. 添加值为 true 的键 awslogs-create-group。这将为您创建日志组。

以下示例在您的任务定义中指定已设定选项的日志配置:

{  "containerDefinitions": [  
    {  
      "logConfiguration": {  
        "logDriver": "awslogs",  
        "options": {  
          "awslogs-group": "example_container",  
          "awslogs-region": "eu-west-1",  
          "awslogs-create-group": "true",  
          "awslogs-stream-prefix": "example"  
        }  
      }  
    }  
  ]  
}

**注意:**托管式 AWS Identity and Access Management(IAM)策略 AmazonECSTaskExecutionRolePolicy 不包括 logs:CreateLogGroup 权限。若要使用 awslogs-create-group 选项,请添加 logs:CreateLogGroup 作为内联 IAM 策略。

AWS 官方
AWS 官方已更新 1 年前