コンテンツにスキップ

Google Cloud CLI@Google Cloudリソース

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. 設定ファイル

Configuration

現在の認証情報を設定する。

$ cat /root/.config/gcloud/configurations/config_<プロジェクト名>

[core]
account = example@gmail.com
project = foo-project


ログファイル

gcloudコマンドのログを出力する。

gcloudコマンドはわかりにくいエラーを出力することがあり、足がかりを掴めることがある。

$ cat /root/.config/gcloud/logs/<タイムスタンプ>/<タイムスタンプ>.log

2023-06-26 06:23:43,998 DEBUG    root            Loaded Command Group: ['gcloud', 'auth']
2023-06-26 06:23:44,000 DEBUG    root            Loaded Command Group: ['gcloud', 'auth', 'activate_service_account']
2023-06-26 06:23:44,003 DEBUG    root            Running [gcloud.auth.activate-service-account] with arguments: [--key-file: "foo-credential.json", ACCOUNT: "foo-serviceaccount@foo-project.iam.gserviceaccount.com"]
2023-06-26 06:23:44,003 DEBUG    root            'str' object has no attribute 'get'

# エラーがあれば
Traceback (most recent call last):
...


02. Google Cloud CLIのセットアップ

auth

▼ authとは

プリンシパル (例:ユーザー、サービスアカウント、グループ、ドメイン、KubernetesのServiceAccount) の認証を行う。

▼ activate-service-account

認証情報ファイルを使用して、ServiceAccountにログインする。

認証情報ファイルは使用後に削除した方が良いらしい。

$ gcloud auth activate-service-account foo-service-account@foo-project.iam.gserviceaccount.com \
    --key-file foo1-credentials.json


$ gcloud auth list

Credentialed Accounts
ACTIVE  ACCOUNT
        foo1-serviceaccount@foo-project.iam.gserviceaccount.com
*       foo2-serviceaccount@foo-project.iam.gserviceaccount.com
$ gcloud auth activate-service-account bar-service-account@bar-project.iam.gserviceaccount.com \
    --key-file bar-credentials.json \
    --project bar-project


$ gcloud auth list

Credentialed Accounts
ACTIVE  ACCOUNT
        foo1-serviceaccount@foo-project.iam.gserviceaccount.com
        foo2-serviceaccount@foo-project.iam.gserviceaccount.com
*       bar-serviceaccount@bar-project.iam.gserviceaccount.com

▼ application-default login

Google Cloud CLIによるGoogle Cloudリソースへのアクセスを認証するために使用する。

~/.config/gcloud/application_default_credentials.jsonファイルを作成し、認証情報を定義する。

また、これ使用してGoogle Cloudにログインする。

~/.config/gcloud/application_default_credentials.jsonファイルは1個のプリンシパルの認証情報しか持てないため、プリンシパルを切り替える場合はファイルを再作成する必要がある。

$ gcloud auth application-default login
# application_default_credentials.jsonファイル
{
  "client_id": "***.apps.googleusercontent.com",
  "client_secret": "***",
  "quota_project_id": "***",
  "refresh_token": "***",
  "type": "authorized_user",
}

▼ list

切り替え可能なプリンシパルの一覧を取得する。

$ gcloud auth list

Credentialed Accounts
ACTIVE  ACCOUNT
        example1@gmail.com
*       example2@gmail.com

▼ login

IAMユーザーを認証する。

Google Cloud SDKによるGoogle Cloudリソースへのアクセスを認証するために使用する。

$ gcloud auth login

▼ login --update-adc

gcloud auth application-default loginコマンドとgcloud auth loginコマンドを同時に実行する。

これにより、Google Cloud CLIのための認証情報 (~/.config/gcloud/application_default_credentials.jsonファイル) とGoogle Cloud SDKのための認証情報が更新される。

$ gcloud auth login --update-adc

認証のトークンを取得する。

$ gcloud auth print-access-token

環境変数に設定して使用すると良い。

$ export Google Cloud_AUTH_TOKEN=`gcloud auth print-access-token`

▼ revoke

Configurationに設定されているプリンシパルを削除する。

$ gcloud auth list

Credentialed Accounts
ACTIVE  ACCOUNT
        foo1-serviceaccount@foo-project.iam.gserviceaccount.com
        foo2-serviceaccount@foo-project.iam.gserviceaccount.com
