3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Terraform + Docker で GCP 環境を構築する

Last updated at Posted at 2021-06-18

事前準備

  • Docker が入っていて、 docker-compose コマンドが使えること
  • Google アカウントを持っていて、GCP のコンソールが表示できること
  • GCP の決済アカウントが用意されていること

手順

docker-compose.yml を用意する

docker-compose.yml
version: "3.7"
services:
  tf:
    image: hashicorp/terraform:1.0.0
    container_name: "terraform"
    working_dir: /workspace
    environment:
      - TF_VAR_billing_id=$TF_VAR_billing_id
      - TF_VAR_gcp_project=$TF_VAR_gcp_project
    volumes:
      - ./terraform:/workspace:cached
      - gcloud-config:/root/.config
  gcloud:
    entrypoint: "gcloud"
    image: google/cloud-sdk:alpine
    container_name: "gcloud"
    working_dir: /workspace
    volumes:
      - ./terraform:/workspace:cached
      - gcloud-config:/root/.config
volumes:
  gcloud-config:

環境変数の設定

TF_VAR_{} をつけておくと、 terraform から {} の変数として呼び出せるようになる

export TF_VAR_billing_id=xxxxxxxxxxx
export TF_VAR_gcp_project=xxxxxxxxxxxx

TF_VAR_billing_id の取得

使いたい請求アカウントの 請求先アカウントID を取得して使う。

Inkedunknown_LI.jpg

TF_VAR_gcp_project の取得

プロジェクト名は一度設定すると変更できないので、慎重に、かつユニークになるように決める。
ここでユニークでない値を設定すると、あとでエラーが起きるので、そうなったらもう一度ここで設定し直すようにする。

terraform の定義ファイル作成

versions.tf

ここで下記のことを定義する

  • terraform のバージョン
  • GCP を使うこと
    • そのバーション
terraform/versions.tf
terraform {
  required_version = "1.0.0"
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "3.72.0"
    }
  }
}

main.tf

ここで、プロジェクトの作成と、リソースの作成を行う。
この通りに書くと、Cloud TTS (https://cloud.google.com/text-to-speech/?hl=ja) が作成される(有効になる)ので、別リソースを作成したい場合は適宜読み替えて適用させる。

terraform/main.tf
variable "gcp_project" {}
variable "billing_id" {}

# GCP 使いますよ
provider "google" {
  project = var.gcp_project
}

# プロジェクトの作成
resource "google_project" "gcp_project" {
  name                = var.gcp_project
  project_id          = var.gcp_project
  billing_account     = var.billing_id
  auto_create_network = false
}

# Cloud TTS の有効化
resource "google_project_service" "tts" {
  project = google_project.gcp_project.project_id
  service = "texttospeech.googleapis.com"
}

コマンドを実行してリソース作成

# gcp のリソースを作成するためにログイン
$ docker-compose run --rm gcloud auth application-default login

# terraform 環境の初期化
$ docker-compose run --rm tf init

# .tf ファイルの見た目を整える
$ docker-compose run --rm tf fmt

# terraform の定義に変なところがないかチェックする
$ docker-compose run --rm tf validate

# 実行によって起こる変更を確認する
$ docker-compose run --rm tf plan

# 環境に変更を適応する
$ docker-compose run --rm tf apply

Error 409: Requested entity already exists, alreadyExists

error creating project {project_id} ({project_id}): googleapi: Error 409: Requested entity already exists, alreadyExists. If you received a 403 error, make sure you have the `roles/resourcemanager.projectCreator` permission

上記のようなエラーが出たら、おそらく、プロジェクト名がユニークになっていないのが問題なので、下記トラブルシュートで解決する。
https://qiita.com/tktcorporation/items/b9ca7334e415bb13ffc2

参考

https://yomon.hatenablog.com/entry/2020/07/14/234753
https://registry.terraform.io/providers/hashicorp/google/latest/docs

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?