用 Terraform 初始化 GCP环境

前置准备

安装 Terraform

请参考 Terraform 官方文件 安装 Terraform。MacOS 可以使用 Homebrew 安装:

brew install terraform

安装 Google Cloud SDK

请参考 Google Cloud SDK 官方文件 安装 Google Cloud SDK。MacOS 可以使用 Homebrew 安装:

brew install --cask google-cloud-sdk

安装完成后,请使用以下指令登录您的 Google Cloud 账号:

gcloud auth application-default login

在 GCP 上面建立 Service Account

确保已经安装并设置了 Google Cloud SDK,并且已经登录到您的 Google Cloud 账号。您可以执行以下指令來检查是否正确安装了 gcloud 工具:

$ gcloud version
Google Cloud SDK 432.0.0
bq 2.0.93
core 2023.05.19
gcloud-crc32c 1.0.0
gke-gcloud-auth-plugin 0.5.3
gsutil 5.24

接下来,使用以下指令建立 service account:

gcloud iam service-accounts create [SERVICE_ACCOUNT_NAME] --display-name "[DISPLAY_NAME]"

将 [SERVICE_ACCOUNT_NAME] 替换为您想要建立的 service account 名称,并将 [DISPLAY_NAME] 替换为适当的显示名称。

建立 service account 后,您可以为该账号新增所需的角色/权限。例如,如果要将 service account 分配为project的所有者,请执行以下指令:

gcloud projects add-iam-policy-binding [PROJECT_ID] \--member "serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \--role roles/owner

将 [PROJECT_ID] 替换为您的PROJECT ID,将 [SERVICE_ACCOUNT_EMAIL] 替换为刚刚建立的 service account 的電子邮件地址。

完成以上步骤后,您已成功使用 gcloud 指令建立了一个 service account,并为其分配了适当的角色/权限。接下来,您可以使用以下指令建立一个 service account 认证文件:

gcloud iam service-accounts keys create [FILE_NAME].json \--iam-account [SERVICE_ACCOUNT_EMAIL]

将 [FILE_NAME] 替换为您想要建立的自定义名称,将 [SERVICE_ACCOUNT_EMAIL] 替换为刚刚建立的 service account 的电子邮件地址。请将此文件妥善保存,后续的任何操作都基于此文件。

建立 Terraform 初始化认证配置

terraform init

在 main.tf 配置 projectcredentialsregionzone 等字段:

terraform {required_providers {google = {source  = "hashicorp/google"version = "4.66.0"}}required_version = ">= 0.14"
}provider "google" {project     = "your-project-id"credentials = file("your-service-account-key.json")region      = "asia-east1"zone        = "asia-east1-a"
}

其中 credentials 参数为刚刚创建的 service account 配置文件。还可以用 terraform.tfvars 來设定:

project     = "your-project-id"
credentials = "your-service-account-key.json"
region      = "asia-east1"
zone        = "asia-east1-a"

除了配置 credentials 之外,您也可以使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量来设定 service account 认证文件的路径:

export GOOGLE_APPLICATION_CREDENTIALS="your-service-account-key.json"

建立 GCP 资源

main.tf

terraform {required_providers {google = {source  = "hashicorp/google"version = "4.66.0"}}required_version = ">= 0.14"
}variable "project_id" {description = "project id"
}variable "region" {description = "region"
}variable "zone" {description = "zone"
}provider "google" {project = var.project_idregion  = var.regionzone    = var.zone
}

建立 VPC 资源

# VPC
resource "google_compute_network" "tf-vpc" {name                    = "${var.project_id}-tf-vpc"auto_create_subnetworks = "false"
}

完成以上步骤后,您可以使用以下指令来预览 Terraform 将要建立的资源:

terraform plan

如果预览結果沒有问题,您可以使用以下指令来建立资源:

terraform apply

存储 Terraform 状态到 GCS 

