gcloud compute 使用上のヒント


このページでは、gcloud コマンドライン ツールを使用して Compute Engine リソースを管理するときに役立つヒントを紹介します。使用できるすべての gcloud compute フラグとコマンドの一覧については、組み込みのコマンドヘルプ(--help)を使用するか、公開されているリファレンス ドキュメントまたは gcloud core のドキュメントをご覧ください。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

リソースに関する情報の取得

Compute Engine リソースに関する情報をフェッチするには、2 つの方法があります。リソースの一覧を取得する場合は、list コマンドを使用します。特定の 1 つのリソースに関する詳細を取得する場合は、describe コマンドを使用します。

list コマンドを使用してリソースを取得する

list コマンドは、リクエストされたリソースに関する特に重要なデータを、人が読める表にまとめて返すよう設計されています。必要に応じて、結果を絞り込むフィルタを使用すると、より短いリストで関連性の高い結果を取得できます。

正規表現による名前の絞り込み
RE2 構文を使用して、リソース名(たとえば、インスタンス名やディスク名)を絞り込むことができます。gcloud compute instances list コマンドの詳細を調べる。
コマンドのフラグ
--limit

返される結果の最大件数です。このフラグは、describe コマンドを使用してリソースを取得するセクションで説明されている --sort-by フラグと一緒に使用すると特に便利です。

--sort-by SORT_BY

並べ替えの基準となるフィールドです(該当する場合)。降順の並べ替えを実行するには、値の前に波形ダッシュ(~)を付けます。このフラグは、--flatten--sort-by--filter--limit の順序で適用される他のフラグと連携します。

describe コマンドを使用してリソースを取得する

describe コマンドは、1 つのリソースに関するデータを表示するように設計されています。describe コマンドではリソースの名前を指定する必要があります。リソース名を思い出せない場合は、list コマンドを実行してリソースの一覧を取得できます。たとえば、次の 2 つのコマンドは、イメージを一覧表示してイメージ名とそれに関連付けられたプロジェクトを取得し、それらを 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 コマンドからの結果を絞り込むには、key ~ value 演算子を使用した --filter フラグを指定します。たとえば、次のようにインスタンス名に「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

statusDONE で、httpStatus200 ではないゾーン オペレーションの一覧を取得するには、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

us-central1-a 内のディスクの一覧を名前の降順(--sort-by ~NAME)で取得するには、disks list コマンドを次のように使用します。

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

シナリオによっては、リソースへの完全 URI リンクを取得する必要が生じることがあります。たとえば、リソースリンクの一覧を入力として受け取るコマンドやアプリケーションに list コマンドからの出力を渡す場合などです。完全 URI のリソースリンクを表示するには、list コマンドで --uri フラグを使用します。

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 コマンドの例

1 つのインスタンスのみについて詳細情報を取得するには、インスタンス(ゾーンを含む)を指定します。たとえば、「asia-east1-b」ゾーンにある「example-instance」というインスタンスについての情報を取得するには、instances describe コマンドを次のように使用します。

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

デフォルトでは、このコマンドは YAML 出力を返します。出力を JSON やテキスト(1 行に 1 プロパティずつ)に変更するには、--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
...

次に、その URI を operations describe コマンドで使用します。

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

リセットがもたらす影響については、インスタンスのリセットのドキュメントをご覧ください。