GCP 事始め Cloud SDKの導入

GCPを再入門するためのメモ

GCPをつかうにあたりまずはGCloud CUIの使い方を学んで行こうと思っています。

## 対象者

* GCPにまだ慣れていない方

## 環境

* mac osx catalina

## 参考にしたサイト

* [Google 公式 macOS 用のクイックスタート](https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja)

## GCloud SDKとは？

公式から引用
> Google Cloud SDK は、Google Cloud Platform にホストされているリソースとアプリケーションの管理に使用できるツールセットです。gcloud、gsutil、bq などのコマンドライン ツールもその一部です。

つまりGCPを使うにあたって必要なCUIツール群のことですね。


## GCloud SDKのインストール

公式では別の方法ですが、基本gcloud本体がバージョンアップ等も含めて教えてくれるので
自分はbrewで入れてしまっています。

```
brew cask install google-cloud-sdk
```

## SDKの初期化設定

これで対話式で勧めてください。

```
gcloud init
```

詳細は[公式のチュートリアル](https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja#initialize_the_sdk)に譲ります。

``` gcloud init ``` を実行するとAWS SDKと同様にHOME以下のドットファイルが作成されます

```bash:$HOME/.config/gcloud
gcloud
├── access_tokens.db
├── active_config
├── config_sentinel
├── configurations
│   ├── config_default
│   └── config_{your_project}
├── credentials.db
├── gce
└── logs
    ├── 2019.12.27
    │   └──  23.11.41.499803.log
    ├── 2020.01.16
    │   └──  14.53.29.471200.log
    └── 2020.01.18
        └──  14.11.47.394124.log
```

``` $HOME/.config/gcloud/configurations ``` 以下がAWSでいうprofileの部分になります。

ではdefaultの中身を見てみましょう

```bash:$HOME/.config/gcloud/configurations/config_default
$ cat $HOME/.config/gcloud/configurations/config_default

[compute]
region = asia-northeast1
zone = asia-northeast1-a

[core]
account = {your account}@gmail.com
project = {your default project}
```

デフォルトのregionとzoneが ``` [compute]``` セクションにあり
``` core ``` の部分にaccountとprojectの設定があります。

つまりdefaultでgcloudを実行した場合は上記の設定(リージョンやaccount,project)で実行されることになります。

## Project毎にアカウントやprojectを切り替える方法

複数のプロジェクトをまたがる作業をするときにdefaultのProjectで実行されると困る事が多々あると
思います。ではどうすればいいか？となりますが、これは ``` gcloud config configurations ``` で解決ができます。

[Google Cloud SDK reference](https://cloud.google.com/sdk/gcloud/reference/config/configurations/)

## gcloud configuration listで現在設定されているconfigの設定を確認する

```
$ gcloud config configurations list

NAME              IS_ACTIVE  ACCOUNT                   PROJECT           DEFAULT_ZONE       DEFAULT_REGION
default           False      {your account}  {デフォルトで設定したproject}
```

となっていますのでこれに新たにconfig(hoge)を追加したいと思います

```
$ gcloud config configurations create hoge

Created [hoge].
Activated [hoge].
```

新たなconfigが作成されたみたいなので確認します

```
$ gcloud config configurations list

gcloud config configurations list
NAME              IS_ACTIVE  ACCOUNT                   PROJECT           DEFAULT_ZONE       DEFAULT_REGION
default           False      {your account}  {デフォルトで設定したproject}
hoge              True
```

hogeが ``` IS_ACTIVATE True ``` になったのでhogeが現在のconfigの設定になりました。

## 他の設定を追加する

config hogeに対してaccount,project,region,zoneを追加していきます

```
gcloud config set core/project {config hogeに追加したいproject}
gcloud config set core/account {config hogeに追加したいaccount}
# config hogeに追加したいzone
gcloud config set compute/zone asia-northeast1-a
# config hogeに追加したいregion
gcloud config set compute/region asia-northeast1
```

では再度 ``` gcloud config configurations list ``` で確認してみましょう

```
 gcloud config configurations list
NAME              IS_ACTIVE  ACCOUNT                   PROJECT           DEFAULT_ZONE       DEFAULT_REGION
default           False      {your account}  {デフォルトで設定したproject}
hoge              True       {your account}  {hogeに追加したproject}  asia-northeast1-a  asia-northeast1
```

となります。

## 特定のディレクトリに移動したら勝手にconfigを変えてもらいたい

自分は[direnv](https://github.com/direnv/direnv)を使用して切り替えてしまいます。

### direnvのinstall

```
brew install direnv
```

### .zshrcにdirenvの設定を追加する

```
echo 'eval "$(direnv hook zsh)"' >> $HOME/.zshrc
source $HOME/.zshrc
```

### 対象のProjectに移動して.envrcを記載する

```
$ cd path/to/project
$ echo "gcloud config configurations activate hoge" > .envrc
$ direnv allow

direnv: loading .envrc
Activated [hoge].
```

と ``` Activated [hoge]. ```とでれば次回以降は対象のprojectに移動したタイミングでconfigの設定が自動に変わります。

## 最後に

GoogleはAPIも含めてほぼどのサイトでも設定を追加しますので逆に間違えて違うprojectの設定に追加してしまったとか。。とか事故が起こりやすいので自動でprojectの切替え迄ワンセットで設定したほうが事故にならずにおすすめです。