使用标签整理资源


标签是键值对,可用于在 Google Cloud 中对相关或关联资源进行分组。例如,在 Compute Engine 上,您可以使用标签按生产、预演或开发等类别对虚拟机进行分组,以便可以搜索属于每个开发阶段的资源。

为资源添加标签后,您可以利用嵌套过滤功能,对添加标签的资源进行更精确的搜索。

准备工作

  • 阅读永久性磁盘文档。
  • 阅读映像文档。
  • 如果您尚未设置身份验证,请进行设置。 身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

什么是标签?

标签是一种可以分配给 Google Cloud 实例的键值对。它们可帮助您以所需的粒度组织这些资源并大规模管理费用。您可以将标签附加到各项资源,然后根据其标签对资源进行过滤。标签的相关信息会转发到结算系统,以便您按标签细分结算费用。使用内置的结算报告,您可以按资源标签对费用进行过滤和分组。您还可以使用标签来查询结算数据导出

标签要求

应用于资源的标签必须符合以下要求:

  • 每个资源最多可以有 64 个标签。
  • 每个标签都必须采用键值对形式。
  • 键至少包含 1 个字符,最多包含 63 个字符,且不能为空。值可以为空,且最多包含 63 个字符。
  • 键和值只能包含小写字母、数字字符、下划线和短划线。所有字符必须使用 UTF-8 编码,允许使用国际字符。 键必须以小写字母或国际字符开头。
  • 标签的键部分在单个资源内必须是唯一的。不过,您可以将同一个键用于多个资源。

这些限制适用于每个标签的键和值,以及带有标签的各个 Google Cloud 资源。您可以对一个项目的所有资源应用任意数量的标签。

标签的常见用途

以下是标签的一些常见使用场景:

  • 团队或成本中心标签:根据团队或成本中心添加标签,以区分不同团队所拥有的实例(例如 team:researchteam:analytics)。您可以在核算成本或制定预算时使用此类标签。

  • 组件标签:例如 component:rediscomponent:frontendcomponent:ingestcomponent:dashboard

  • 环境或阶段标签:例如 environment:productionenvironment:test

  • 状态标签:例如 state:activestate:readytodeletestate:archive

  • 所有权标签:用于标识负责运营的团队,例如 team:shopping-cart

  • 虚拟机标签:标签可附加到虚拟机。您在过去定义的虚拟机标记显示为没有值的标签。

我们不建议创建大量唯一标签,例如为每个 API 调用的时间戳或个别值创建标签。这种方法的问题在于,当值经常变化或键导致目录杂乱时,很难有效地过滤和报告资源。

标签和标记

标签可用作资源可查询的注释,但不能用于设置政策的条件。通过对政策进行精细控制,标记提供了一种有条件地允许或拒绝政策的方法,具体取决于资源是否具有特定的标记。如需了解详情,请参阅标记概览

在 Compute Engine 上使用标签

您可以将标签应用于以下 Compute Engine 资源:

  • 虚拟机 (VM) 实例
  • 映像
  • 永久性磁盘
  • 永久性磁盘快照

您还可以在如下所示的相关 Google Cloud 组件上使用标签:

例如,您可以将以下标签作为键值对添加到资源中:

{
 "labels": {
    "vmrole": "webserver",
    "environment": "production",
    "location": "west",...
    }
 }

创建具有标签的资源

在创建新资源时,您可以向该资源应用标签。

控制台

  1. 转到要创建的资源页面。

  2. 标签下,点击 添加标签

  3. 继续执行创建过程。

gcloud

如需添加标签,请将 create 子命令与 --labels 标志结合使用。您可以使用以下 gcloud 命令为 Compute Engine 资源添加标签:

示例

gcloud compute instances create ... \
    --labels webserver=backend,media=images

API

在 API 中,在发出添加新资源的 POST 请求期间,在请求正文中添加 labels 属性以将标签应用于新资源。

例如,以下代码段会发出 POST 请求来创建具有标签 webserver:backendmedia:images 的虚拟机实例:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances

{
 "name": "myVM",
 "machineType": "zones/us-central1-f/machineTypes/custom-2-15360-ext",
  ...,
 "labels": {
   "webserver": "backend",
   "media": "images"
  }
}

为现有资源添加或更新标签

您可以使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 为资源添加标签或更新现有标签。如需为转发规则添加或更新标签,请使用 gcloud CLI 或 Compute Engine API。

控制台

  1. 转到要为其添加标签的资源页面。

  2. 选中要添加标签的资源旁边的复选框。

  3. 如需展开标签列,请点击显示信息面板

  4. 在面板中,选择标签

  5. 如需添加标签,请点击 添加标签,然后添加键值对。

  6. 如需更新标签,请选择现有标签并修改其值。

  7. 保存更改。

gcloud

如需添加或更改标签,请使用带 --update-labels 标志的 update 子命令。您可以使用以下 gcloud 命令更新 Compute Engine 资源的标签:

示例

gcloud compute disks update example-disk \
    --update-labels backend=webserver,media=images

如果您提供的标签键已经存在,Google Cloud CLI 会使用新标签值来更新现有键。如果您提供新键,则该工具会将新键添加到标签列表中。

API

要添加或更新标签,请使用最新的指纹和要应用的完整标签列表对资源的 setLabels 方法发出 POST 请求。

