标签是键值对,可用于在 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
-
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init - Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
什么是标签?
标签是一种键值对,可分配给 Google Cloud 实例。 它们可以帮助您按照所需的粒度大规模组织这些资源并管理费用。您可以将标签附加到各项资源,然后根据其标签对资源进行过滤。标签的相关信息会转发到结算系统,以便您按标签细分结算费用。使用内置的结算报告,您可以按资源标签对费用进行过滤和分组。您还可以使用标签查询结算数据导出。
标签要求
应用于资源的标签必须符合以下要求:
- 每个资源最多可以有 64 个标签。
- 每个标签都必须采用键值对形式。
- 键至少包含 1 个字符,最多包含 63 个字符,且不能为空。值可以为空,且最多包含 63 个字符。
- 键和值只能包含小写字母、数字字符、下划线和短划线。所有字符必须使用 UTF-8 编码,允许使用国际字符。 键必须以小写字母或国际字符开头。
- 标签的键部分在单个资源内必须是唯一的。不过,您可以将同一个键用于多个资源。
这些限制适用于每个标签的键和值,以及带有标签的各个 Google Cloud 资源。您可以对一个项目的所有资源应用任意数量的标签。
标签的常见用途
以下是标签的一些常见使用场景:
团队或成本中心标签:根据团队或成本中心添加标签,以区分不同团队所拥有的实例(例如
team:research和team:analytics)。您可以在核算成本或制定预算时使用此类标签。组件标签:例如
component:redis、component:frontend、component:ingest和component:dashboard。环境或阶段标签:例如
environment:production和environment:test。状态标签:例如
state:active、state:readytodelete、state:archive。所有权标签:用于标识负责运营的团队,例如:
team:shopping-cart。
- 虚拟机标签:标签可附加到虚拟机。您在过去定义的虚拟机标记显示为没有值的标签。
我们不建议创建大量唯一标签,例如为每个 API 调用的时间戳或个别值创建标签。这种方法的问题在于,当值经常变化或键导致目录杂乱时,很难有效地过滤和报告资源。
标签和标记
标签可用作资源可查询的注释,但不能用于设置政策的条件。通过对政策进行精细控制,标记提供了一种有条件地允许或拒绝政策的方法,具体取决于资源是否具有特定的标记。如需了解详情,请参阅标记概览。
在 Compute Engine 上使用标签
您可以将标签应用于以下 Compute Engine 资源:
- 虚拟机 (VM) 实例
- 图片
- 永久性磁盘
- 永久性磁盘快照
您还可以在如下所示的相关 Google Cloud 组件上使用标签:
- Cloud Storage 存储桶
- 网络资源:
- 与内部应用负载均衡器搭配使用的转发规则(不支持其他负载均衡器转发规则)
- VPN 隧道
- 静态外部 IP 地址
例如,您可以将以下标签作为键值对添加到资源中:
{
"labels": {
"vmrole": "webserver",
"environment": "production",
"location": "west",...
}
}
创建具有标签的资源
在创建新资源时,您可以向该资源应用标签。
控制台
gcloud
如需添加标签,请将 create 子命令与 --labels 标志结合使用。您可以使用以下 gcloud 命令为 Compute Engine 资源添加标签:
- 对于虚拟机实例,请使用
gcloud compute instances create命令。 - 对于快照,请使用
gcloud compute disks snapshot命令。 - 对于映像,请使用
gcloud compute images create命令。 - 对于磁盘,请使用
gcloud compute disks create命令。
示例
gcloud compute instances create ... \
--labels webserver=backend,media=images
REST
在 API 中,在发出添加新资源的 POST 请求期间,在请求正文中添加 labels 属性以将标签应用于新资源。
- 对于虚拟机实例,请使用
instances.insert()方法。 - 对于快照,请使用
disks.createSnapshot()方法。 - 对于映像,请使用
images.insert()方法。 - 对于磁盘,请使用
disks.insert()方法。
例如,以下代码段会发出 POST 请求来创建具有标签 webserver:backend 和 media: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。
控制台
gcloud
如需添加或更改标签,请使用带 --update-labels 标志的 update 子命令。您可以使用以下 gcloud 命令更新 Compute Engine 资源的标签:
- 对于虚拟机实例,请使用
gcloud compute instances update命令。 - 对于快照,请使用
gcloud compute snapshots update命令。 - 对于映像,请使用
gcloud compute images update命令。 - 对于磁盘,请使用
gcloud compute disks update命令。 - 对于转发规则,请使用
gcloud compute forwarding-rules update命令。 - 对于静态外部 IP 地址,请使用
gcloud beta compute addresses update命令。 - 对于 VPN 隧道,请使用
gcloud beta compute vpn-tunnels update命令。
示例
gcloud compute disks update example-disk \
--update-labels backend=webserver,media=images
如果您提供的标签键已经存在,Google Cloud CLI 会使用新标签值来更新现有键。如果您提供新键,则该工具会将新键添加到标签列表中。
REST
要添加或更新标签,请使用最新的指纹和要应用的完整标签列表对资源的 setLabels 方法发出 POST 请求。
- 对于虚拟机实例,请使用
instances.setLabels()方法。 - 对于快照,请使用
snapshots.setLabels()方法。 - 对于映像,请使用
images.setLabels()方法。 - 对于磁盘,请使用
disks.setLabels()方法。 - 对于转发规则,请使用
forwardingRules.setLabels()方法。 - 对于区域静态外部 IP 地址,请使用 Beta 版
addresses.setLabels()方法。 - 对于全球静态外部 IP 地址,请使用 Beta 版
globalAddresses.setLabels()方法。 - 对于 VPN 隧道,请使用 Beta 版
vpnTunnels.setLabels()方法。
与元数据和标记类似,如果资源当前具有您想要保留的标签,则除了您要添加的任何新标签,还必须在请求中包含这些标签。
例如,以下代码段会向虚拟机实例发出 POST 请求来设置 environment:test 和 an-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。
控制台
gcloud
如需查看标签,请使用 describe 子命令。您可以使用以下 gcloud 命令查看 Compute Engine 资源的标签:
- 对于虚拟机实例,请使用
gcloud compute instances describe命令。 - 对于快照,请使用
gcloud compute snapshots describe命令。 - 对于映像,请使用
gcloud compute images describe命令。 - 对于磁盘,请使用
gcloud compute disks describe命令。 - 对于转发规则,请使用
gcloud compute forwarding-rules describe命令。 - 对于静态外部 IP 地址,请使用
gcloud beta compute addresses describe命令。 - 对于 VPN 隧道,请使用
gcloud beta compute vpn-gateways describe命令。
示例
gcloud compute disks describe example-disk
输出包含标签:
... id: '5047929990219134234' kind: compute#disk labelFingerprint: GHZ1Un209U=0 labels: environment: dev department: finance ...
REST
如需检索标签,请向以下资源发出 GET 请求:
- 对于虚拟机实例,请使用
instances.get()方法。 - 对于快照,请使用
snapshots.get()方法。 - 对于映像,请使用
images.get()方法。 - 对于磁盘,请使用
disks.get()方法。 - 对于转发规则,请使用
forwardingRules.get()方法。 - 对于区域静态外部 IP 地址,请使用 Beta 版
addresses.get()方法。 - 对于全球静态外部 IP 地址,请使用 Beta 版
globalAddresses.get()方法。 - 对于 VPN 隧道,请使用 Beta 版
vpnTunnels.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 console 和 Google Cloud CLI 工具不需要指纹。
如需获取最新的 labelsFingerprint,请向以下资源发出 GET 请求:
- 对于虚拟机实例,请使用
instances.get()方法。 - 对于快照,请使用
snapshots.get()方法。 - 对于映像,请使用
images.get()方法。 - 对于磁盘,请使用
disks.get()方法。 - 对于转发规则,请使用
forwardingRules.get()方法。 - 对于区域静态外部 IP 地址,请使用 Beta 版
addresses.get()方法。 - 对于全球静态外部 IP 地址,请使用 Beta 版
globalAddresses.get()方法。 - 对于 VPN 隧道,请使用 Beta 版
vpnTunnels.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。
控制台
gcloud
如需添加或更改标签,请使用带 --remove-labels 标志的 update 子命令。您可以使用以下 gcloud 命令移除 Compute Engine 资源的标签:
- 对于虚拟机实例,请使用
gcloud compute instances update命令。 - 对于快照,请使用
gcloud compute snapshots update命令。 - 对于映像,请使用
gcloud compute images update命令。 - 对于磁盘,请使用
gcloud compute disks update命令。 - 对于转发规则,请使用
gcloud compute forwarding-rules update命令。 - 对于静态外部 IP 地址,请使用
gcloud beta compute addresses update命令。 - 对于 VPN 隧道,请使用
gcloud beta compute vpn-tunnels update命令。
示例
gcloud compute disks update example-disk \
--remove-labels backend,media
REST
如需移除标签,请使用最新指纹和要应用的完整标签列表对以下资源的 setLabels 方法发出 POST 请求:
- 对于虚拟机实例,请使用
instances.setLabels()方法。 - 对于快照,请使用
snapshots.setLabels()方法。 - 对于映像,请使用
images.setLabels()方法。 - 对于磁盘,请使用
disks.setLabels()方法。 - 对于转发规则,请使用
forwardingRules.setLabels()方法。 - 对于区域静态外部 IP 地址,请使用 Beta 版
addresses.setLabels()方法。 - 对于全球静态外部 IP 地址,请使用 Beta 版
globalAddresses.setLabels()方法。 - 对于 VPN 隧道,请使用 Beta 版
vpnTunnels.setLabels()方法。
提供当前的 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。
控制台
gcloud
如需根据标签进行过滤,请将以下资源的 list 子命令与 --filter 标志结合使用:
- 对于虚拟机实例,请使用
gcloud compute instances list命令。 - 对于快照,请使用
gcloud compute snapshots list命令。 - 对于映像,请使用
gcloud compute images list命令。 - 对于磁盘,请使用
gcloud compute disks list命令。 - 对于转发规则,请使用
gcloud compute forwarding-rules list命令。 - 对于静态外部 IP 地址,请使用
gcloud beta compute addresses list命令。 - 对于 VPN 隧道,请使用
gcloud beta compute vpn-tunnels list命令。
--filter 标志的值必须采用 labels.KEY=VALUE 格式。例如,如果要按键为 env、值为 dev 的标签进行过滤,您可以运行以下命令:
gcloud compute instances list \
--filter labels.env=dev
如需详细了解 gcloud CLI 中的过滤条件语法,请参阅 gcloud topic filters 文档。
REST
如需过滤资源,请向以下资源的 list 方法发出 GET 请求,并添加过滤条件字段:
- 对于虚拟机实例,请使用
instances.list()方法。 - 对于快照,请使用
snapshots.list()方法。 - 对于映像,请使用
images.list()方法。 - 对于磁盘,请使用
disks.list()方法。 - 对于转发规则,请使用
forwardingRules.list()方法。 - 对于区域静态外部 IP 地址,请使用 Beta 版
addresses.list()方法。 - 对于全球静态外部 IP 地址,请使用 Beta 版
globalAddresses.list()方法。 - 对于 VPN 隧道,请使用 Beta 版
vpnTunnels.list()方法。
例如,如需列出项目 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 不会为该虚拟机创建标记。如果需要在虚拟机上创建标记,必须手动进行创建。
如需详细了解标记及其用途,请参阅标记概览。
后续步骤
- 了解如何比较标记和网络标记。
- 了解如何管理 Compute Engine 资源的标记。
- 查看
filter查询参数,了解过滤。