前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >terraform简单的开始-简单分析一下内容

terraform简单的开始-简单分析一下内容

原创
作者头像
对你无可奈何
发布2023-09-15 15:32:23
3150
发布2023-09-15 15:32:23
举报
文章被收录于专栏:运维专栏

紧跟上文:terraform简单的开始-安装和一些配置.先对照上一章文章的main.tf进行一下解读

解析上一篇的代码:

上一篇中main.tf代码如下:

代码语言:txt
复制
terraform {
  required_providers {
    tencentcloud = {
      source = "tencentcloudstack/tencentcloud"
      version = "1.81.25"
    }
  }
}
variable "region" {
  description = "腾讯云地域"
  type    = string
  default     = "ap-shanghai"
}
variable "secret_id" {}
variable "secret_key" {}

# 设置腾讯云提供者
provider "tencentcloud" {
  secret_id  =var.secret_id
  secret_key = var.secret_key 
  region = var.region
}
data "tencentcloud_availability_zones" "availability_zones" {}

output "zones" {
  value = data.tencentcloud_availability_zones.availability_zones
}

下面解析以下代码部分:

provider 部分

下面这些代码其实是关于provider的声明:

代码语言:txt
复制
terraform {
  required_providers {
    tencentcloud = {
      source = "tencentcloudstack/tencentcloud"
      version = "1.81.25"
    }
  }
}

# 设置腾讯云提供者
provider "tencentcloud" {
  secret_id  =var.secret_id
  secret_key = var.secret_key 
  region = var.region
}

这段Terraform代码是用来声明Terraform配置文件中所需的提供者(provider)。在这个例子中,我们使用了Tencent Cloud(腾讯云)的提供者。

terraform块

具体来说,代码中的terraform块指示Terraform配置的开始,**required_providers**块用于声明所需的提供者。在这里,我们声明了一个名为"tencentcloud"的提供者。

**tencentcloud**块内部,我们指定了提供者的相关信息:

    • **source**字段指定提供者的源。在这里,我们使用了"tencentcloudstack/tencentcloud"作为提供者的源,这是Tencent Cloud 官方维护的提供者。
    • **version**字段指定了所需的提供者版本。在这里,我们指定了版本号为"1.81.25",表示我们需要使用1.81.25版本的Tencent Cloud提供者。provide块**provide**块这段代码是在Terraform中配置使用Tencent Cloud提供者(provider),并指定了一些必要的参数。 首先,provider块用于配置Tencent Cloud提供者。在这里,我们使用了"tencentcloud"作为提供者的名称,与前面声明的required_providers块中的名称相对应。 在provider块内部,我们指定了一些参数:
    • **secret_id**:这个参数是通过变量var.secret_id获得的,它应该包含您的Tencent Cloud账号的SecretId。SecretId是一种访问密钥,用于对Tencent Cloud资源进行身份验证和授权。
    • **secret_key**:这个参数是通过变量var.secret_key获得的,它应该包含您的Tencent Cloud账号的SecretKey。SecretKey是与SecretId关联的机密,用于对Tencent Cloud资源进行身份验证和授权。
    • **region**:这个参数是通过变量var.region获得的,它指定了您希望使用的Tencent Cloud区域。Terraform将在指定的区域中创建和管理资源。

通过这些参数配置,Terraform将使用提供的SecretId、SecretKey和区域信息来进行身份验证,并与Tencent Cloud API进行通信,以创建、更新或删除Tencent Cloud资源。

请注意,变量var.secret_idvar.secret_keyvar.region应该在Terraform配置文件中定义和赋值,以便在使用此提供者时提供正确的值。

通过这段代码,Terraform将会自动下载并加载所需的Tencent Cloud提供者,并使用指定的版本。这样,在Terraform配置文件中就可以使用Tencent Cloud提供者的资源和数据源来创建和管理腾讯云资源。

其他的:

variable 变量的定义:

这里就定义了 region区域 已经腾讯云密钥:

代码语言:txt
复制
variable "region" {
  description = "腾讯云地域"
  type    = string
  default     = "ap-shanghai"
}
variable "secret_id" {}
variable "secret_key" {}

data and output块

data块用于从外部数据源获取信息。

output块用于定义输出值,这些值可以在Terraform执行完毕后显示出来

