使用Terraform开始GCP
制作的事物
-
- Project: naka-gcp-training
-
- Service Account: terraform
Bucket: naka-gcp-training-2020
提前将其存储在变量中(根据需要进行更改)。
PROJECT_ID=naka-gcp-training
SERVICE_ACCOUNT=terraform
BUCKET=naka-gcp-training-2020
請提供一個中文的句子來表示「步驟」。
设置gcloud
-
- 创建GCP账号
安装gcloud
执行gcloud auth login -> 打开链接并在浏览器中随意操作
gcloud auth login
您的浏览器已打开以下网址:
https://accounts.google.com/o/oauth2/auth?client_id=xxxxx <- 点击此链接
您已登录为[test@mail.com]。
当前项目为[xxxxx]。您可以通过运行以下命令更改此设置:
$ gcloud config set project PROJECT_ID
设定Project
由于资源位于项目以下,先创建操作资源的项目。
-
- Natively in Chinese:
创建项目 naka-gcp-training
gcloud projects create $PROJECT_ID
正在创建中 [https://cloudresourcemanager.googleapis.com/v1/projects/naka-gcp-training]。
正在等待 [operations/cp.5442491498066710887] 完成…完成。
正在为项目 [naka-gcp-training] 启用服务 [cloudapis.googleapis.com]…
操作 “operations/acf.af0e63bc-93ff-4233-8d0f-11e726c1cd49” 成功完成。
配置项目
gcloud config set project $PROJECT_ID
启用API
gcloud services enable compute.googleapis.com
错误:(gcloud.services.enable) FAILED_PRECONDITION: 找不到项目’602548642320’的计费帐户。为了继续使用服务’compute.googleapis.com,compute.googleapis.com,compute.googleapis.com’,必须启用结算。
如果出现上述错误,请在控制台中从“付款”部分进行关联即可。
准备服务账号
当使用Terraform对资源进行操作时,需要进行身份验证。
-
- 创建服务帐号
-
- gcloud iam service-accounts create $SERVICE_ACCOUNT
-
- 已创建服务帐号 [terraform]。
向服务帐号授予 roles/editor 权限
gcloud projects add-iam-policy-binding $PROJECT_ID –member serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com –role roles/editor
已更新项目 [naka-gcp-training] 的 IAM 策略。
绑定:
– 成员:
– serviceAccount:terraform@naka-gcp-training.iam.gserviceaccount.com
角色:roles/editor
– 成员:
– user:xxxxx@gmail.com
角色:roles/owner
etag:BwW2PH_3moY=
版本:1
生成服务帐号密钥
gcloud iam service-accounts keys create terraform-key.json –iam-account terraform@$PROJECT_ID.iam.gserviceaccount.com
已为 [terraform@naka-gcp-training.iam.gserviceaccount.com] 创建密钥 [0e4062f4cdc91618fcd590d1c45f699a4057d7f8],类型为 [json],保存为 [terraform-key.json]。
将密钥路径添加到 GOOGLE_APPLICATION_CREDENTIALS 中(可以添加到 ~/.bashrc 等文件中,这样就不用每次都执行了)
export GOOGLE_APPLICATION_CREDENTIALS=$PWD/terraform-key.json
准备Terraform
-
- 为了Terraform的后端,创建一个存储桶
gsutil mb -p $PROJECT_ID -c multi_regional -l asia gs://$BUCKET
正在创建 gs://naka-gcp-training-2020/…
检查
gsutil ls -p $PROJECT_ID
gs://naka-gcp-training-2020/
准备backend.tf
terraform {
backend “gcs” {
bucket = “naka-gcp-training-2020”
prefix = “terraform/test”
}
}
准备provider.tf
provider “google” {
project = “naka-gcp-training”
region = “”
}
terraform init
terraform init
初始化后端…
初始化提供程序插件…
– 查找最新版本的hashicorp/google…
– 安装hashicorp/google v3.50.0…
– 已安装hashicorp/google v3.50.0(由HashiCorp签名)
…
使用 Terraform 创建和删除资源
-
- 使用Terraform准备初始的GCP资源 main.tf
touch test.txt
resource “google_storage_bucket_object” “test” {
name = “test/gcp-training/test.txt”
source = “test.txt”
bucket = “naka-gcp-training-2020”
}
terraform计划
terraform计划
在计划之前刷新Terraform状态…
刷新的状态将被用于计算此计划,但不会被持久化到本地或远程状态存储。
————————————————————————
已生成执行计划如下所示。
使用以下符号表示资源操作:
+ 创建
Terraform将执行以下操作:
#将创建 google_storage_bucket_object.test
+ resource “google_storage_bucket_object” “test” {
+ bucket = “naka-gcp-training-2020”
+ content_type = (待应用后得知)
+ crc32c = (待应用后得知)
+ detect_md5hash = “不同的哈希值”
+ id = (待应用后得知)
+ md5hash = (待应用后得知)
+ media_link = (待应用后得知)
+ name = “test/gcp-training/test.txt”
+ output_name = (待应用后得知)
+ self_link = (待应用后得知)
+ source = “test.txt”
+ storage_class = (待应用后得知)
}
计划: 添加1个, 更改0个, 销毁0个。
————————————————————————
注意:您没有指定“-out”参数以保存此计划,因此Terraform
无法保证如果随后运行“terraform apply”将执行确切的这些操作。
terraform应用
terraform应用
…
输入一个值:是的
…
应用完成!资源:1个添加,0个更改,0个销毁。
确认对象已创建
gsutil ls gs://naka-gcp-training-2020/test/gcp-training
gs://naka-gcp-training-2020/test/gcp-training/test.txt
terraform销毁
terraform销毁
…
输入一个值:是的
google_storage_bucket_object.test: 正在销毁… [id=naka-gcp-training-2020-test/gcp-training/test.txt]
google_storage_bucket_object.test: 在1秒后销毁完成
销毁完成!资源:1个销毁。