如何排查 ECS 任务中与标记相关的问题?

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

我遇到与 Amazon Elastic Container Service (Amazon ECS) 任务标签相关的问题。如何排查此问题?

解决方法

使用 Amazon ECS 设置标签时,您可能会遇到以下问题:

  • 您的标签并非从服务或任务定义传播到任务。
  • 您的标签具有过时的 Amazon Resource Name (ARN) 和资源 ID 格式。
  • 由于缺少 AWS Identity and Access Management (IAM) 权限或标签限制,您无法向 ECS 资源添加标签。
  • 您无法在 AWS 账单控制面板中看到 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 console(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 服务标签相关属性将需要堆栈更新和资源 replacement(替换)。这意味着该服务将被删除并通过 CloudFormation 重新创建。
  • 只有在运行任务或创建服务时才能使用 PropagateTags 参数。有关更多信息,请参阅 RunTaskCreateService API。
  • 您可以访问与直接使用 Amazon ECS RunTask API 启动的任务相同的计划任务配置。

确认您使用的是新的 ARN 格式

为了能够为 Amazon ECS 资源贴标签,请务必使用新的 Amazon Resource Name (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. 如果您看到以下错误之一:AccessDeniedThe tags cannot be updated at this time(此时无法更新标签)。等待几分钟再试一次 ,则 IAM 实体没有 ecs:TagResource 权限。
  3. 要解决此问题,请向 IAM 实体添加 ecs: TagResource权限
  4. 添加权限后,请重新尝试将标签添加到 ECS 集群。

确认您的 ECS 标签在标签限制范围内。要查看标签限制,请参阅 Tag restrictions(标签限制)。

检查这是否是 AWS 账单和成本管理问题

要验证所需标签是否存在于 ECS 任务级别,请在 AWS CLI 中运行以下命令,并将 value(值)替换为 ARN:

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

要使用控制台验证所需标签是否存在于 ECS 任务级别,请执行以下操作:

  1. 打开 Amazon ECS console(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 console(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 小时。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?