代码语言:txt
复制
data "tencentcloud_availability_zones" "availability_zones" {}

output "zones" {
  value = data.tencentcloud_availability_zones.availability_zones
}

恩常用的块还有resource块 用户声明和配置terraform相关资源,后面会展开相关。

tfvars 文件:

我是创建了一个credentials.tfvars文件,名称不重要。我是主要为了将密码跟main.tf分开截图方便....免得打马赛克!

代码语言:txt
复制
secret_id  = "xxxxxxxx"
secret_key = "xxxxxxxx"

相关的命令

terraform init:

目录下会生成.terraform的文件夹,其目录记录基本如下:.terraform/providers/registry.terraform.io/ 我的是腾讯云的,故下面的结构就是tencentcloudstack/tencentcloud/ 版本号

terraform plan

注意:由于为这里都使用了外部变量,故后面跟了-var-file=xxx!

执行 terraform plan命令:

代码语言:txt
复制
terraform plan

terraform plan命令用于生成并显示Terraform执行计划(execution plan)。

执行计划是Terraform根据当前配置文件和状态文件的内容,以及云服务商的API信息,计算出的一系列操作步骤。这些步骤描述了Terraform将如何创建、修改或删除资源以达到配置文件的期望状态。

当您运行terraform plan时,Terraform会执行以下操作:

  1. 分析配置:Terraform会读取配置文件(如.tf文件)和状态文件(如.tfstate文件),并根据这些信息了解当前资源的状态、配置变化和依赖关系。
  2. 计划生成:Terraform会根据当前状态和配置文件的差异,生成一个计划。这个计划包含了所需的资源创建、修改或删除操作,以及执行这些操作所需的顺序和前置条件。
  3. 显示计划:Terraform会将计划以易读的形式显示在终端中。它会列出要创建、修改或删除的资源,以及相关的属性变化。您可以查看计划,以了解Terraform将要执行的操作,以及它对现有资源的影响。 通过查看执行计划,您可以验证Terraform的操作是否符合预期,并确保不会意外地创建、修改或删除资源。这使您能够在应用实际变更之前,对计划进行审查和验证。 请注意,terraform plan只是生成计划,并不会实际应用变更。要应用计划并执行资源变更,请运行terraform apply命令。 注意:以上文字使用chatgpt3.5生成!

terraform apply

执行terraform apply 命令:

代码语言:txt
复制
terraform apply -var-file=credentials.tfvars

terraform apply命令用于将Terraform的执行计划应用于云环境,并创建、修改或删除相应的资源。

当您运行terraform apply时,Terraform会执行以下操作:

  1. 计划验证:Terraform会再次验证执行计划,以确保计划与当前的配置文件和状态文件匹配。它会检查是否有其他人或进程已经更新了配置或状态文件。
  2. 资源变更:如果计划验证通过,Terraform会开始执行计划中描述的操作步骤。它会按照计划中指定的顺序,创建、修改或删除资源,以使云环境与配置文件的期望状态保持一致。
  3. 提示确认:在实际应用变更之前,Terraform会向您显示一个提示,列出即将执行的操作和其影响。您需要确认是否要继续应用变更。如果您输入"yes"确认,Terraform将继续执行。
  4. 资源管理:Terraform会调用相应的云服务商API,执行操作以创建、修改或删除资源。它会根据配置文件中定义的资源类型和属性,与云服务商进行交互,并按计划中的指示进行操作。
  5. 状态更新:一旦资源变更完成,Terraform会更新状态文件(如.tfstate文件),以反映最新的云环境状态。状态文件用于跟踪和管理资源的状态,并在后续的计划和应用过程中提供准确的信息。

通过运行terraform apply,您可以将配置文件中的变更应用到云环境,并确保云环境与配置文件的期望状态保持一致。请注意,应用变更可能会导致资源的创建、修改或删除,因此请谨慎操作,并在执行前仔细检查计划和确认提示。

apply 这里顺便讲一下terraform.tfstate 状态文件:

关于tfstate文件

terraform.tfstate文件是Terraform使用的状态文件,用于跟踪和管理资源的状态。

Terraform在执行过程中会将资源的当前状态存储在.tfstate文件中。这个文件记录了创建的资源、其属性的值,以及与其他资源之间的关系和依赖。它是一个JSON格式的文件,包含了资源的详细信息。

