使用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

    1. 创建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

由于资源位于项目以下,先创建操作资源的项目。

    1. 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对资源进行操作时,需要进行身份验证。

    1. 创建服务帐号

 

    1. gcloud iam service-accounts create $SERVICE_ACCOUNT

 

    1. 已创建服务帐号 [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

    1. 为了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 创建和删除资源

    1. 使用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个销毁。

广告
将在 10 秒后关闭
bannerAds