如何排查 ECS 任务中与标记相关的问题?
我遇到与 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 中运行以下命令并将 servicename、clustername 和 region(区域)替换为适当的值来检查在特定服务中是否使用的是 PropagateTags:
aws ecs describe-services --services <servicename> --cluster <clustername> --region <region> --query 'services[*].propagateTags' --output text
要使用 CLI 配置标签以从服务或任务定义传播,请参阅 RunTask 和 CreateService API。
要使用控制台激活标签传播,请执行以下操作:
- 打开 Amazon ECS console(Amazon ECS 控制台)。
- 为您的 ECS 资源选择 AWS 区域。
- 在导航窗格中,选择 Task Definitions(任务定义)。
- 从资源列表中选择任务定义,然后选择 Actions(操作)。然后,选择 Create Service(创建服务)或 Run Task(运行任务)。
- 在 Task tagging configuration(任务标记配置)中,在 Propagate tags from(从中传播标签)旁边,选择 Service(服务)或 Task definitions(任务定义)。
注意:默认选项为 Do not propagate(不传播)。
要使用 AWS CloudFormation 在 ECS 中使用标签,您需要使用属性 EnableECSManagedTags 和 PropagateTags 声明实体 AWS::ECS::Service,其值为:SERVICE 或 TASK_DEFINITION。
注意:
- 在 CloudFormation 中创建堆栈后使用 ECS 服务标签相关属性将需要堆栈更新和资源 replacement(替换)。这意味着该服务将被删除并通过 CloudFormation 重新创建。
- 只有在运行任务或创建服务时才能使用 PropagateTags 参数。有关更多信息,请参阅 RunTask 和 CreateService 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 服务添加标签,请执行以下操作:
- 在 CloudTrail 控制台中检查 CloudTrail 事件以获取 TagResource 事件。
- 如果您看到以下错误之一:AccessDenied 或 The tags cannot be updated at this time(此时无法更新标签)。等待几分钟再试一次 ,则 IAM 实体没有 ecs:TagResource 权限。
- 要解决此问题,请向 IAM 实体添加 ecs: TagResource权限。
- 添加权限后,请重新尝试将标签添加到 ECS 集群。
确认您的 ECS 标签在标签限制范围内。要查看标签限制,请参阅 Tag restrictions(标签限制)。
检查这是否是 AWS 账单和成本管理问题
要验证所需标签是否存在于 ECS 任务级别,请在 AWS CLI 中运行以下命令,并将 value(值)替换为 ARN:
aws ecs list-tags-for-resource --resource-arn <value>
要使用控制台验证所需标签是否存在于 ECS 任务级别,请执行以下操作:
- 打开 Amazon ECS console(Amazon ECS 控制台)。
- 为您的 ECS 资源选择 AWS 区域。
- 在导航窗格中,选择资源类型(例如,Clusters(集群))。
- 从资源列表中选择资源,然后选择 **Tags(标签)。**如果标签存在,则将会列出。
如果您正在寻找托管式标签,则必须开启 ECS-managed(ECS 托管)。通过运行以下命令并将 servicename、clustername 和 region(区域)替换为适当的值来验证 ECS-managed(ECS 托管)状态:
aws ecs describe-services --services <servicename> --cluster <clustername> --region <region> --query 'services[*].enableECSManagedTags' --output text
命令输出将包含 enableECSManagedTags 值。
您可以在使用 CLI 创建服务或运行任务时激活 ECS-managed(ECS 托管)标签,有关详细信息,请参阅 RunTask 和 CreateService API。
要使用控制台激活 ECS-managed(ECS 管理)标签,请执行以下操作:
- 打开 Amazon ECS console(Amazon ECS 控制台)。
- 为您的 ECS 资源选择 AWS 区域。
- 在导航窗格中,选择 Task Definitions(任务定义)。
- 从资源列表中选择任务定义,然后选择 Actions(操作)。然后,选择 Create Service(创建服务)或 Run Task(运行任务)。
- 在 Task tagging configuration(任务标记配置)中,选择 Enable ECS managed tags(启用 ECS 托管标签)。
如果已列出用于计费的标签,但无法在 AWS Cost Explorer 中看到,请确保已从账单和成本管理控制台激活标签。要激活成本分配标签,请参阅激活用户定义的成本分配标签。
注意:在Cost Explorer 中必须作为筛选条件的每个标签都需要激活。激活标签最多可能需要 24 小时。
相关信息
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前