.tfstate文件的作用包括:

  1. 跟踪资源状态:状态文件记录了Terraform创建、修改或删除的资源以及其当前属性的值。通过状态文件,Terraform可以了解资源的实际状态,以便在后续的计划(terraform plan)和应用(terraform apply)过程中进行比较和更新。terraform destroy -var-file=credentials.tfvars
  2. 避免重复创建:Terraform使用状态文件来判断资源是否已经创建。当您再次运行terraform apply时,Terraform会读取状态文件中的信息,并根据配置文件中的定义和状态文件的对比,决定是否需要创建新的资源。这样可以避免重复创建已经存在的资源。
  3. 管理依赖关系:状态文件记录了资源之间的依赖关系。Terraform使用这些信息来确保在创建或修改资源时,满足依赖关系的顺序和条件。这样可以保证资源之间的正确关联和一致性。 .tfstate文件通常与Terraform配置文件(如.tf文件)位于同一目录中。在执行terraform init时,Terraform会自动初始化和管理状态文件,根据配置中的backend设置将其存储在本地文件系统或远程存储中(如AWS S3、Azure Blob Storage等)。 请注意,.tfstate文件包含敏感信息(例如资源的密码、密钥等),因此需要妥善保护。建议不要直接手动修改或共享该文件,而是使用Terraform提供的命令和工具来管理和操作状态文件。terraform destroyterraform destroy

当你使用Terraform创建了基础设施和资源后,有时候你可能需要停止使用这些资源并将其清理掉。这就是使用terraform destroy命令的情况。

terraform destroy是Terraform命令行工具提供的一个命令,用于销毁通过Terraform创建的基础设施和资源。它会根据你的配置文件(通常是以.tf为后缀的文件)中定义的内容,逆向执行创建资源的操作,将资源从目标环境中删除。

执行terraform destroy会触发以下过程:

  1. Terraform会读取你的配置文件,分析其中定义的资源和依赖关系。
  2. Terraform会根据依赖关系的逆序,从最底层的资源开始依次销毁。这意味着资源之间的依赖关系会被正确处理,以确保资源在正确的顺序下被销毁。
  3. Terraform会向云服务提供商(如AWS、Azure、Google Cloud等)的API发送请求,执行资源的删除操作。
  4. Terraform会输出销毁过程的详细信息,包括删除的资源和状态更新。 需要注意的是,terraform destroy是一个非常强大且具有破坏性的命令,它会删除你指定的所有资源,包括存储、虚拟机、数据库等。因此,在执行该命令之前,请确保你真的想要销毁这些资源,并且备份了任何重要的数据。一旦执行了terraform destroy,很难恢复被销毁的资源,可能需要重新创建和配置。 为了避免意外销毁,你可以使用Terraform的工作空间(workspace)功能,将不同的环境隔离开来,并为每个环境创建独立的配置文件。这样,你可以在不同的工作空间中执行terraform destroy,而不会影响其他环境的资源。 总而言之,terraform destroy是一个用于销毁通过Terraform创建的基础设施和资源的命令,它能够确保资源的正确删除和清理,但在执行之前请务必谨慎考虑,并确保备份了重要的数据。 注: 文字都来自chatgpt。由于咱们这例子中并没有创建资源。所以基本忽略只是演示!其他有用的玩法:从Terraform基础概念——Provider看来的:多Provider示例

个人觉得可以用一下。先简单记录一下。这一篇文章只是简单记录分析一下项目。接下来完整实现一下!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解析上一篇的代码:
    • provider 部分
      • terraform块
    • 其他的:
      • variable 变量的定义:
      • data and output块
      • tfvars 文件:
    • 相关的命令
      • terraform init:
      • terraform plan
      • terraform apply
相关产品与服务
云资源自动化 for Terraform
云资源自动化 for Terraform(Infrastructure Automation for Terraform)是腾讯云基于全球备受欢迎的基础设施即代码(Infrastructure as Code)工具 Terraform 插件扩展体系下,提供的腾讯云资源部署、实施和管理的自动化能力,将 Terraform 完善成熟的基础设施自动化工具能力和腾讯云的云资源服务能力相互联接,让客户可以方便地实施 DevOps 和多云部署等模式。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档