gcloud compute 使用提示


本页提供了一些有助于您使用 gcloud 命令行工具管理 Compute Engine 资源的提示。如需查看所有可用 gcloud compute 标志和命令的完整列表,您可以使用内置的命令帮助 (--help)、已发布的参考文档gcloud core 文档

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

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

获取资源的信息

您可以通过以下两种方式提取 Compute Engine 资源的相关信息:使用 list 命令返回资源列表,以及使用 describe 命令返回特定资源的相关详细信息。

使用 list 命令提取资源

list 命令旨在以直观易懂的表格形式返回所请求资源的最相关数据。您还可以选择过滤结果,以返回包含更相关结果的更简洁列表。

使用正则表达式对名称进行过滤
您可以使用 RE2 语法来匹配资源名称(例如实例或磁盘名称)。参阅 gcloud compute instances list 命令。
命令标志
--limit

返回的结果数上限。此标志与 --sort-by 标志(请参阅使用 describe 命令提取资源部分)一起使用时会特别实用。

--sort-by SORT_BY

指定排序依据的字段(如果适用)。如需执行降序排序,请在值的前面加上波浪号(“~”)。此标志与按以下顺序应用的其他标志交互:--flatten--sort-by--filter--limit

使用 describe 命令提取资源

describe 命令用于显示一项资源的相关数据。您必须在 describe 命令中提供资源名称。如果您忘记了资源名称,则可以运行 list 命令来获取资源列表。例如,下面两个命令展示的情景是列出映像以获取映像名称及其关联的项目,并将获取到的信息作为输入提供给 describe 命令:

gcloud compute images list
NAME                                PROJECT        FAMILY     DEPRECATED STATUS
...
centos-7-v20170620                  centos-cloud   centos-7              READY
...
debian-9-stretch-v20170619          debian-cloud   debian-9              READY
...
gcloud compute images describe debian-9-stretch-v20170619 --project debian-cloud

describe 命令的默认输出为 YAML 格式,但您可以使用 --format 标志在 JSON、YAML 和文本输出格式之间进行选择。 JSON 输出格式有助于解析输出,而文本输出格式则有助于将每个属性单独列为一行。

gcloud compute regions describe us-central1 --format json
{
  "creationTimestamp": "2013-09-06T10:36:54.847-07:00",
  "description": "us-central1",
  "id": "6837843067389011605",
  "kind": "compute#region",
  "name": "us-central1",
  ...
  "status": "UP",
  "zones": [
    "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a",
    "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b",
    "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f"
  ]
}

示例

list 命令示例

列出资源时,您会获得一份一目了然的摘要数据表。例如,您可以使用 instances list 命令返回项目中实例的相关摘要数据:

gcloud compute instances list
NAME               ZONE          MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP     STATUS
example-instance   asia-east1-b  e2-standard-2 10.240.95.199  107.167.182.44  RUNNING
example-instance2  us-central1-a e2-standard-2 10.240.173.254 23.251.148.121  RUNNING
test-instance      us-central1-a e2-standard-2 10.240.118.207 23.251.153.172  RUNNING

您可以使用正则表达式过滤 list 命令的结果,只需加入 --filter 标志与 key ~ value 运算符即可。例如,过滤实例列表,以使其仅包含名称中含有“test”的实例:

gcloud compute instances list --filter="name ~ .*test.*"
NAME           ZONE          MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP     STATUS
test-instance  us-central1-a e2-standard-2 10.240.118.207 23.251.153.172  RUNNING

如需返回 statusDONEhttpStatus 不为 200 的地区操作列表,请对 operations list 命令应用 zone 过滤条件,然后对结果使用 grep 命令:

gcloud compute operations list --filter="zone:(us-central1-a)" | grep DONE | grep -v 200
NAME                                                    HTTP_STATUS TYPE   TARGET                               STATUS
operation-1397752585735-4f73fa25b4b58-f0920fd5-254d709f 400         delete us-central1-a/disks/example-instance DONE
operation-1398357613036-4f7cc80cb41e0-765bcba6-34bbd040 409         insert us-central1-a/instances/i-1          DONE
operation-1398615481237-4f8088aefbe08-cc300dfa-2ce113cf 409         insert us-central1-a/instances/i-2          DONE

