Amazon ECS の「ResourceInitializationError: failed to validate logger args」というエラーを解決する方法を教えてください。

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) でタスクを実行する際に、「ResourceInitializationError: failed to validate logger args」というエラーが表示されます。

簡単な説明

Amazon ECS タスクがタスク definitionAmazon で定義されている Amazon CloudWatch ロググループを見つけられない場合、Amazon ECS により ResourceInitialization エラーが返されます。次のエラーが表示されます。

「ResourceInitializationError: failed to validate logger args: create stream has been retried 1 times: failed to create CloudWatch log stream: ResourceNotFoundException: The specified log group does not exist. : exit status 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 オプションを使用するには、インライン IAM ポリシーとして logs:CreateLogGroup を追加してください。

コメントはありません