跳至內容

如何解決 Amazon ECS 中的「ResourceInitializationError: failed to validate logger args」錯誤?

2 分的閱讀內容
0

在 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 Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確認您使用的是最新版 AWS CLI。

若要建立 CloudWatch 日誌群組,請執行以下 create-log-group AWS CLI 命令。

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

注意: 將 mylogs 替換為您的日誌群組名稱。

在任務定義中使用自動組態

將 awslogs-create-group: true 選項新增至任務定義後,Amazon ECS 可以自動為您建立 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 選項,請將 logs:CreateLogGroup 新增為內嵌 IAM 政策。

如需設定自動組態所需的 IAM 權限,請參閱將 Amazon ECS 日誌傳送至 CloudWatch。

相關資訊

Amazon ECS 任務定義範例: 將日誌路由至 CloudWatch