[GCP]gcloud CLIまとめ

# 概要
GCPのリソースを操作できるコマンドラインツール。

**使い方**
流れは以下のような形。

1. GCPリソースを操作するGoogleアカウントでログイン(`gcloud auth login`)
2. GCPリソースを操作(`gcloud <リソース名> <操作> <オプション(操作対象のリソースがあるプロジェクトIDなど)`>)

加えて、あらかじめ`configuration`(gcloud コマンドを実行する際のデフォルト設定集)を作成、各設定値をセットしておくと、2. の段階でオプションをいちいち設定しないで済むので便利。

![gcloud.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59542/7426a1b9-15db-ec23-fc2a-7ba4e729dc2a.jpeg)

# gcloudコマンドの例
詳細は[gcloudのリファレンス](https://cloud.google.com/sdk/gcloud/reference)を参照。


# gcloud config configuraitons list
configurationを一覧表示する。
どのconfiguraitonがアクティべートされているのか、configurationに書き込まれているアカウント、プロジェクトIDは何なのかといった、デフォルト設定の中でも特に知りたいような情報も一緒に表示される。

```
gcloud config configurations list
```

# gcloud config configurations create
新しく名付けたconfigurationを作成する。
デフォルトでは作成後に即有効化される。
```
gcloud config configurations create <configuration名>
```

任意オプション
- `--no-activate`: 作成するが、即有効化はしない

参考: 
[gcloud config configurations create](https://cloud.google.com/sdk/gcloud/reference/config/configurations/create)

# gcloud config configurations activate
指定したconfigurationをアクティベートする
```
gcloud config configurations activate <configuration名>
```

参考: 
[gcloud config configurations activate](https://cloud.google.com/sdk/gcloud/reference/config/configurations/activate)

# glcoud config list
configurationに書き込まれている設定値を一覧表示する。
```
gcloud config list
```

何もオプションを指定しない場合は、未設定の項目は出力されない模様。

**オプション**
- <セクション>: 一覧表示したい設定値のセクションを絞る
- `--all`: 設定済み・未設定に関わらず全ての設定の一覧を表示

参考: 
[gcloud config list](https://cloud.google.com/sdk/gcloud/reference/config/list)


# gcloud config set
configurationに対して、指定した設定項目のデフォルト値を書き込む。
書き込み対象のconfigurationは`--configuration`で指定できるが、指定しない場合のデフォルトは現在アクティブなconfiguration。

```
gcloud config set <セクション>/<プロパティ> <値>
```

**<セクション>/<プロパティ>の例**
- `core/project`: GCPのプロジェクトID。
- `auth/disable_credentials <true or false>`: trueにすると、認証情報のロードやリクエストの認証をしないようにする。
- `api_endpoint_overrides/spanner`: gcloud spanner コマンドグループで叩くAPIのエンドポイントを上書きする。デフォルトは`https://sourcerepo.googleapis.com/`


--configuration

参考: 
[gcloud config set](https://cloud.google.com/sdk/gcloud/reference/config/set)

# gcloud auth list
以下のコマンドで認証情報を取得したアカウント(Googleアカウントやサービスアカウント)を一覧表示する。
```
gcloud init
gcloud auth login
gcloud auth activate-service-account
```
`gcloud auth application-default login`で設定されたADCのアカウントは対象外。
アクティブなconfigurationで使われるデフォルトのアカウントがどれかも表示してくれる。

# gcloud auth login
Google アカウントの認証情報で GCP へアクセスするように gcloud CLI を認証する。
Web ベースの認証フローを経由してユーザーアカウントの認証情報を取得する。
コマンドの実行に成功した場合、アクティブな configuration に認証フローで選択したユーザーがアクティブなアカウントとしてセットされる(core/account)。

**補足**
現在アクティブな configuration は、`gcloud config configuration list`で確認できる。
アクティブな configuration にセットされているアカウントは、`gcloud config list core/account`で確認できる。

# gcloud auth application-default login
Webのフローを経由して ADC (アプリケーションデフォルトクレデンシャル) の認証情報を取得し、以下の場所にファイルとして配置する。

- Linux / Mac: `~/.config/gcloud/application_default_credentials.json`
- Windows: `%APPDATA%\gcloud\application_default_credentials.json`

**--impersonate-service-account="<サービスアカウント>"**
指定したサービスアカウント(へなりすますことを指示するような？)の ADC の認証情報を取得する模様。


参考: 
[gcloud CLI で提供されるユーザー認証情報](https://cloud.google.com/docs/authentication/application-default-credentials?hl=ja#personal)




この認証情報はアプリケーションデフォルトクレデンシャルクライアントライブラリを利用するAPI呼び出し時に適用される(例えば Terraform)
このコマンドは、`gcloud auth login`コマンドによって設定されたユーザーアカウントには影響しない

# gcloud auth activate-service-account
サービスアカウントの認証情報でGCPへアクセスするようにgcloudを認証する。
```
gcloud auth activate-service-account <サービスアカウント> --key-file=<サービスアカウントキーのファイルパス>
```

# gcloud auth print-access-token
指定したアカウントの OAuth 2.0 アクセストークンを出力する。
このアクセストークンでは、認証不可能なリソースもある( Cloud Run, Cloud Run functions )ことに注意。
```
gcloud auth print-access-token
```

**--impersonate-service-account="<サービスアカウント>"**
指定したサービスアカウント(へなりすまして)のアクセストークンを出力する。
なりすまし元に、なりすまし先のサービスアカウントに対する `roles/iam.ServiceAccountAccessTokenCreator` ロールが付与されている必要がある。

# gcloud auth print-identity-token
指定したアカウントの OIDC ID トークンを出力する。
この ID トークンは、Cloud Run サービスで IAMによるアクセス制限をしている場合に必要になるものである。
```
gcloud auth print-identity-token
```

**--impersonate-service-account="<サービスアカウント>"**
指定したサービスアカウント(へなりすまして)の ID トークンを出力する。
なりすまし元に、なりすまし先のサービスアカウントに対する `roles/iam.ServiceAccountOpenIDtokenCreator` ロールが付与されている必要がある。
なお、`roles/iam.ServiceAccountAccessTokenCreator` ロールは上記ロールの権限を含むため、こちらでも可。

**--audiences="<オーディエンス>"**
OIDC ID トークン発行時に必要な[オーディエンス](https://qiita.com/WisteriaWave/items/140f388b329d18f9a599#rest-api-%E3%81%A7%E7%99%BA%E8%A1%8C)をセット


# gcloud spanner instances list
Spannerのインスタンスを一覧表示する。
```
gcloud spanner instances list
```

参考:
[gcloud spanner instances list](https://cloud.google.com/sdk/gcloud/reference/spanner/instances/list)



# gcloud spanner instances create
Spannerのインスタンスを生成する
```
gcloud spanner instances create <SpannerのインスタンスID>
```

**必須オプション**
- ``--config``: インスタンス内DBの地理的な配置とレプリケーション設定
- ``--description``: インスタンスの説明

**任意オプション**
- ``--nodes``: インスタンスのノード数。1ノード = 1,000PU

参考: 
[gcloud spanner instances create](https://cloud.google.com/sdk/gcloud/reference/spanner/instances/create)


# gcloud spanner databases create
Spannerのインスタンス上にデータベースを作成する
```
gcloud spanner databases create <SpannerのデータベースID>
```

**任意オプション**
- ``--instance``: データベースを作成するインスタンスIDを指定する

参考: 
[gcloud spanner databases create](https://cloud.google.com/sdk/gcloud/reference/spanner/databases/create)