与元数据和标记类似,如果资源当前具有您想要保留的标签,则除了您要添加的任何新标签,还必须在请求中包含这些标签。

例如,以下代码段会向虚拟机实例发出 POST 请求来设置 environment:testan-existing-tag:yes 标签:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/setLabels

{
 "labels": {
  "environment": "test",
  "an-existing-tag": "yes"
 },
 "labelFingerprint": "42WmSpB8rSM="
}

查看标签

您可以使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 查看资源的标签。如需查看转发规则的标签,请使用 gcloud CLI 或 Compute Engine API。

控制台

  1. 转到资源页面。

  2. 点击相应资源以查看其详细信息。

  3. 定位标签

gcloud

如需查看标签,请使用 describe 子命令。您可以使用以下 gcloud 命令查看 Compute Engine 资源的标签:

示例

gcloud compute disks describe example-disk

输出包含标签:

...
id: '5047929990219134234'
kind: compute#disk
labelFingerprint: GHZ1Un209U=0
labels:
  environment: dev
  department: finance
...

API

如需检索标签,请向以下资源发出 GET 请求:

例如,以下代码段会发出 GET 请求来检索虚拟机实例的标签:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

请替换以下内容:

  • PROJECT_ID:项目 ID
  • ZONE:虚拟机所在的区域
  • VM_NAME:虚拟机的名称

获取 API 请求的标签指纹

在 API 中更新或添加标签时,您需要提供请求的最新标签指纹,以防止与其他请求发生冲突。只有 API 请求需要指纹;Google Cloud 控制台和 Google Cloud CLI 工具不需要指纹。

如需获取最新的 labelsFingerprint,请向以下资源发出 GET 请求:

例如,以下代码段会获取虚拟机实例的 labelsFingerprint

GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance

响应包含 labelFingerprint 属性:

200 OK

{
 "kind": "compute#instance",
 "id": "4392196237934605253",
 "creationTimestamp": "2015-09-15T14:05:16.475-07:00",
 "zone": "https://content.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f",
 "status": "RUNNING",
 ...
 "labels": {
  "environment": "test"
 },
 "labelFingerprint": "p1ty_9HoBk0="
}

移除标签

您可以使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 移除资源的标签。如需移除转发规则的标签,请使用 gcloud CLI 或 Compute Engine API。

控制台

  1. 转到要为其移除标签的资源页面。

  2. 选中要移除标签的资源旁边的复选框。

  3. 如需展开标签列,请点击显示信息面板

  4. 要删除某个标签,请点击 删除

  5. 保存更改。

gcloud

如需添加或更改标签,请使用带 --remove-labels 标志的 update 子命令。您可以使用以下 gcloud 命令移除 Compute Engine 资源的标签:

示例

gcloud compute disks update example-disk \
    --remove-labels backend,media

API

如需移除标签,请使用最新指纹和要应用的完整标签列表对以下资源的 setLabels 方法发出 POST 请求:

提供当前的 labelsFingerprint 和一个空的标签列表以移除所有标签,或提供您要保留的标签列表(去掉您要移除的标签)。例如,以下代码段会从虚拟机中移除所有标签:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/setLabels

{
 "labels": { },
 "labelFingerprint": "42WmSpB8rSM="
}

使用标签过滤搜索

您可以使用 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 搜索资源并按标签过滤结果。如需按标签过滤转发规则,请使用 gcloud CLI 或 Compute Engine API。

控制台

  1. 转到要获取资源过滤列表的资源页面。

  2. 如果出现提示,请选择您的项目并点击继续

  3. 在搜索栏中,输入您的键、值或键值对。您的结果包括任何部分匹配项。

    例如,如需仅显示具有 env:dev 标签的资源,您可以输入以下任一项:

    • 输入键:env
    • 输入值:dev
    • 输入键值对:env:dev

gcloud

如需根据标签进行过滤,请将以下资源的 list 子命令与 --filter 标志结合使用:

--filter 标志的值必须采用 labels.KEY=VALUE 格式。例如,如果要按键为 env、值为 dev 的标签进行过滤,您可以运行以下命令:

gcloud compute instances list \
    --filter labels.env=dev

如需详细了解 gcloud CLI 中的过滤条件语法,请参阅 gcloud topic filters 文档

API

如需过滤资源,请向以下资源的 list 方法发出 GET 请求,并添加过滤条件字段:

例如,如需列出项目 myproject 和可用区 us-central1-a 中的所有虚拟机,并且标签具有键值对 env:dev,请在 list 请求中将过滤条件字段设置为 labels.env:dev。如果您将过滤条件字段添加为查询字符串参数,请使用网址编码的参数值 filter=labels.env%3Adev

GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances?filter=labels.env%3Adev

如需了解详情,请参阅 Compute Engine API 参考文档中的 filter 文档

虚拟机标签和网络标记之间的关系

过去,标签和标记是相关的。例如,如果您已向虚拟机添加一个 webserver:test 标签,Compute Engine 就会自动向该虚拟机添加一个 webserver 标记。

现在,标签和标记是分开的。如果您在虚拟机上创建标签,Compute Engine 不会为该虚拟机创建标记。如果需要在虚拟机上创建标记,必须手动进行创建。

如需了解如何创建标记,请参阅网络标记

后续步骤