标签资源

标签是一种用于汇集相互关联的资源的简洁方法。例如,通常的做法是为用于生产、过渡或开发的资源分别添加标签,以便您可以在必要时轻松搜索属于每个开发阶段的资源。您的标签可能会显示 vmrole:webserverenv:productionlocation:west 等内容。您所添加的标签始终为键值对形式:

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

将标签应用于以下任何资源:

  • 虚拟机实例
  • 转发规则 (Alpha)
  • 映像
  • 永久性磁盘
  • 永久性磁盘快照
  • 静态外部 IP 地址 (Alpha)
  • VPN 隧道 (Alpha)

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

准备工作

限制

  • 您最多可为每个资源分配 64 个标签。
  • gcloudGoogle Cloud Platform Console 中尚不支持列为 Alpha 的资源。请改为使用 Alpha API 来为这些资源设置标签。
  • 标签的键和值必须遵循以下限制:

    • 键和值的长度均不能超过 63 个字符。
    • 键和值只能包含小写字母、数字字符、下划线和短划线。允许使用国际字符。
    • 标签键必须以小写字母开头,允许使用国际字符。
    • 标签键不能为空。

创建具有标签的资源

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

Console

  1. 转到“创建实例”页面

    转到“创建实例”页面

  2. 展开管理、安全、磁盘、网络、单独租用部分。
  3. 管理下,指定要添加到此资源的标签
  4. 继续执行创建过程。

gcloud

创建资源时,请包含 --labels 标志,后跟逗号分隔的标签键值对列表。例如:

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

创建映像和磁盘时,也适用相同的标志。

API

在 API 中,在发出添加新资源的 POST 请求期间,在请求正文中添加 labels 属性以将标签应用于新资源。例如,用于创建虚拟机实例的请求正文具有以下标签:

body = {
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
   ...,
  "labels": [{
    "key": "webserver",
    "value": "backend"
    },
    {
    "key": "media",
    "value": "images"
   }]
 }

创建映像和磁盘时,也可以应用相同属性。

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

您可以在资源上添加标签或更新现有标签。

Console

  1. 转到要为其添加标签的各个资源页面。
  2. 选中要添加标签的资源旁边的复选框。
  3. 点击显示信息面板以展开标签列。
  4. 根据需要更新标签或添加新标签。
  5. 保存更改。

gcloud

借助 gcloud 命令行工具,使用带 --update-labels 标志的 update 子命令添加或更改标签。例如,要向磁盘添加标签,请使用 gcloud compute disks update [DISK] --update-labels 子命令:

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

如果您提供的标签键已存在,该工具将使用新的标签值来更新现有键。如果您提供新键,则该工具将向标签列表添加新键。

对于实例、快照和映像,请使用 gcloud compute instancesgcloud compute snapshotsgcloud compute images 命令。

API

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

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

例如,以下代码段向实例的 setLabels 方法发出请求。您也可以向磁盘快照映像setLabels 方法发出请求:

Request

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

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

同样,在通过指定 labels 对象来创建资源时,您可以向资源添加标签。

获取 API 请求的标签指纹

在 API 中更新或添加标签时,您需要提供请求的最新标签指纹,以防止与其他请求发生冲突。只有 API 请求才需要该指纹,GCP Consolegcloud 工具不需要指纹。

要获取最新的标签指纹以便您发出请求,请对各个资源执行 GET 请求。例如,以下代码段获取实例的 labelsFingerprint。您可以对磁盘快照映像发出类似请求。

查找 labelFingerprint 属性:

Request

GET https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance
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": {
  "env": "test"
 },
 "labelFingerprint": "p1ty_9HoBk0="
}

移除标签

Console

  1. 转到要为其添加标签的各个资源页面。
  2. 选中要移除标签的资源旁边的复选框。
  3. 点击显示信息面板以展开标签列。
  4. 点击要移除的所有标签旁边的 X
  5. 保存更改。

gcloud

使用 gcloud 命令行工具,运行带 --remove-labels 标志的 update 命令。提供一组要移除的标签键。例如:

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

对于快照和映像,请使用 gcloud compute snapshotsgcloud compute images 集合。

API

在 API 中,向相应 API 资源的 setLabels 方法发出 POST 请求,这些资源包括:实例磁盘快照

提供当前 labelsFingerprint 和空标签列表以移除所有标签,或提供要保留的标签的列表(忽略要移除的标签)。例如:

Request

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

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

使用标签过滤搜索

您可以搜索资源并按标签过滤结果。

Console

  1. 转到要为其添加标签的各个资源页面。
    • 对于实例,请转到“VM 实例”页面
    • 对于磁盘,请转到磁盘页面
    • 对于快照,请转到快照页面
    • 对于映像,请转到映像页面
    • 如果出现提示,请选择您的项目并点击继续
    • 在搜索栏中,开始键入 labels.,搜索栏将自动列出您可以按其进行过滤的标签。

gcloud

gcloud 中,发出 list 请求并使用 --filter 标志。要按标签进行过滤,请使用语法 labels.key=[VALUE]。例如,如果您想要按键为 env、值为 dev 的标签进行过滤,可以运行以下命令:

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

有关 gcloud 工具中过滤条件语法的完整说明,请参阅 gcloud topic filters 文档

API

在 API 中,使用网址编码的 filter 查询参数发出列表请求。例如,要基于其键 env 等于值 dev 的标签进行过滤,请发出以下 GET 请求:

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

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

实例标签和网络标记之间的关系

过去,标签和标记是相关的。例如,如果您向虚拟机实例添加了 webserver:test 标签,那么 Compute Engine 将自动向该实例添加 webserver 标记。

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

要了解如何创建标记,请参阅网络标记页面

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档