使用标签整理资源


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

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

准备工作

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init
    2. Set a default region and zone.
    3. REST

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

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

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

什么是标签?

标签是一种可以分配给 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 不会为该虚拟机创建标记。如果需要在虚拟机上创建标记,必须手动进行创建。

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

后续步骤