如需按名称的降序顺序 (--sort-by ~NAME) 获取 us-central1-a 中的磁盘列表,请使用 disks list 命令:

gcloud compute disks list --sort-by ~NAME --filter="zone:(us-central1-a)"

在某些情景中,您可能需要获取资源的完整 URI 链接,例如,您在请求中将 list 命令的输出传递给另一个接受资源链接列表的命令或应用。如需显示完整的 URI 资源链接,请将 --uri 标志与 list 命令搭配使用。

gcloud compute instances list --uri --filter="name~'^example-.*'"
https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance1
https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances/example-instance2

如需在删除实例的命令中使用先前的 list 命令输出,请使用以下命令:

gcloud compute instances delete $(gcloud compute instances list --uri --filter="name~'^example-.*'")

describe 命令示例

如果您只想获取一个实例的相关详细信息,请指定该实例(包括地区)。 例如,您可以使用 instances describe 命令来返回“asia-east1-b”地区中名为“example-instance”的实例的相关信息:

gcloud compute instances describe example-instance --zone asia-east1-b

默认情况下,此命令会返回 YAML 格式的输出。如需将此输出转换为 JSON 或文本格式(每行一个属性),请使用 --format 标志。例如,要返回同一个实例的文本输出,请使用以下命令:

gcloud compute instances describe example-instance --zone asia-east1-b --format text
---
canIpForward:                                False
creationTimestamp:                           2014-04-19T06:43:04.087-07:00
disks[0].autoDelete:                         False
disks[0].boot:                               True
disks[0].deviceName:                         example-instance
...

如需获取特定操作的相关详细信息,请使用 operations list 命令查找该操作的完全限定 URI:

gcloud compute operations list --filter="zone:(us-central1-a)"
NAME                                                    TYPE   TARGET                                      HTTP_STATUS STATUS
operation-1406155165815-4fee4032850d9-7b78077c-a170c5c0 delete us-central1-a/instances/example-instance    200         DONE
operation-1406155180632-4fee4040a67c1-bf581ed8-ab5af2b8 delete us-central1-a/instances/example-instance-2  200         DONE
...

然后在 operations describe 命令中使用该 URI:

gcloud compute operations describe \
operation-1406155165815-4fee4032850d9-7b78077c-a170c5c0 --zone us-central1-a
endTime: '2014-07-23T15:40:02.463-07:00'
id: '31755455923038965'
insertTime: '2014-07-23T15:39:25.910-07:00'
kind: compute#operation
name: operation-1406155165815-4fee4032850d9-7b78077c-a170c5c0
operationType: delete
progress: 100
...

以下命令会获取 JSON 格式 (--format json) 的实例设置。

gcloud compute instances describe example-instance \
    --zone us-central1-a
    --format json
{
   ...
   "name": "example-instance",
   "networkInterfaces": [
    {
      "accessConfigs": [
        {
          "kind": "compute#accessConfig",
          "name": "external-nat",
          "natIP": "107.167.187.66",
          "type": "ONE_TO_ONE_NAT"
        }
      ],
      "name": "nic0",
      "network": "https://www.googleapis.com/compute/v1/projects/myproject/global/networks/default",
      "networkIP": "10.240.111.51"
    }
   ],
   ...
   "status": "RUNNING"
   ...
}

查看授予给您的用户身份

可使用以下命令了解您获得了哪个账号的授权:

gcloud auth list

撤消刷新令牌

如需撤消您正在使用 Google Cloud CLI 的机器上的账号凭据,请使用以下命令:

gcloud auth revoke

这会强制您使用 gcloud init 重新进行身份验证。

您也可以撤消 gcloud CLI 访问您的资源的权限。例如,如果您的刷新令牌被破解,您可以执行此操作。如需撤消 gcloud CLI 的权限,请执行以下操作:

  1. 登录您的 Google 账号页面。
  2. 点击安全,然后点击账号权限部分中的查看全部
  3. 选择 Google Cloud SDK 并点击撤消访问权限

重新启动实例

如需重置“us-central1-a”地区中名为“example-instance”的实例,请使用 instances reset 命令:

gcloud compute instances reset example-instance --zone us-central1-a

如需了解重置的影响,请参阅重置实例文档。