如何排查 Amazon ECS 任务的标记问题?

3 分钟阅读
0

我想排查 Amazon Elastic Container Service (Amazon ECS) 任务标签的问题。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

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

  • 标签不会从服务或任务定义传播到任务。
  • 标签的 ARN 和资源 ID 格式已过时。
  • 由于缺少 AWS Identity and Access Management (IAM) 权限或标签限制,无法创建新 Amazon ECS 资源或向资源添加标签。
  • 在 AWS 账单与成本管理控制台的 Billing(账单)页面上看不到 Amazon ECS 标签。

使用 PropagateTags 参数从服务或任务定义传播到任务

默认情况下未激活 PropagateTags 参数。要将标签从任务定义或服务复制到任务,请激活 PropagateTags。可以在运行任务、创建服务或更新服务时复制标签。

**注意:**在以下命令中,将 servicename 替换为您的服务名称,将 clustername 替换为您的集群名称,将 region 替换为您的 AWS 区域。还要将 taskdefinitionname 替换为您的任务定义名称,将 taskdefinitionversion 替换为您的任务定义版本。

要检查在特定服务中是否已激活 PropagateTags,请运行以下 describe-services 命令:

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

要为新独立任务激活标签传播,请运行以下 run-task 命令:

aws ecs run-task --cluster clustername --task-definition taskdefinitionname:taskdefinitionversion --launch-type FARGATE/EC2 --propagate-tags TASK_DEFINITION/SERVICE

要为新服务激活标签传播,请运行以下 create-service 命令:

aws ecs create-service --cluster clustername --service-name servicename --task-definition taskdefinitionname:taskdefinitionversion --desired-count 2 --launch-type FARGATE --platform-version LATEST --network-configuration "awsvpcConfiguration={subnets=[subnet-abcdef123],securityGroups=[sg-pqrst5678]}" --propagateTags TASK_DEFINITION/SERVICE

要为现有服务激活标签传播,请运行以下 update-service 命令:

aws ecs update-service --cluster clustername --service servicename --propagate-tags SERVICE/TASK_DEFINITION --force-new-deployment

还可以使用 Amazon ECS 控制台来开启标签传播。

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 为您的 Amazon ECS 资源选择 Region(区域)。
  3. 在导航窗格中,选择 Task definitions(任务定义)。
  4. 从资源列表中选择任务定义,然后选择 Actions(操作)。
  5. 选择 Create service(创建服务)或 Run task(运行任务)。
  6. Task tagging configuration(任务标记配置)中,选择 Service(服务)或 Task definitions(任务定义)。
    **注意:**默认选项为 Do not propagate(不传播)。

要使用 AWS CloudFormation 在 Amazon ECS 中配置标签,必须声明 AWS::ECS::Service 资源。要声明 AWS::ECS::Service,请使用 EnableECSManagedTagsPropagateTags 属性,其值为 SERVICETASK_DEFINITION

注意:

使用正确的 ARN 格式

要标记 Amazon ECS 资源,必须使用新 ARN 和 ID 格式。要将 Amazon ECS 部署迁移到新格式,请参阅 Migrating your Amazon ECS deployment to the new ARN and resource ID format

**注意:**只有在重新创建资源后,现有资源才会收到新 ARN 格式。

验证 IAM 实体是否具有所需的权限并检查标签限制

所有 AWS 账户都使用标记授权。要在创建 Amazon ECS 资源时对其进行标记,IAM 主体必须拥有 ecs:TagResource 权限。以下 Amazon ECS API 也必须拥有此权限:

  • CreateCapacityProvider
  • CreateCluster
  • CreateService
  • CreateTaskSet
  • RegisterContainerInstance
  • RegisterTaskDefinition
  • RunTask
  • StartTask

如果您无法向 Amazon ECS 服务添加标签或创建资源,请完成以下步骤来排查此问题:

  1. 查看 AWS CloudTrail 事件中是否有 TagResource 事件。
  2. 查看事件中是否出现以下错误消息:
    "AccessDenied" (访问被拒绝) -或-
    "The tags cannot be updated at this time.Wait a few minutes and try again" (此时无法更新标签,请稍等几分钟后再试一次) 如果收到上述错误,则说明该 IAM 实体没有 ecs:TagResource 权限。
  3. 使用 IAM 控制台AWS CLI 向 IAM 实体添加 ecs:TagResource 权限。
  4. 重新创建资源,或再次向 Amazon ECS 集群添加标签。
  5. 确认您的 Amazon ECS 标签遵循标签限制

检查您是否遇到账单和成本管理问题

如果您无法按标签筛选 Amazon ECS 任务以查看成本,请确认 Amazon ECS 任务有所需的标签。运行以下 list-tags-for-resource 命令:

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

**注意:**将 value 替换为您的任务 ARN。

要使用 Amazon ECS 控制台来检查 Amazon ECS 任务的标签,请完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 为您的 Amazon ECS 资源选择 Region(区域)。
  3. 在导航窗格中,选择资源类型,例如 Clusters(集群)。
  4. 选择您的资源,然后选择 Tags(标签)以查看该资源拥有的所有标签。

要检查托管标签,必须激活 Amazon ECS 托管标签。要检查是否已激活 Amazon ECS 托管标签,请运行以下 describe-services 命令:

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

**注意:**将 servicename 替换为您的服务名称,将 clustername 替换为您的集群名称,将 region 替换为您的区域。

在命令的输出中,检查 enableECSManagedTags 是否设置为 true

要使用控制台来激活 Amazon ECS 托管标签,请完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 为您的 Amazon ECS 资源选择 Region(区域)。
  3. 在导航窗格中,选择 Task definitions(任务定义)。
  4. 从资源列表中选择任务定义,然后选择 Actions(操作)。
  5. 选择 Create service(创建服务)或 Run task(运行任务)。
  6. Task tagging configuration(任务标记配置)中,选择 Enable ECS managed tags(启用 ECS 托管标签)。

要使用 AWS CLI 激活 Amazon ECS 托管标签,请运行 update-service 命令:

aws ecs update-service --cluster clustername --service servicename --enable-ecs-managed-tags --force-new-deployment

**注意:**将 clustername 替换为您的集群名称,将 servicename 替换为您的服务名称。

可能会列出您用于计费的标签,但在 AWS Cost Explorer 成本管理服务中不会出现这些标签。要解决此问题,请在账单和成本管理控制台中激活成本分配标签

**注意:**激活标签最多可能需要 24 小时。

相关信息

Amazon ECS 故障排查

标记 Amazon ECS 资源

授予在创建资源时对其进行标记的权限

AWS 官方
AWS 官方已更新 4 个月前