Amazon Elastic Container Service (Amazon ECS) でタスクを実行する際に、"ResourceInitializationError: failed to validate logger args" というエラーが表示されます。
簡単な説明
Amazon ECS タスクがタスク定義で定義されている 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 ランブックを使用します。次に、問題に関連する手順を参照してください。
解決策
重要
- Amazon ECS クラスターのリソースが配置されたリージョンと同じ AWS リージョンで、AWSSupport-TroubleshootECSTaskFailedToStart ランブックを使用します。
- ランブックの使用時には、最後に失敗したタスク ID を指定する必要があります。失敗したタスクが Amazon ECS サービスに属している場合は、サービス内で最後に失敗したタスクを使用します。失敗したタスクは、オートメーション中に ECS:DescribeTasks で確認できる必要があります。デフォルトでは、停止した ECS タスクは、停止状態になってから 1 時間表示されます。最後に失敗したタスク ID を使用すると、オートメーション中にタスク状態のクリーンアップにより分析が中断するのを防ぐことができます。
ランブックを開始する方法については、「AWSSupport-TroubleshootECSTaskFailedToStart」を参照してください。オートメーションの出力に基づいて、次のいずれかの手順を実施します。
見つからないロググループを特定する
タスク定義で定義されているロググループがわからずエラーが返される場合は、次の describe-task-definition コマンドを実行します。
aws ecs describe-task-definition --task-definition nginx-fargate:3 | jq -r .taskDefinition.containerDefinitions[].logConfiguration
注: nginx-fargate:3 をご使用のタスク定義名とリビジョン番号に置き換えてください。
出力には、CloudWatch で再作成する必要があるロググループが表示されます。
コンソールを使用して CloudWatch ロググループを作成する
CloudWatch ロググループを作成するには、「CloudWatch Logs にロググループを作成します」を参照してください。
AWS CLI を使用して CloudWatch ロググループを作成する
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
CloudWatch ロググループを作成するには、次の AWS CLI コマンド create-log-group を実行します。
aws logs create-log-group --log-group-name mylogs
注: mylogs を実際のロググループ名に置き換えてください。
タスク定義で自動設定を使用する
Amazon ECS では、タスク定義に awslogs-create-group: true オプションを追加すると、自動的に CloudWatch ロググループを作成できます。これにより、タスクを実行する前にロググループを手動で作成する必要がなくなります。
次の自動設定方法のいずれかを選択します。
オプション 1: デフォルトのロググループ名を使用する
カスタムロググループ名を指定せずに awslogs-create-group: true を設定すると、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"
}
}
}
]
}
オプション 2: カスタムロググループ名を使用する
組織に特定のロググループの命名規則が必要な場合は、カスタムロググループ名を指定できます。Amazon ECS は、タスクの開始時に、指定された名前でロググループを作成します。
次の例は、カスタムロググループ名を指定する方法を示しています。
{
"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 を追加してください。
自動設定用の IAM アクセス許可を設定するには、「Amazon ECS ログを CloudWatch に送信する」を参照してください。
関連情報
Amazon ECS タスク定義の例: CloudWatch にログをルーティングする