基础架构自动编排(Terraform)Terraform命令行工具
terraform:
官方介绍:
Terraform是作为代码软件工具的开源基础结构,可提供一致的CLI工作流来管理数百个云服务。Terraform将云API编码为声明性配置文件
安装:
下载地址https://www.terraform.io/downloads.html
选择linux 64进行下载:
安装: 直接解压zip包,将解压后文件放入/url/local/bin/目录下:
unzip terraform_0.13.5_linux_amd64.zip
mv terraform /url/local/bin/
命令:
Usage: terraform [-version] [-help] <command> [args]
The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
env Workspace management
fmt Rewrites config files to canonical format
get Download and install modules for the configuration
graph Create a visual graph of Terraform resources
import Import existing infrastructure into Terraform
init Initialize a Terraform working directory
login Obtain and save credentials for a remote host
logout Remove locally-stored credentials for a remote host
output Read an output from a state file
plan Generate and show an execution plan
providers Prints a tree of the providers used in the configuration
refresh Update local state file against real resources
show Inspect Terraform state or plan
taint Manually mark a resource for recreation
untaint Manually unmark a resource as tainted
validate Validates the Terraform files
version Prints the Terraform version
workspace Workspace management
All other commands:
0.12upgrade Rewrites pre-0.12 module source code for v0.12
0.13upgrade Rewrites pre-0.13 module source code for v0.13
debug Debug output management (experimental)
force-unlock Manually unlock the terraform state
push Obsolete command for Terraform Enterprise legacy (v1)
state Advanced state management
一. 文件及工作目录:
terraform定义文件需使用 .tf
或.tf.json
结尾, 否则不识别
-chdir 切换工作目录: terraform -chdir=environments/production apply
隐藏.terraform
目录 , 缓存插件
状态数据文件: terraform.tfstate文件(如果目录仅使用默认工作空间)或
terraform.tfstate.d`目录(如果目录使用多个工作空间)
terraform的操作, 对比状态基本都需要依赖 state文件, 因此state文件需要妥善保管, 最好拥有备份, 以防丢失, 虽然state文件可以重建,但是重建相对费时费力.
二.命令行解析
terraform提供框架, 使用其他云资源需要云厂商provider提供对应插件包, 在初始化目录时,会依据定义内容下载,缓存对应插件包
在初始化完成后, 在当前目录有一个隐藏.terraform
目录,Terraform用来管理缓存的提供程序插件和模块,记录当前哪个 工作空间处于活动状态,并记录最后一个已知的后端配置,以防下次运行时需要迁移状态。该目录由Terraform自动管理,并在初始化期间创建
当修改了内容需要重新初始化的时候, 可以再次初始化
初始化: terraform init
下载引用模块: terraform get
-
plan 查看执行计划
terraform plan命令评估Terraform配置以确定它声明的所有资源的期望状态,然后将该期望状态与使用当前工作目录和工作空间管理的实际基础结构对象进行比较。它使用状态数据来确定哪些实际对象与哪些声明的资源相对应,并使用相关的基础结构提供程序的API检查每个资源的当前状态
pan不会对实际的资源进行更改, 只做数据和状态信息对比 -
apply 应用配置
-compact-warnings -如果Terraform产生了没有错误的警告,则以更紧凑的形式显示警告,仅包含摘要消息。
-lock=true -锁定状态文件。
-lock-timeout=0s -重试状态锁定的持续时间。
-input=true -输入变量。
-auto-approve -直接执行,无需交互。
-no-color -禁用带有颜色的输出。
-refresh=true-在计划和应用之前,更新每种资源的状态。
-target=resource-要定位的资源地址。
-var 'foo=bar'-在Terraform配置中设置一个变量。可以多次设置此标志。
-var-file=foo-从变量文件中在Terraform配置中设置变量。如果当前目录中存在一个terraform.tfvars或任何.auto.tfvars文件,它们将被自动加载。terraform.tfvars首先加载,然后.auto.tfvars按字母顺序加载文件。由指定的任何文件将-var-file覆盖从工作目录中的文件自动设置的任何值。该标志可以多次使用。
- destroy 销毁资源/配置
(terraform_env) [root@VM_99_2_centos apps]# terraform destroy -h
Usage: terraform destroy [options] [DIR]
Destroy Terraform-managed infrastructure.
Options:
-backup=path Path to backup the existing state file before
modifying. Defaults to the "-state-out" path with
".backup" extension. Set to "-" to disable backup.
-auto-approve Skip interactive approval before destroying.
-force Deprecated: same as auto-approve.
-lock=true Lock the state file when locking is supported.
-lock-timeout=0s Duration to retry a state lock.
-no-color If specified, output won't contain any color.
-parallelism=n Limit the number of concurrent operations.
Defaults to 10.
-refresh=true Update state prior to checking for differences. This
has no effect if a plan file is given to apply.
-state=path Path to read and save state (unless state-out
is specified). Defaults to "terraform.tfstate".
-state-out=path Path to write state to that is different than
"-state". This can be used to preserve the old
state.
-target=resource Resource to target. Operation will be limited to this
resource and its dependencies. This flag can be used
multiple times.
-var 'foo=bar' Set a variable in the Terraform configuration. This
flag can be set multiple times.
-var-file=foo Set variables in the Terraform configuration from
a file. If "terraform.tfvars" or any ".auto.tfvars"
files are present, they will be automatically loaded.
在销毁时需要输入yes进行确认
-auto-approve 可以自动确认,无需进行交互
terraform plan -destroy 可以预览destroy的内容
- console
terraform console [options]
该命令提供了一个交互式命令行控制台,用于评估和试验表达式
-
fmt
terraform fmt命令用于将Terraform配置文件格式化样式/格式 -
validate
terraform validate命令验证目录中的配置文件 -
0.13upgrade
terraform 0.13upgrade [options] [dir]
主要目的是确定模块正在使用哪些提供程序,在可能的情况下检测这些提供程序的源地址,并将此信息记录在一个 required_providers块中 -
graph
terraform graph [options]
根据当前配置或执行计划输出Terraform资源的可视执行图 -
output 输出
terraform output [options] [NAME]
没有其他参数,output将显示根模块的所有输出。如果NAME指定了输出,则仅输出该输出的值
-json 输出为json格式
-raw输出字符串
-
state show
输出状态文件单个资源属性 -
import导入资源
terraform import [options] ADDRESS ID
导入将从ID中找到现有资源,并将其导入给定地址的Terraform状态。
ADDRESS必须是有效的资源地址。因为任何资源地址都是有效的,所以import命令可以将资源导入模块以及直接导入状态的根目录。
ID取决于要导入的资源类型。例如,对于AWS实例,实例ID(i-abcd1234)terraform import aws_instance.foo i-abcd1234
并不是所有的资源都支持导入, 具体看provider支持情况
13. taint
标记污染
不会修改基础结构,但是会修改状态文件,以将资源标记为已污染。将资源标记为已污染后,下一个 计划将显示该资源将被销毁并重新创建,apply将实施此更改
14. untaint
取消标记污染
三. 配置:
- TF_LOG
export TF_LOG=trace
详细信息显示在stderr中
禁用export TF_LOG=off
- TF_LOG_PATH
设置log的位置export TF_LOG_PATH=./terraform.log
需要TF_LOG 也同时启用 - TF_DATA_DIR
TF_DATA_DIR 更改Terraform保留其每个工作目录数据的位置,例如当前的远程后端配置
- 点赞
- 收藏
- 关注作者
评论(0)