使用Terraform工具进行GCP资源管理

※我正在使用Terraform的v0.12.16版本。(此文章发布时的最新版本)

本文的目的:
– 在使用Terraform构建GCP环境时,介绍必要的配置。
– 介绍常用的Terraform命令。

1. 重要设定的介绍

1.1 GCP项目设置

# GCPにログイン
gcloud auth login

# ログインブラウンザーが開かれて、自分のアカウントログインする。ログイン成功となったら、下記を続き

# 権限があるプロジェクトを全て表示
gcloud projects list

# ワーキングプロジェクト設定。プロジェクトリストから [PROJECT_ID]をコピーして下記のコマンドに入れる
gcloud config set project [PROJECT_ID]

1.2 启用所使用服务的API

使用Terraform来与GCP进行交互,需要根据所使用的资源启用相应的API服务。

# 例:使うサービスのAPI有効
# 実施するアカウントは権限ある必要
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable serviceusage.googleapis.com
gcloud services enable container.googleapis.com
gcloud services enable pubsub.googleapis.com
gcloud services enable storage-component.googleapis.com

1.3 创建并设置Terraform专用的服务帐户和权限配置。

为了访问GCP,需要设置访问凭证文件配置。
常规方法是创建一个专用于Terraform的服务帐号,并授予帐号权限。
然后发行凭证,并将凭证设置到Terraform的操作环境中。

# Terraform専用のサービスアカウント作成。アカウント名は「terraform-serviceaccount」とする
gcloud iam service-accounts create terraform-serviceaccount \
  --display-name "Account for Terraform"

# サービスアカウントに権限付与
# 使う範囲によりとなりますが、一旦「editor」ロールの権限を付与します。
# 下記コマンド中の[PROJECT_ID]に実際のプロジェクトIDを入れ替えてください。
gcloud projects add-iam-policy-binding [PROJECT_ID] \
  --member serviceAccount:terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com \
  --role roles/editor

生成服务账号的凭据文件,并将其配置到Terraform运行环境中。

# アカウントのCredential発行
# Credentialのファイル名は「account.json」とする
gcloud iam service-accounts keys create path_to_save/account.json \
  --iam-account terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com

# 専用の環境変数にCredentialファイルを設定する
$ export GOOGLE_CLOUD_KEYFILE_JSON=path_to/account.json

2. 介绍 Terraform 经常使用的命令。

2.1 创建Terraform脚本

# 初期化(初回のみ)
cd [TERRAFORM_FOLDER]

terraform init
# tfファイルを編集する
vi main.tf

main.tf的例子

terraform {
  required_version = "~>0.12.14"
}

## project ##
provider "google" {
  project     = "project-abc123"
  region      = "asia-northeast1"
}

## storage buckets ##
## new bucket ##
resource "google_storage_bucket" "private-bucket" {
  name          = "private-bucket-abc123"
  location      = "asia-northeast1"
  storage_class = "REGIONAL"

  labels = {
    app = "test-app"
    env = "test"
  }
}
# フォーマットする(tfファイルを編集時のみ)
terraform fmt

2.2 在部署之前确认差异。

cd [TERRAFORM_FOLDER]

# tfファイルを適用する前に必ず差分を確認する
terraform plan

2.3 执行部署

cd [TERRAFORM_FOLDER]

# planの結果が想定通りなら、tfファイルを適用する
terraform apply
gcp_terraform_devsamurai_001.png

2.4 删除资源

cd [TERRAFORM_FOLDER]

terraform destroy

2.5 其他常用的指令

cd [TERRAFORM_FOLDER]

# 何らかの理由で先にGCPへ物を作ってしまった場合、importでtfstateへ反映可能。
terraform import <tfファイルのリソース名> <GCPのリソース名>

# 例
terraform import google_storage_bucket.private-bucket project-abc123/asia-northeast1/private-bucket-abc123
# tfstateファイルを最新化したい
terraform refresh

3. 参考

    GCP用に用意されたTerraformのドキュメント

感謝您读到最后,非常感谢!DSS桥本。

广告
将在 10 秒后关闭
bannerAds