执行完上述步骤后,在terraform资源配置目录下底下多了一个 terraform.tfstate 文件,这个文件是用来记录 Terraform 管理的资源状态,以及资源间的关联性。如果您想要将这个文件存储到 GCS,可以用 Terraform 建立 GCS 相关资源:

# GCS
resource "random_id" "bucket_prefix" {byte_length = 8
}resource "google_storage_bucket" "tf-state-bucket-demo" {name     = "tf-state-bucket-demo-${random_id.bucket_prefix.hex}"force_destroy = falselocation      = "US"storage_class = "STANDARD"versioning {enabled = true}
}

输出 GCS bucket 名称

output "tf_state_bucket" {value = google_storage_bucket.tf-state-bucket.name
}

可以看到底下结果:

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.Outputs:tf_state_bucket = tf-state-bucket-demo-5704c463dc9b78df

打开main.tf档案,加入以下配置到 terraform主配置:

  backend "gcs" {bucket = "tf-state-bucket-demo-5704c463dc9b78df"prefix = "terraform/state"}

再执行一次 terraform init,就会看到以下结果:

Initializing the backend...
Acquiring state lock. This may take a few moments...
Do you want to copy existing state to the new backend?Pre-existing state was found while migrating the previous "local" backend to thenewly configured "gcs" backend. No existing state was found in the newlyconfigured "gcs" backend. Do you want to copy this state to the new "gcs"backend? Enter "yes" to copy and "no" to start with an empty state.Enter a value:

输入 yes,就会看到以下结果;

Successfully configured the backend "gcs"! Terraform will automatically
use this backend unless the backend configuration changes.Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
- Reusing previous version of hashicorp/random from the dependency lock file
- Using previously-installed hashicorp/google v4.66.0
- Using previously-installed hashicorp/random v3.5.1Terraform has been successfully initialized!

这样就可以透通过GCS进行Terraform 状态文件的存储及版本控制了。最后可以将目录下状态文件刪除:

rm terraform.tfstate
rm terraform.tfstate.backup

删除 GCP资源

如果想要刪除建立的资源,可以在资源目录下使用以下指令:

terraform destroy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Multigranularity and MultiscaleProgressive Contrastive Learning

这篇文章将一张图片划分为四个不同细粒度大小的图片,然后输出四个神经网络,这四个神经网络共享权重,得到四个输出,将这四个输出求交叉熵损失和对比学习损失,共同监督模型学习。 通过对比学习,最大化一个Bat…

Microsoft Edge无法启动搜索问题的解决

今天本来想清一下电脑,看到visual studio2022没怎么用了就打算卸载掉。然后看到网上有篇文章说进入C盘的ProgramFiles(x86)目录下的microsoft目录下的microsoft visual studio目录下的install目录中,双击InstallCleanup.exe&#…

谷歌浏览器与谷歌驱动匹配

网址:Chrome for Testing availability (googlechromelabs.github.io)

中医诊所处方药材管理系统有哪些必备功能?

随着信息技术的飞速发展,传统中医行业也迎来了数字化转型的浪潮。欣九康诊疗系统,具有全面的功能,可以作为一款合适中医诊所处方药材管理系统来使用。那么,中医诊所使用欣九康,有哪些独特的功能和优势呢?能否为中医诊…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人脸 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明,具体可以参考:VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类,它用于实现一种快速的物体检测算法,称…

API接口技术开发分享;按关键字搜索淘宝、天猫商品API返回值接入说明

淘宝数据API的接入流程主要包括注册key账号、创建开发者应用、获取ApiKey和ApiSecret、申请API权限等步骤。淘通过这些接口可以获取商品、订单、用户、营销和物流管理等多方面的数据。以下是关于淘宝数据API接入流程的相关介绍: 注册key账号:进行账号注册…

JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码

JAVA医院绩效考核系统源码 功能特点:大型医院绩效考核系统源码 医院绩效管理系统主要用于对科室和岗位的工作量、工作质量、服务质量进行全面考核,并对科室绩效工资和岗位绩效工资进行核算的系统。医院绩效管理系统开发主要用到的管理工具有RBRVS、DRGS…