*       bar-serviceaccount@bar-project.iam.gserviceaccount.com


# foo2-serviceaccount@foo-project.iam.gserviceaccount.com を削除する
$ gcloud auth revoke foo2-serviceaccount@foo-project.iam.gserviceaccount.com


component

▼ componentとは

gcloudコマンドのコンポーネントを管理する。

▼ install

gcloudコマンドのコンポーネントをインストールする。

$ gcloud components install

別途、コンポーネントを読みこむ必要がある。

$ brew info google-cloud-sdk

To add gcloud components to your PATH, add this to your profile:

  for bash users
    source "$(brew --prefix)/share/google-cloud-sdk/path.bash.inc"

  for zsh users
    source "$(brew --prefix)/share/google-cloud-sdk/path.zsh.inc"
    source "$(brew --prefix)/share/google-cloud-sdk/completion.zsh.inc"

  for fish users
    source "$(brew --prefix)/share/google-cloud-sdk/path.fish.inc"

▼ update

gcloudコマンドのコンポーネントをアップグレードする。

$ gcloud components update

▼ list

gcloudコマンドのコンポーネントの一覧を取得する。

$ gcloud components list


Your current Google Cloud CLI version is: 386.0.0
The latest available version is: 400.0.0

┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                   Components                                                  │
├──────────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬──────────┤
│      Status                               Name                                     ID               Size   │
├──────────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼──────────┤
│ Update Available  BigQuery Command Line Tool                            bq                         1.6 MiB │
│ Update Available  Cloud Storage Command Line Tool                       gsutil                    15.5 MiB                                                        ...

│ Not Installed     kubectl-oidc                                          kubectl-oidc              18.2 MiB │
│ Not Installed     pkg                                                   pkg                                │
└──────────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴──────────┘


config configuration

▼ config configurationとは

gcloudコマンドのConfigurationを操作する。

▼ activate

複数のConfigurationがある場合に、これらを切り替える。

# fooというConfigurationに切り替える
$ gcloud config configurations activate foo

Activated [foo].

▼ create

Configurationを新しく作成する。

# barというConfigurationを新しく作成する
$ gcloud config configurations create bar

Created [bar].
Activated [bar].


# barというConfigurationに新しい作成されたことを確認できる
$ gcloud config configurations list

NAME  IS_ACTIVE  ACCOUNT             PROJECT      COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
foo   False      example@gmail.com   foo-project
bar   True

▼ list

全てのConfigurationと、アクティブプリンシパルとを一覧で取得する。

$ gcloud config configurations list

NAME  IS_ACTIVE  ACCOUNT             PROJECT      COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
foo   False      example@gmail.com   foo-project
bar   True       example@gmail.com   bar-project

▼ rename

現在、非アクティブになっているConfigurationの特定の名前を変更する。

# barというConfigurationをアクティブにする
$ gcloud config configurations activate bar


# fooというConfigurationが非アクティブになっていることを確認する
$ gcloud config configurations list

NAME  IS_ACTIVE  ACCOUNT             PROJECT       COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
foo   False      example@gmail.com   foo-project   asia-northeast1-a
bar   True       example@gmail.com   bar-project   asia-northeast1-a


# fooというConfigurationの名前をfoo-fooに変更する
$ gcloud config configurations rename foo --new-name=foo-foo


# Configurationの名前が変わっている
NAME      IS_ACTIVE  ACCOUNT             PROJECT       COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
foo-foo   False      example@gmail.com   foo-project   asia-northeast1-a
bar       True       example@gmail.com   bar-project   asia-northeast1-a


# Configurationを切り替える
$ gcloud config configurations activate foo-foo


config list

▼ list

現在のログインしているプリンシパルの認証情報を取得する。

*実行例*

$ gcloud config list

[core]
account = example@gmail.com
disable_usage_reporting = True
project = foo-project

# 現在アクティブになっているConfiguration
Your active configuration is: [foo]


config set

▼ set

認証の特定の項目のデフォルト値を設定する。

*実行例*

# Configurationを新しく作成する
$ gcloud config configurations create foo


# アクティブなConfiguration上にプリンシパルを設定する。
$ gcloud config set core/account example@gmail.com

Updated property [core/project].


