👋

Google Cloud CLI インストール後に実施している設定

2024/08/09に公開

プロジェクト作成

Google Cloud プロジェクトを作成し、設定を行います。

gcloud config configurations create hoge-project
gcloud config set project hoge-project
gcloud config set account hoge@example.com

複数回コマンド実行するのが大変なので、以下のようなシェルスクリプトを準備して登録しています。

#!/bin/bash

# 引数チェック
if [ $# -ne 2 ]; then
    echo "Usage: $0 <project-name> <account-name>"
    exit 1
fi

PROJECT_NAME="$1"
ACCOUNT_NAME="$2"

# プロジェクトが既に存在するかどうかをチェック
gcloud config configurations list --filter="NAME=${PROJECT_NAME}" --format="value(NAME)" | grep -q "^${PROJECT_NAME}$"
if [ $? -eq 0 ]; then
    echo "Configuration '${PROJECT_NAME}' already exists."
    exit 1
fi

# 新しい設定を作成
gcloud config configurations create "${PROJECT_NAME}"
if [ $? -ne 0 ]; then
    echo "Failed to create configuration '${PROJECT_NAME}'."
    exit 1
fi

# プロジェクトを設定
gcloud config set project "${PROJECT_NAME}"
if [ $? -ne 0 ]; then
    echo "Failed to set project '${PROJECT_NAME}'."
    exit 1
fi

# アカウントを設定
gcloud config set account "${ACCOUNT_NAME}"
if [ $? -ne 0 ]; then
    echo "Failed to set account '${ACCOUNT_NAME}'."
    exit 1
fi

echo "-------------------------------"
gcloud config configurations list

使用例

  1. シェルスクリプトをファイルに保存します。例えば create_gcp_config.sh という名前にします。

  2. ファイルに実行権限を付与します。

    chmod +x create_gcp_config.sh
    
  3. シェルスクリプトを実行して、新しいGCPプロジェクト設定を作成します。以下の例では、プロジェクト名をmy-new-project、アカウント名をmy-email@example.comとしています

    ./create_gcp_config.sh my-new-project my-email@example.com
    

実行後、新しいGCPプロジェクト設定が作成され、設定リストが表示されます。

初回認証

ユーザアカウント認証

gcloud auth login
  • 認証情報は ~/.config/gcloud/credentials.db に保存されます。
  • gcloudgsutilbq などのツールで使用されます。

以下のコマンドで保存された認証情報を確認できます。

sqlite3 ~/.config/gcloud/credentials.db "SELECT * FROM credentials;"

xxxxxxxx@hogehoge.co.jp|{
  "client_id": "xxxxxxxxxxxx.apps.googleusercontent.com",
  "client_secret": "xxxxxxxxxxxxxxxxxxxx",
  "refresh_token": "1//xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "revoke_uri": "https://accounts.google.com/o/oauth2/revoke",
  "scopes": [
    "openid",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/appengine.admin",
    "https://www.googleapis.com/auth/sqlservice.login",
    "https://www.googleapis.com/auth/compute",
    "https://www.googleapis.com/auth/accounts.reauth"
  ],
  "token_uri": "https://oauth2.googleapis.com/token",
  "type": "authorized_user",
  "universe_domain": "googleapis.com"
}

アプリケーションデフォルト認証

gcloud auth application-default login
  • 認証情報は ~/.config/gcloud/application_default_credentials.json に保存されます。
  • Terraformなどの外部アプリケーションがGoogle Cloudリソースにアクセスするための認証情報です。
  • application-default loginは1つのアカウントに対してのみ認証情報を保持します。そのため、異なるアカウントを使用する場合は都度gcloud auth application-default loginを実行して認証情報を更新する必要があります。

以下のコマンドで認証情報を確認できます。

cat ~/.config/gcloud/application_default_credentials.json

{
  "client_id": "xxxx.apps.googleusercontent.com",
  "client_secret": "xxx",
  "quota_project_id": "xxxx",
  "refresh_token": "xxxx",
  "type": "authorized_user"
}

fzfとの連携

fzfを使用して、簡単にGCPの設定を切り替えることができます。
以下のエイリアスを追加することで、設定リストをインタラクティブに選択し、アクティブ化できます。

alias gc="
gcloud config configurations list \
| awk '{ print \$1,\$3,\$4 }' \
| column -t \
| fzf --header-lines=1 \
| awk '{ print \$1 }' \
| xargs -r gcloud config configurations activate
"

使用例

  1. 上記のエイリアスを~/.bashrcや~/.zshrcに追加します。
  2. ターミナルを再起動するか、source ~/.bashrcまたはsource ~/.zshrcを実行して設定を反映させます。
  3. gcコマンドを実行して、プロジェクト設定を選択します。
gc

fzfでプロジェクト設定を選択し、Enterキーを押すと、選択した設定がアクティブ化されます。

ターミナルにGCP情報を表示

アクティブなGCPプロジェクト情報をターミナルに表示するための関数を作成します。
これにより、作業中のプロジェクトを確認できるようになります。

gcp_info() {
    local gcp_profile gcp_project
    local active_config_file="$HOME/.config/gcloud/active_config"

    if [ -f "$active_config_file" ]; then
        gcp_profile=$(<"$active_config_file")
        gcp_project=$(awk '/project/ {print $3}' "$HOME/.config/gcloud/configurations/config_$gcp_profile")

        if [ -n "$gcp_project" ]; then
            echo "%F{33}[${gcp_project}]%f"
        fi
    fi
}

PROMPT='$(gcp_info) %~ %(!.#.$) '

Discussion