AUCell和AddModuleScore函数进行基因集评分

AUCell 和AddModuleScore 分析是两种主流的用于单细胞RNA测序数据的基因集活性分析的方法。这些基因集可以来自文献、数据库或者根据具体研究问题进行自行定义。 AUCell分析原理: 1、AUCell分析可以将细胞中的所有基因按表达量进行排序,生成一个基因排…

Unity核心

回顾 Unity核心学习的主要内容 项目展示 基础知识 认识模型制作流程 2D相关 图片导入设置相关 图片导入概述 参数设置——纹理类型 参数设置——纹理形状 参数设置——高级设置 参数设置——平铺拉伸 参数设置——平台设置(非常重要) Sprite Sprite Edit…

【Apache Doris】周FAQ集锦:第 7 期

【Apache Doris】周FAQ集锦:第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

uvalde-bash提权

**后续需要虚拟机的私信我,我会打包进行文章发布链接,请持续关注!!!** VM网络不通也没法改密码进去,只能下个VirtualBox和VMware互通了 vmware与virtualbox虚拟机互通_vmware和virtualbox互联-CSDN博客 但…

动态规划03(二维01背包,一维01背包,leetcode416)

参考资料: https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 46. 携带研究材料(第六期模拟笔试) 题目描述: 输入示例 6 1 2 2 3 1 5 2 2 3 1 5 4 3 输出示例 …

软件测试质量度量之 “三级指标体系”

管理学大师彼得 - 德鲁克曾说过:无数据不管理。 数字是人们快速认知事物的一种有效方式。无论在生活还是工作,对事还是对人都息息相关。碰上难以的用数字描述事物或现象肯定是没有找对适用的指标和度量方式。尤其对于质量工程方面的工作,定量…

喂饭教程:AI生成100套Word题库阿里云百炼实训营

郭震原创,手撸码字187022张图 你好,我是郭震 1 实际需求 前段时间,有个关注我的粉丝联系我,是一位大学计算机女老师。 她想做一个二级考试题库,选择题实操题,最好100套以上,拿来给学生练手。 问…

解两道四年级奥数题(等差数列)玩玩

1、1~200这200个连续自然数的全部数字之和是________。 2、2,4,6,……,2008这些偶数的所有各位数字之和是________。 这两道题算易错吧,这里求数字之和,比如124这个数的全部数字之和是1247。 …

【ClickHouse】副本、分片集群 (六)

副本 副本的目的主要是保障数据的高可用性,即使一台ClickHouse节点宕机,那么也可以从其他服务器获得相同的数据。 https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ 副本写入流程 写入流程如图-18所示: 图-18 写…

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

以下为V5-6R2019安装说明 1.将两卷安装文件解压到同一目录内,互相覆盖即可 (按用户需要下载 CATIA 或者DELMIA) 以上为 CATIA 的安装包 以上为 DELMIA 的安装包 两者合并到一起,同一目录 2.解压后运行setup.exe 如遇到报错&…

数据集标注研究

主要研究数据集标注存储文件的数据存储格式 目录 0.简介1.coco128-seg数据格式1.1 分割标注格式2.YOLO格式2.1 YOLO目标识别标签2.2 yolov5-seg分割标签2.TT100K数据集标注2.1 TT100K数据集标注文件解析0.简介 1.coco128-seg数据格式 1.1 分割标注格式 如coco128-seg数据集 …

【一步一步了解Java系列】:认识异常类

看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者:小闭…

论文阅读03(基于人类偏好微调语言模型)

1.主题 基于人类偏好微调语言模型(Fine-Tuning Language Models from Human Preferences) 出处: Fine-Tuning Language Models from Human Preferences、 2.摘要 奖励学习使得强化学习(RL)可以应用于那些通过人类判断…