# アクティブなConfiguration上にプロジェクト名を設定する
$ gcloud config set core/project foo-project

Updated property [core/project].


# アクティブなConfiguration上にリージョンを設定する。
$ gcloud config set compute/region asia-northeast1-a

WARNING: Property validation for compute/region was skipped.
Updated property [compute/region].


# アクティブなConfigurationに一通り値が設定されたことを確認する。
$ gcloud config configurations list

NAME  IS_ACTIVE  ACCOUNT             PROJECT       COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
foo   False      example@gmail.com   foo-project   asia-northeast1-a
bar   True       example@gmail.com   bar-project   asia-northeast1-a


container clusters

▼ container clustersとは

▼ list

GKE Clusterの一覧を取得する。

*実行例*

$ gcloud container clusters list

NAME               LOCATION         MASTER_VERSION   MASTER_IP    MACHINE_TYPE   NODE_VERSION    NUM_NODES   STATUS
foo-gke-cluster    asia-northeast1  1.22.0-gke       *.*.*.*      e2-medium      1.22.0-gke      3           RUNNING


container node-pools

▼ container node-poolsとは

記入中...

▼ describe

GKE Node Poolの情報を取得する。

アップグレードの手法を確認することもできる。

*実行例*

$ gcloud container node-pools describe foo-node-pool --cluster=foo-anthos-cluster

...

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN # ブルー/グリーンアップグレード

▼ update

GKE Node Poolの設定を変更する。

*実行例*

ローリング方式 (サージ方式) のアップグレードを有効化する。

$ gcloud container node-pools update foo-node-pool \
    --cluster=foo-anthos-cluster \
    --enable-surge-upgrade

ローリング方式時に新しく追加できる最大インスタンス数と、削除できる最大インスタンス数を設定する。

$ gcloud container node-pools update foo-node-pool \
    --cluster=foo-anthos-cluster \
    --max-surge-upgrade=2 \
    --max-unavailable-upgrade=1


init

▼ initとは

認証時のデフォルト値を対話方式で設定する。

*実行例*

$ gcloud init

Welcome! This command will take you through the configuration of gcloud.

Settings from your current configuration [default] are:
core:
  account: hiroki.hasegawa
  disable_usage_reporting: 'True'
  project: foo-project

Pick configuration to use:
 [1] Re-initialize this configuration [default] with new settings
 [2] Create a new configuration
Please enter your numeric choice:  1 # 再設定か新しいプリンシパルの設定かを選択する。

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

Choose the account you would like to use to perform operations for this configuration:
[1] hiroki.hasegawa
[2] Log in with a new account
Please enter your numeric choice:  1 # デフォルトのプリンシパルを設定する。

You are logged in as: [hiroki.hasegawa].

Pick cloud project to use:
[1] foo-project
[2] bar-project
[3] baz-project

Please enter numeric choice or text value (must exactly match list item): 3 # デフォルトのプロジェクト名を設定する。


info

▼ infoとは

現在使用している設定ファイルの場所を取得する。

$ gcloud info

# 認証情報ファイル
User Config Directory: /root/.config/gcloud]

...


project

▼ projectとは

記入中...

▼ list

現在のプリンシパルが使用できるプロジェクトの一覧を取得する。

注意点として、全てのプロジェクトではない。

*実行例*

$ gcloud projects list

PROJECT_ID         NAME          PROJECT_NUMBER
foo-project-***    foo-project   *****
bar-project-***    bar-project   *****


03. Google Cloudリソース別のプラクティス

CloudLogging

▼ read

CloudLoggingからログを読み出す。

$ gcloud logging read 'resource.labels.container_name="foo-container"' --limit 1

GCS

▼ cp

指定したパスにあるオブジェクトを、ローカルマシンにコピーする。

$ gcloud storage cp gs://<GCS名>/<オブジェクトのファイルパス> <ローカルマシンのファイルパス>

ディレクトリごとコピーする場合は、--recursiveオプションを使用する。

$ gcloud storage cp --recursive gs://<GCS名>/<オブジェクトのファイルパス> <ローカルマシンのファイルパス>


KMS

▼ describeとは

KMSの暗号化キーを取得する。

$ gcloud kms keys describe <KMSのリソースID>
$ gcloud kms keys describe projects/foo-project/locations/global/keyRings/sops/cryptoKeys/sops-key