gcloud CLI コマンドのスクリプティング

gcloud CLI コマンドは、コマンドラインからだけでなく、スクリプトや他の自動化からも実行できます。たとえば、Jenkins を使用して Google Cloud Platform のタスクを自動化する場合などです。

承認

Google Cloud SDK ツールは次の 2 つの承認方法をサポートしています。

  • ユーザー アカウントの承認
  • サービス アカウントの承認

ユーザー アカウントの承認は、スクリプトや他の自動化を 1 台のマシンで実行する場合に推奨されます。

アクセスを承認し、Cloud SDK のその他の一般的な設定手順を行うには、次のコマンドを実行します。

    gcloud init

サービス アカウントの承認は、スクリプトや他の自動化を本番環境の複数のマシンにデプロイする場合に推奨されます。すべてのユーザーが root にアクセスできる Google Compute Engine 仮想マシン インスタンスで gcloud CLI コマンドを実行する場合にもこの承認方法が推奨されます。

サービス アカウントの承認を使用するには、既存のサービス アカウントを使用するか、Google Cloud Platform Console で新しいサービス アカウントを作成します。サービス アカウント表の [オプション] 列から、関連付けられた秘密鍵を JSON 形式の鍵ファイルとして作成およびダウンロードします。

承認を行うには、gcloud auth activate-service-account を使用します。

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

gcloud compute ssh を使用して VM インスタンスに SSH 接続できます。この場合、認証も行われます。SSH の構成ファイルは gcloud compute config-ssh で構成できます。

Cloud SDK ツールの承認の詳細については、総合的なガイドをご覧ください。

プロンプトの無効化

gcloud CLI コマンドには対話型のものがあり、ユーザーに操作の確認や、入力したコマンドに対するさらなる入力を求めます。

ほとんどの場合、スクリプトやその他の自動機能でコマンドを実行する場合、この機能は望ましくありません。構成disable_prompts プロパティを True に設定するか、グローバル --quiet または -q フラグを使用すると、gcloud CLI コマンドからプロンプトを無効にできます。ほとんどの対話型コマンドには、追加の確認や入力が必要な場合のデフォルト値があります。プロンプトを無効にすると、そのデフォルト値が使用されます。

次に例を示します。

    gcloud --quiet debug targets list

--quiet フラグは先頭の項目の右側に挿入します。

出力の処理

スクリプトや他の自動化に、gcloud CLI コマンドの出力に基づいた条件付きのアクションを実行させるには、次の点に注意してください。

  • 標準エラーに表示されるメッセージに依存するアクションを使用しない。

    gcloud CLI の今後のバージョンで変更され、自動化が機能しなくなる原因になる可能性があります。

  • 標準出力に表示されるメッセージの未加工の出力に依存するアクションを使用しない。

    コマンドのデフォルトの出力は、今後のリリースで変更される可能性があります。このような変更による影響を最小限に抑えるには、出力を書式設定する --format フラグ(--format=json|yaml|csv|text|list)を使用して、返される値を指定します。オプションの詳細については、$ gcloud topic formats を実行してご確認ください。

    projections を使用して、--format からのデフォルト出力を変更できます。さらに詳細に設定するには、--filter フラグを使用して、式に応じて値のサブセットが返されるようにします。これらの戻り値からスクリプトを作成できます。

    以下のセクションで、出力の形式設定とフィルタ設定の例を示します。

  • コマンドの終了ステータスに依存するアクションを使用する。

    終了ステータスが 0 ではない場合はエラーが発生しています。コマンドの説明に特に記載されていない限り、出力が不完全である可能性があります。たとえば、複数のリソースを作成するコマンドで一部のリソースしか作成されない場合、それらのリソースが標準出力に表示され、0 以外のステータスで終了します。代わりに、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)'

ボックスの装飾とタイトルを含む Compute インスタンスを名前でソートし、表形式でリストします。

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

ユーザーのメールアドレスで認証されたプロジェクトをリストします。

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

スクリプティングの例

書式とフィルタを設定するこの機能を使用して、gcloud CLI コマンドを 1 つのスクリプトにまとめ、組み込まれた情報を簡単に抽出できます。

すべてのプロジェクトのサービス アカウントに関連付けられたすべてのキーをリストする場合、すべてのプロジェクト全体に対して、および各プロジェクトに対して手順を繰り返し、それに関連付けられたすべてのサービス アカウントを取得する必要があります。各サービス アカウントに対して、すべてのキーを取得します。以下のようにして、これを行うことができます。

バッチ スクリプト:

#!/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"
      }
  }
}

出力を解析して処理する必要が生じる場合もあります。たとえば、サービス アカウント情報を 1 つの配列に書き込み、複数値の 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 のドキュメント