はじめに
そろそろ弊社でもしっかりGCPを利用していこうと考え、組織用のGCPアカウントを作成しました。
またガバナンスを効かせるため、組織、フォルダ、プロジェクトの管理をTerraformで一元管理していく方針をたてました。
その際に、どういった点を検討すべきなのか、どう判断したかを書いています。
GCPの組織を何で管理するか?
公式ドキュメントを確認します。ドキュメントが素晴らしい。
Cloud Identity と組織を確認すると、いくつか選択肢が記載されています。
弊社は現時点でGoogle Workspaceを利用していないので、 Google Identity Free Editionを利用します。
すでにGoogleWorkspaceを利用されている方は、Workspace上でGoogle Identityを有効にするようです。
Free Editionではデフォルトで50ユーザーライセンスが提供されています。(2022/12現在)
GCP用の組織をGoogle Identityで作成する
公式チェックリストにある、「最初のCloud Identityアカウントと特権管理者ユーザー名を作成します。」 をクリックして作成に進みます。
Cloud Identityの作成
では、実際に作成していきます。
- 組織情報を入力して[次へ]をクリックします。
- 特権管理者ユーザーの情報を入力[次へ]をクリックします。
- 組織で利用するドメイン情報を入力して、[次へ]をクリックします。
- 入力したドメイン情報に誤りがないか確認して、[次へ]をクリックします。
- お知らせを受け取るか選択して、[次へ]をクリックします。
- 特権管理者ユーザーのアカウント情報を入力して、[同意して続行]をクリックします。
- 組織が作成されました。
組織ドメインの保護
指定のTXTレコード、もしくはCNAMEを登録することで、ドメインの所有権を確認し、他のユーザーに不正に利用されないようにします。(ドメインを保護しないと組織は利用できません)
弊社の場合、ドメインは親会社で管理しているため、設定までリードタイムが必要でした。
注意 ドメイン保護については設定から14日以内での設定が必要です。最悪の場合アカウントが削除される可能性があるとのことなので、早めに対応しましょう。
TXTドメインの設定が反映されると、ドメイン保護が完了し、利用可能になりました。
これで作成した組織でGCPが利用可能になります。
GCP上の組織とフォルダについて
弊社では今後サービス提供、社内利用それぞれが干渉しないようにする必要があるため、Googleの公式ページを参考にフォルダ構成、プロジェクト構成で設計をしました。
これをもとに、Terraformでフォルダを作成していきます。
Terraformでフォルダを管理する
今後、AWS、Azure、など他のクラウドも同様のレベルで管理をしていきたいという方針を持っているため、Terraformでの管理を進めていこうと考えています。
事前設定
- Terraform State管理用のフォルダとプロジェクトの作成
- GCS(Google Cloud Storage)でTerraformのstateを管理するため、まず手動でstate管理用のフォルダ、プロジェクトを作成します
- GCSのメニューからバケットを作成します
- サービスアカウントの設定
- GCSへの操作権限を付与する
- フォルダ、プロジェクトの作成権限を付与する
ローカル環境設定
CI/CD環境は今後整備をすすめるため、まずはローカルからデプロイできる状況を作ります。
設定手順は公式の手順を参考に進めています。(MacOSを前提としています。)
-
gcloud CLIのインストール
cd /usr/local/bin curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-410.0.0-darwin-arm.tar.gz tar xvzf google-cloud-cli-410.0.0-darwin-arm.tar.gz ./google-cloud-sdk/install.sh
※対話モードでの設定は、全てデフォルトにしています。
※バージョンは公式手順から最新のパッケージのURLを確認してください。 -
gcloudの初期設定
./google-cloud-sdk/bin/gcloud init
- ここでgoogle chromeが立ち上がり、該当のgoogleアカウントでログインを行い、アクセス許可を行う
- Pick cloud project to use: と表示されるので、デフォルトのプロジェクトIDを選択して終了する。
-
gcpへのログイン
gcloud auth application-default login
Terraformコード作成
-
TerraformのStandard Module Structureを参考に簡単なモジュールを作成していきます。
フォルダ構成. ├── envs │ ├── backend.tf │ ├── main.tf │ ├── outputs.tf │ ├── providers.tf │ └── variables.tf └── modules └── folders ├── README.md ├── main.tf ├── outputs.tf └── variables.tf
modules/folders/main.tfresource "google_folder" "folders" { count = length(var.names) display_name = var.names[count.index] parent = var.org_name }
envs/providers.tfprovider "google" { project = "project_id" region = "asia-northeast1" }
envs/backend.tfterraform { backend "gcs" { bucket = "bucket_name" } }
envs/main.tfdata "google_organization" "org" { domain = "domain.com" } locals { names = [ "Corporation", //会社内利用 "Services" //サービス提供用 ] } module "folders" { source = "../../modules/folders" names = local.names org_name = data.google_organization.org.name }
-
Terraformコマンドを実行してデプロイ
cd envs terraform init // 初期化 terraform plan // plan terraform apply // デプロイ
まとめ
- CloudIdentityを利用する場合には、ドメインへのTXTレコード反映のリードタイムを事前に確認しておくと安心です。
- 環境が整いつつあるので、今後弊社において、GCPの利用実績がどんどん増えていくと思います。