如何解決 ECS 任務中標記相關的問題?

上次更新日期:2022 年 4 月 1 日

我遇到 Amazon Elastic Container Service (Amazon ECS) 任務標籤的問題。如何對此問題進行疑難排解?

解決方案

使用 Amazon ECS 設定標籤時,您可能會遇到以下問題:

  • 您的標籤不會從服務或任務定義傳播到任務。
  • 您的標籤具有過時的 Amazon 資源名稱 (ARN) 和資源 ID 格式。
  • 由於缺少 AWS Identity and Access Management (IAM) 許可或標籤限制,您無法新增標籤到您的 ECS 資源。
  • 您無法在 AWS Billing 儀表板中看到 ECS 標籤。

若要對這些問題進疑難排解,請執行以下操作:

驗證是否使用 PropagateTags 參數以從服務或任務定義傳播到任務

PropagateTags 參數可用於將標籤從任務定義或服務複製到任務。這可以在執行任務或建立服務時完成。預設情況下此參數未打開。

您可以在 AWS CLI 中執行以下命令並將 servicenameclusternameregion 替換為適當的值,來檢查在特定服務中是否有使用 PropagateTags

aws ecs describe-services --services <servicename> --cluster <clustername> --region <region> --query 'services[*].propagateTags' --output text

若要配置標籤以使用 CLI 從服務或任務定義傳播,請參閲 RunTaskCreateService API。

若要使用主控台啟用標籤傳播:

  1. 開啟 Amazon ECS 主控台
  2. 選擇您 ECS 資源的 AWS 區域。
  3. 在導覽窗格中,選擇 Task Definitions (任務定義)。
  4. 從資源列表中選擇任務定義,並選擇 Actions (動作)。然後,選擇 Create Service (建立服務) 或 Run Task (執行任務)。
  5. Task tagging configuration (任務標記組態) 中,在 Propagate tags from (傳播標籤) 旁邊,選擇Service (服務) 或 Task definitions (任務定義)。
    注意:預設選項為 Do not propagate (不傳播)。

若要使用 AWS CloudFormation 在 ECS 中使用標籤,您需要使用 EnableECSManagedTagsPropagateTags 屬性宣告實體 AWS::ECS::Service,且其值為:SERVICETASK_DEFINITION

注意

  • 在於 CloudFormation 中建立堆疊後,使用 ECS 服務標籤相關屬性將需要進行堆疊更新和資源替換。這意味着該服務將被刪除並透過 CloudFormation 重新建立。
  • 只有在執行任務或建立服務時才能使用 PropagateTags 參數。如需詳細資訊,請參閲 RunTaskCreateService API。
  • 您可以存取與使用 Amazon ECS RunTask API 直接啟動的任務相同的 排程任務組態。

驗證您使用的是新的 ARN 格式

若要能標記 Amazon ECS 資源,您必須使用新的 Amazon 資源名稱 (ARN) 和 ID 格式。

兩種格式的示例:

  • 舊格式:arn:aws:ecs:region:aws_account_id:service/service-name
  • 新格式:arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

若要將 ECS 部署遷移到新的 ARN 和資源 ID 格式,請參閲將您的 Amazon ECS 部署遷移到新的 ARN 和資源 ID 格式

注意:在重新建立之前,在標記時您的現有資源不會收到新的 ARN 格式。

檢閱 IAM 實體是否具有所需要的許可並檢查標籤限制

如果您無法新增標籤到您的 ECS 服務,請執行以下操作:

  1. 檢查 CloudTrail 主控台中的 CloudTrail 事件是否有 TagResource 事件。
  2. 如果您看到以下錯誤之一:AccessDenied標籤目前無法更新。等待幾分鐘,然後重試,則表示 IAM 實體沒有 ecs:TagResource 許可。
  3. 若要解決這個問題,請將 ecs:TagResource 許可新增至 IAM 實體。
  4. 新增許可後,再試一次將標籤新增至 ECS 叢集。

確認 ECS 標籤在標籤限制範圍內。若要檢閱標籤限制,請參閲標籤限制

檢查是否為 AWS 帳單與成本管理問題

若要驗證 ECS 任務層級存在有所需要的標籤,請在 AWS CLI 中執行以下命令,並將value (值) 替換為 ARN:

aws ecs list-tags-for-resource --resource-arn <value>

若要使用主控台驗證 ECS 任務層級是否存在有所需要的標籤,請執行以下操作:

  1. 開啟 Amazon ECS 主控台
  2. 選擇您 ECS 資源的 AWS 區域。
  3. 在導覽窗格中,選擇資源類型 (例如,Clusters (叢集))。
  4. 從資源列表中選擇資源,然後選擇Tags (標籤)。
    如果標籤存在,則會被列出。

如果您是要尋找受管標籤,則必須開啟 ECS-managed (由 ECS 管理)。執行以下命令並將 servicenameclusternameregion 替換為適當的值,驗證 ECS-managed (由 ECS 管理) 狀態:

aws ecs describe-services --services <servicename> --cluster <clustername> --region <region> --query 'services[*].enableECSManagedTags' --output text

命令輸出將包含enableECSManagedTags 值。

您可以在使用 CLI 建立服務或執行任務時啟用 ECS-managed (由 ECS 管理) 的標籤,如需詳細資訊,請參閲RunTaskCreateService API。

若要使用主控台啟用 ECS-managed (由 ECS 管理) 的標籤:

  1. 開啟 Amazon ECS 主控台
  2. 選擇您 ECS 資源的 AWS 區域。
  3. 在導覽窗格中,選擇 Task Definitions (任務定義)。
  4. 從資源列表中選擇任務定義,並選擇 Actions (動作)。然後,選擇 Create Service (建立服務) 或 Run Task (執行任務)。
  5. Task tagging configuration (任務標記組態) 中,選擇 Enable ECS managed tags (啟用由 ECS 管理的標籤)。

如果列出了用於計費的標籤,但在 AWS Cost Explorer 中看不到,請確認已從帳單與成本管理主控台中啟用標籤。若要啟用成本分配標籤,請參閲啟用使用者定義的成本分配標籤
注意:每個在 Cost Explorer 中必須被視為篩選條件的標籤都需要啟用。啟用標籤最多可能需要 24 小時。


此文章是否有幫助?


您是否需要帳單或技術支援?