编写 gcloud CLI 命令

除了从命令行运行 gcloud CLI 命令之外,您还可以通过脚本或其他自动化功能运行这些命令,例如,在使用 Jenkins 自动执行 Google Cloud Platform 任务时运行这些命令。

授权

Google Cloud SDK 工具支持两种授权方法:

  • 用户帐号授权
  • 服务帐号授权

如果您要在单台机器上运行脚本或其他自动化功能,建议您使用用户帐号授权。

要授予访问权限并执行其他常见 Cloud SDK 设置步骤,请执行以下操作:

    gcloud init

如果您要在生产环境中的多台机器上部署脚本或其他自动化功能,建议您使用服务帐号进行授权。如果您要在 Google Compute Engine 虚拟机实例(其中所有用户都具有 root 访问权限)上运行 gcloud CLI 命令,我们同样建议您使用服务帐号进行授权。

要使用服务帐号进行授权,请使用现有服务帐号或通过 Google Cloud Platform Console 创建一个新帐号。在服务帐号表的选项列中,以 JSON 格式密钥文件的形式创建并下载关联的私钥。

要运行授权命令,请使用 gcloud auth activate-service-account

    gcloud auth activate-service-account --key-file [KEY_FILE]

要通过 SSH 连接到您的虚拟机实例,您可以使用 gcloud compute ssh(负责处理身份验证)。您可以使用 gcloud compute config-ssh 配置 SSH 配置文件。

有关对 Cloud SDK 工具授权的详细说明,请参阅此综合指南

停用提示

某些 gcloud CLI 命令是交互式命令,这些命令会提示用户确认操作,或请求对已输入命令的进行额外的输入。

在大多数情况下,当您通过脚本或其他自动化功能运行命令时,并不希望看到提示。要停用 gcloud CLI 命令中的提示,您可以将配置中的 disable_prompts 属性设置为 True,或使用全局 --quiet-q 标志。需要额外的确认或输入时,大多数交互式命令都具有默认值。如果提示被停用,系统将使用这些默认值。

例如:

    gcloud --quiet debug targets list

请注意,--quiet 标志被插入到命令的前面部分。

处理输出

如果您希望脚本或其他自动化功能根据 gcloud CLI 命令的输出有条件地执行操作,请遵循以下规则:

  • 请勿依赖标准错误中显示的消息。

    这些消息可能会在未来的 gcloud CLI 版本中发生变化,并破坏您的自动化功能。

  • 请勿依赖标准输出中显示的消息的原始输出结果。

    任何命令的默认输出都可能会在未来版本中发生更改。要最大程度降低这些更改造成的影响,您可以使用 --format 标志,通过以下某种方法设置输出的格式:--format=json|yaml|csv|text|list,从而指定要返回的值。如需获取更多选项,请运行 $ gcloud topic formats。

    您可以使用 projections 修改 --format 的默认输出。为了增加粒度,请使用 --filter 标志,以便根据表达式返回一部分值。然后,您可以针对这些返回的值编写脚本。

    要查看为输出设置格式以及过滤输出的示例,请参阅以下章节。

  • 依赖于命令退出状态。

    如果退出状态不为零,则会发生错误,并且输出可能不完整(除非命令文档另有说明)。例如,某个命令本来可以创建多个资源,而现在该命令可能只能创建少量资源,在标准输出中列出这些资源,然后以非零状态退出。或者,您可以使用 show_structured_logs 属性来解析错误日志。请运行 $ gcloud config 以查看更多详情。

过滤和格式设置的示例

要学习有关使用过滤条件和格式设置标志的交互式教程,请使用以下按钮启动教程:

在 Cloud Shell 中打开

以下是使用 gcloud CLI 命令进行格式设置和过滤的常见用法示例:

列出在地区 us-central1-a 中创建的实例:

    gcloud compute instances list --filter="zone:us-central1-a"

以 JSON 格式列出标签与特定值匹配的项目(例如,label.env 为“test”,label.version 为“alpha”):

    gcloud projects list --format="json" \
    --filter="labels.env=test AND labels.version=alpha"

列出使用本地时区指定了创建日期和时间的项目:

    gcloud projects list \
    --format="table(name, project_id, createTime.date(tz=LOCAL))"

以表格式列出在特定日期后创建的项目:

    gcloud projects list \
    --format="table(projectNumber,projectId,createTime)" \
    --filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"

请注意,在最后一个示例中,使用了键上的投影。设置日期格式后,过滤器会被应用于 createTime 键。

列出区域配额的嵌套表:

    gcloud compute regions describe us-central1 \
    --format="table(quotas:format='table(metric,limit,usage)')"

以 CSV 格式打印全球配额的展开列表:

    gcloud compute project-info describe --flatten='quotas[]' \
    --format='csv(quotas.metric,quotas.limit,quotas.usage)'

以表格式列出计算实例资源(带有装饰框和标题,按名称排序):

    gcloud compute instances list \
    --format='table[box,title=Instances](name:sort=1,zone:title=zone,status)'

列出已通过项目身份验证的用户电子邮件地址:

    gcloud info --format='value(config.account)'

脚本示例

借助这种格式设置和过滤功能,您可以将 gcloud CLI 命令整合到脚本中,以便轻松提取嵌入的信息。

如果要列出与所有项目的服务帐号关联的所有密钥,您需要遍历所有项目,并且,对于每个项目,您都需要获取与该项目关联的所有服务帐号。请获取每个服务帐号的所有密钥。完成过程如下所示:

以 bash 脚本的形式:

#!/bin/bash
for project in  $(gcloud projects list --format="value(projectId)")
do
  echo "ProjectId:  $project"
  for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
   do
     echo "    -> Robot $robot"
     for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
        do
          echo "        $key"
     done
   done
done

或者以 Windows PowerShell 的形式:

foreach ($project in gcloud projects list --format="value(projectId)")
{
  Write-Host "ProjectId: $project"
  foreach ($robot in  gcloud iam service-accounts list --project $project --format="value(email)")
  {
      Write-Host "    -> Robot $robot"
      foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
      {
        Write-Host "        $key"
      }
  }
}

通常,您需要解析输出以进行处理。例如,一种实用的做法是,将服务帐号信息写入数组并在 CSV 格式的多值 serviceAccounts.scope() 字段中分隔值。您可以使用以下脚本实现此目的:

#!/bin/bash
for scopesInfo in $(
    gcloud compute instances list --filter=name:instance-1 \
        --format="csv[no-heading](name,id,serviceAccounts[].email.list(),
                      serviceAccounts[].scopes[].map().list(separator=;))")
do
      IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
      NAME="${scopesInfoArray[0]}"
      ID="${scopesInfoArray[1]}"
      EMAIL="${scopesInfoArray[2]}"
      SCOPES_LIST="${scopesInfoArray[3]}"

      echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
      echo ""
      IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
      for SCOPE in  "${scopeListArray[@]}"
      do
        echo "  SCOPE: $SCOPE"
      done
done

更多信息

如需查看有关使用 gcloud CLI 构建基本脚本的分步指南,请参阅有关自动执行 GCP 任务的新手指南

要查看内置到 gcloud CLI filtersformatsprojections 标志的输出配置功能的更多相关示例,请参阅这篇有关过滤和格式设置的博文

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

发送以下问题的反馈:

此网页
Cloud SDK 文档