IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Terraform基础(四)-Terraform配置文件基础语法&格式 -> 正文阅读

[开发工具]Terraform基础(四)-Terraform配置文件基础语法&格式

概述

????????用Terraform的语言编写配置文件,告诉Terraform需要安装哪些插件、创建哪些基础设施。

文件和目录结构

  • terroform的主配置文件必须是在工作目录的顶级目录中所有的.tf文件。顶级目录的子目录被视为独立的模块,并且不会自动包含到配置中。
  • 默认情况下terraform会加载工作目录下所有.tf文件,并期望不同的.tf文件定义不同的资源。如果不同的.tf文件尝试定义同一个对象,那么Terraform将会报错。
  • 如果确实有需要定义配置文件覆盖的场景,可以将文件命名为"override.tf / override.tf.json"或以"_override.tf / _override.tf.json"结尾。

????????配置文件的后缀通常为.tf,或者使用json格式编写配置文件时其后缀为.tf.json。配置文件的编码必须为UTF-8。

????????terraform init初始化工作空间后目录下会出现以下文件。

  • ?.terraform? ? ? ? ? ? ? ? ? ? ? ? ?目录下存放了依赖的providers的缓存文件
  • .terraform.locl.hcl? ? ? ? ? ? ? 依赖锁文件,锁定terraform配置依赖的适配的providers的版本
  • terraform.tfstate? ? ? ? ? ? ? ? ?记录terraform基础设施资源当前的状态
  • terraform.tfstate.backup? ? 记录terraform基础设施资源上一个状态
  • xxx.tf? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 自定义的配置文件。理解为你期望的terraform基础设施资源的状态

配置文件语法

Terraform 语言的语法仅包含几个基本元素:

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
  # Block body
  <IDENTIFIER> = <EXPRESSION> # Argument
}
  • <BOLCK>是其他内容的容器,通常表示某种对象的配置。包括:<BOLCK TYPE>(如resource);可以有零个或多个<BOLCK LABEL>;主体可以包含任意数量的参数和嵌套块。
  • Argument 参数——由<IDENTIFIER>和<EXPRESSION>组成,存在于BLOCK内
  • <EXPRESSION>,表示一个值或者用表达式表达的一个值

provider

Terraform依赖的组件成为providers。Terraform配置必须声明需要哪些providers,以便可以安装和使用它们。

provider一般会提供 resource的类型 和 DATA SOURCE

Terraform具体支持哪些provider可以在这里查看:Terraform Registry

示例

provider "alicloud" {
    access_key = "your_ak_xxx"
    secret_key = "your_sk_xxx"
    region = "cn-shenzhen"
}

alias:同一提供者的多个配置

????????可以选择为同一个提供者定义多个配置,并选择基于每个资源或每个模块使用哪一个。这样做的主要原因是支持一个云平台的多个区域等场景。

# The default provider configuration; resources that begin with `aws_` will use
# it as the default, and it can be referenced as `aws`.
provider "aws" {
  region = "us-east-1"
}

# Additional provider configuration for west coast region; resources can
# reference this as `aws.west`.
provider "aws" {
  alias  = "west"
  region = "us-west-2"
}

resource和module不指定提供者时,默认以alias值的第一个单词推断默认的provider

多配置下,resource可以用provider参数指定使用哪个提供者

resource "aws_instance" "foo" {
  provider = aws.west

  # ...
}

多配置下,子模块可以用providers参数指定使用哪些提供者

module "aws_vpc" {
  source = "./aws_vpc"
  providers = {
    aws = aws.west
  }
}

required_providers

Terraform0.13以及更高版本中,provider块的version参数已启用。取而代之的似乎使用required_providers块指定provider的版本。

required_providers由本地名称、源位置、版本约束组成:

本地名称(mycloud)、源位置(source)、版本约束(version)

terraform {
  required_providers {
    mycloud = {
      source  = "mycorp/mycloud"
      version = "~> 1.0"
    }
  }
}

provider "mycloud" {
  # ...
}

本地名称? ? ? ? 优先使用provider建议的首选本地名称

源位置? ? ? ? ? ? 缺省时,默认为 registry.terraform.io/hashicorp/<LOCAL?NAME>

版本约束? ? ? ? =>1.0 定义最低使用1.0版本;~>1.0定义 最高使用1.0版本

resource

resource "aws_instance" "web" {
  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"
}

resource????????????????????????resource块

"aws_instance"? ? ? ? ? ? ? 资源类型,由provider决定有哪些资源类型

"web"? ? ? ? ? ? ? ? ? ? ? ? ? ? ?本地名称,仅用于在当前模块中引用此资源

{...}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?参数,大多数参数取决于资源类型。系统也有元参数

元参数 Meta-Arguments

depends_on        用于指定隐藏的依赖项
count             用于根据计数创建多个资源实例
for_each          根据映射或字符串集创建多个实例
provider          用于选择非默认提供程序配置
lifecycle         用于生命周期自定义
provisioner       用于在资源创建后采取额外的行动

data

data块可以根据provider提供的DATA SOURCE,填写对应的参数。搜索到相对应的基础设施的信息,然后data块可以作为数据源提供相关数据信息。

示例

resource中引用本地名称为"web"的data source的id。

data块中的各种参数只是为了找到对应的基础设施资源。

data "aws_ami" "web" {
  filter {
    name   = "state"
    values = ["available"]
  }

  filter {
    name   = "tag:Component"
    values = ["web"]
  }

  most_recent = true
}
resource "aws_instance" "web" {
  ami           = data.aws_ami.web.id
  instance_type = "t1.micro"
}

variable

变量定义

variable块只能声明变量,并不能指定变量的值

variable "image_id" {
  type        = string
  description = "This is image id"
  default     = "abcxxxx"
}

支持参数

default        - 然后使变量可选的默认值。
type           - 此参数指定变量接受的值类型。
description    - 这指定输入变量的文档。
validation     - 定义验证规则的块,通常除了类型约束。
sensitive      - 在配置中使用变量时限制 Terraform UI 输出。
nullable       - 指定变量是否可以为空。

使用变量

resource "some_resource" "a" {
  name    = var.image_id
  ...
}

变量输入

变量输入有多种方式

  1. terraform apply执行时交互式输入
  2. terraform apply -var"image_id=value"
  3. 环境变量输入,格式:TF_VAR_image_id='value'
  4. 最佳实践:通过.tfvars文件赋值,terraform apply -var-file="vars_file_path"

编辑xx.tfvars文件

image_id = "value"

命令行引用tfvars文件

terraform apply -var-file="xx.tfvars"

output

output就像函数的retrun返回值。执行完terraform apply之后输出的返回值。

示例

创建一个vpc,使用output输出vpc的id 和 执行成功状态提示。

#配置阿里云provider
provider "alicloud" {
    access_key = "your_ak_xxx"
    secret_key = "your_sk_xxx"
    region = "cn-shenzhen"
}

#创建阿里云vpc
resource "alicloud_vpc" "liqi-vpc-test" {
    vpc_name = "liqi-vpc-test"
    cidr_block = "10.100.0.0/16"
}

output "apply_state" {
    value = "apply successful"
}

output "new_vpc_id" {
    value = "${alicloud_vpc.liqi-vpc-test.id}"
}

执行结果

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:19:34  更:2022-05-08 08:20:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 2:31:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码