创建和管理标签

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

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

准备工作

什么是标签?

标签是一种键值对,可帮助您组织 Google Cloud 实例。您可以将标签附加到各项资源,然后根据其标签对资源进行过滤。标签的相关信息会传递到结算系统,因此您可以按标签来细分结算费用

标签可用作资源可查询的注释,但不能用于设置政策的条件。标记提供了一种根据资源是否有特定标记,有条件地允许或拒绝政策的方法。如需了解详情,请参阅标记概览

标签的常见用途

我们不建议创建大量唯一标签,例如每个 API 调用的时间戳或单个值。以下是标签的一些常见用例:

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

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

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

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

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

标签要求

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

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

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

在 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": [{
   "key": "webserver",
   "value": "backend"
   },
   {
   "key": "media",
   "value": "images"
  }]
}

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

您可以使用 Cloud Console、gcloud 工具或 Compute Engine API 为资源添加标签或更新现有标签。如需为转发规则添加或更新标签,请使用 gcloud 工具或 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

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

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="
}

查看标签

您可以使用 Cloud Console、gcloud 工具或 Compute Engine API 查看资源的标签。如需查看转发规则的标签,请使用 gcloud 工具或 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 请求才需要指纹;Cloud Consolegcloud 命令行工具不需要指纹。

如需获取最新的 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="
}

移除标签

您可以使用 Cloud Console、gcloud 工具或 Compute Engine API 移除资源的标签。如需移除转发规则的标签,请使用 gcloud 工具或 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="
}

使用标签过滤搜索

您可以使用 Cloud Console、gcloud 工具或 Compute Engine API 搜索资源并按标签过滤结果。如需按标签过滤转发规则,请使用 gcloud 工具或 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 工具中的过滤条件语法,请参阅 gcloud topic filters 文档

API

如需过滤资源,请使用网址编码的 filter 查询参数向以下资源的 list 方法发出 GET 请求:

例如,如需基于标签 env:dev 进行过滤,请在查询字符串中使用 filter=labels.env+eq+dev 发出以下 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/list?filter=labels.env+eq+dev

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

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

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

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

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

后续步骤