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 ロググループを作成する
- CloudWatch コンソールを開きます。
- ナビゲーションバーから、Amazon ECS クラスターが配置されているリージョンを選択します。
- ナビゲーションペインで [ログ] を選択し、次に [ロググループ] を選択します。
- [ロググループ] ウィンドウで、[ ロググループを作成] を選択します。
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"
}
}
}
]
}
次のステップでカスタムロググループを作成することもできます。
- ログ設定オプションを指定します。
- 値が 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 を追加してください。