Terraform 学习总结——Terraform 命令详解

Posted 科技D人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Terraform 学习总结——Terraform 命令详解相关的知识,希望对你有一定的参考价值。

前言

Terraform 是用于安全有效地构建,更改和版本控制基础结构的工具。Terraform可以管理现有和流行的服务提供商以及定制的内部解决方案。配置文件向 Terraform 描述了运行单个应用程序或整个数据中心所需的组件。Terraform 生成执行计划,以描述达到预期状态所需执行的操作,然后执行该计划以构建所描述的基础结构。随着配置的更改,Terraform 能够确定更改的内容并创建可以应用的增量执行计划。Terraform 可以管理的基础结构包括低级组件,例如计算实例,存储和网络,以及高级组件,例如 DNS 条目,SaaS 功能等。

Terraform 主要功能

基础架构即代码, 使用高级配置语法描述基础结构。这样就可以像对待任何其他代码一样对数据中心的蓝图进行版本控制和处理。此外,基础架构可以共享和重复使用。执行计划, Terraform 有一个“计划”步骤,在其中生成执行计划。执行计划将显示 Terraform 在您调用 apply 时将执行的操作。这样可以避免 Terraform 操纵基础结构时出现任何意外。-资源图, Terraform 构建所有资源的图形,并并行化所有非依赖资源的创建和修改。因此,Terraform 尽可能高效地构建基础架构,并且操作员可以洞悉其基础架构中的依赖性。变更自动化, 可以将复杂的变更集应用于您的基础架构,而无需进行过多的人工干预。使用前面提到的执行计划和资源图,您可以准确地知道 Terraform 将要更改的内容和顺序,从而避免了许多可能的人为错误。

Terraform 安装

terraform 安装非常简单,只需要到 https://www.terraform.io/downloads.html 下载后解压文件放置到工作目录,也可以配置 path 指定 terafrom。安装 Terraform,找到与你系统匹配的软件包然后下载。Terraform被打包为一个 zip 归档文件。下载完 zip 文件以后,解压这个包。Terraform 是一个名为 terraform 的独立文件。包里其他所有的文件都可以安全删掉,Terraform 依然可以正常工作。最后一步确保 terraform 二进制文件在 PATH 上可用。

校验安装

Terraform 安装完以后,确认该安装在新开的终端中可运行,并检验 terraform 可用。通过执行 terraform 你将看到类似如下的输出的帮助信息:


$ terraform

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

# ...

如果你遇到一个terraform 未找到的错误,(因为)你的PATH环境变量没有设置正确。请回去检查确保你的PATH环境变量包含你terraform的安装目录。

Backend

Terraform 中的“后端”确定如何加载状态以及如何执行诸如此类的操作 apply。这种抽象可以实现非本地文件状态存储,远程执行等。默认情况下,Terraform 使用“本地”后端,这是您惯常使用的 Terraform 的正常行为。这是在整个引言中被调用的后端。这是后端的一些好处:

团队合作:后端可以远程存储其状态,并使用锁保护该状态以防止损坏。某些后端(例如 Terraform Cloud)甚至会自动存储所有状态修订的历史记录。将重要文件置于安全位置:根据需要从后端检索状态,并且仅将其存储在内存中。如果您使用的是后端(例如 Amazon S3),则状态一直保持不变的唯一位置是S3。

远程操作:对于较大的基础架构或某些更改, terraform apply 可能需要很长时间。一些后端支持远程操作,这些操作使该操作可以远程执行。然后,您可以关闭计算机,然后操作仍将完成。配合远程状态存储和上方锁定,这也有助于团队环境。

terraform 
    required_version = “>= 0.12”
    backend “s3” 
        bucket = “” //S3 桶用于存储状态文件
        dynamodb_table = “” //用于状态锁定和一致性的DynamoDB表的名称。该表必须有一个名为一个主键LockID与类型string。如果未配置,则将禁用状态锁定。
        key = “” // state 文件key路径和名称,包含后缀名
        encrypt = true
    

terraform init

-input=true如有必要,请输入。如果为false,则在需要输入时将出错。
-lock=false 在与状态相关的操作期间,禁用状态文件的锁定。
-lock-timeout=覆盖Terraform等待获取状态锁的时间。默认值为0s(零秒),如果另一个进程已经锁定,则会立即失败。
-no-color 在命令输出中禁用颜色代码。
-upgrade 将以前安装的所有插件更新为符合配置版本限制的最新版本。此选项不适用于手动安装的插件。
-get-plugins=false—跳过插件安装。Terraform将使用安装在用户plugins目录中的插件,以及已为当前工作目录安装的所有插件。如果安装的插件不足以进行配置,则初始化失败。

terraform plan

该 terraform plan 命令用于创建执行计划。除非明确禁用,否则Terraform会执行刷新,然后确定要实现配置文件中指定的所需状态需要执行哪些操作。该命令是检查一组更改的执行计划是否符合您的期望而不对实际资源或状态进行任何更改的便捷方法。例如,terraform plan 可以在将更改提交到版本控制之前运行,以建立对其将按预期方式运行的信心。可选 -out 参数可用于将生成的计划保存到文件中,以供以后执行 terraform apply,这在自动化运行 Terraform 时很有用 。

-destroy -如果设置,则生成销毁所有已知资源的计划。
-input=true -如果未直接设置,则要求输入变量。
-lock=true -支持锁定时锁定状态文件。
-no-color -禁用带有颜色的输出。
-out=path-保存生成的执行计划的路径。然后可以使用该计划,terraform apply以确保仅应用此计划中显示的更改。阅读下面有关已保存计划的警告。
-parallelism=n-在Terraform遍历图形时限制并发操作的数量 。默认为10
-refresh=true -在检查差异之前更新状态。
-state=path-状态文件的路径。默认为“ terraform.tfstate”。使用远程状态时忽略。
-target=resource- 要定位的资源地址。该标志可以多次使用。请参阅下面的详细信息。
-var 'foo=bar'-在Terraform配置中设置一个变量。可以多次设置此参数。变量值被解释为 HCL,因此可以通过此标志指定列表和映射值。
-var-file=foo-从变量文件配置中设置变量。如果当前目录中存在terraform.tfvars或任何.auto.tfvars文件,它们将被自动加载。terraform.tfvars首先加载,然后.auto.tfvars按字母顺序加载文件。指定的任何文件将-var-file覆盖从工作目录中的文件自动设置的任何值。该参数可以多次使用。

terraform apply

默认情况下,apply 在当前目录中扫描配置,并适当地应用更改。但是,可以提供另一种配置或执行计划的路径。显式执行计划文件可用于拆分计划,并将其应用于自动化系统中的单独步骤 。如果在命令行上未提供明确的计划文件,terraform apply 将自动创建一个新计划并提示您批准以应用该计划。如果创建的计划不包括对资源或根模块输出值的任何更改,terraform apply 则将立即退出,而不会提示。

-backup=path-备份文件的路径。默认为-state-out带有“ .backup”扩展名。通过设置为“-”禁用。
-compact-warnings -如果Terraform产生没有错误的警告,则以更紧凑的形式显示警告,仅包含摘要消息。

-lock=true -支持锁定时锁定状态文件。
-lock-timeout=0s -重试状态锁定的持续时间。
-input=true -如果未直接设置,则要求输入变量。
-auto-approve -申请前跳过计划的交互式批准。
-no-color -禁用带有颜色的输出。
-parallelism=n-在Terraform遍历图形时限制并发操作的数量 。默认为10
-refresh=true-在计划和应用之前,更新每个资源的状态。如果直接给出计划文件以应用,则这无效。
-state=path-状态文件的路径。默认为“ terraform.tfstate”。使用远程状态时忽略。此设置不会保留,其他命令(例如init)可能无法识别备用状态文件。要配置可用于所有terraform命令的备用状态文件路径,请使用local backend。
-state-out=path-写入更新的状态文件的路径。默认情况下,-state将使用该 路径。使用远程状态时忽略 
-target=resource- 要定位的资源地址。有关更多信息,请参阅中 的定位文档terraform plan。
-var 'foo=bar'-在Terraform配置中设置一个变量。可以多次设置此标志。变量值被解释为 HCL,因此可以通过此标志指定列表和映射值。
-var-file=foo-从变量文件在Terraform配置中设置变量。如果当前目录中存在a terraform.tfvars或任何.auto.tfvars文件,它们将被自动加载。terraform.tfvars首先加载,然后.auto.tfvars按字母顺序加载文件。指定的任何文件将-var-file覆盖从工作目录中的文件自动设置的任何值。该标志可以多次使用。

terraform apply

Terraform 管理的基础架构将被破坏。这将在销毁前要求确认。该命令接受 apply 命令接受的所有参数和标志,但计划文件参数除外。如果 -auto-approve 设置为,则不会显示销毁确认。
该 -target 标志不会影响“依赖关系”,而是会破坏依赖于指定目标的所有资源。任何 terraform destroy 命令的行为都可以使用等效 terraform plan -destroy 命令随时进行预览。

-lock=true -支持锁定时锁定状态文件。
-lock-timeout=0s -重试状态锁定的持续时间。
-input=true -如果未直接设置,则要求输入变量。
-auto-approve -申请前跳过计划的交互式批准。
-no-color -禁用带有颜色的输出。
-parallelism=n-在Terraform遍历图形时限制并发操作的数量 。默认为10
-refresh=true-在计划和应用之前,更新每个资源的状态。如果直接给出计划文件以应用,则这无效。
-state=path-状态文件的路径。默认为“ terraform.tfstate”。使用远程状态时忽略。此设置不会保留,其他命令(例如init)可能无法识别备用状态文件。要配置可用于所有terraform命令的备用状态文件路径,请使用local backend。
-state-out=path-写入更新的状态文件的路径。默认情况下,-state将使用该 路径。使用远程状态时忽略 
-target=resource- 要定位的资源地址。有关更多信息,请参阅中 的定位文档terraform plan。
-var 'foo=bar'-在Terraform配置中设置一个变量。可以多次设置此标志。变量值被解释为 HCL,因此可以通过此标志指定列表和映射值。
-var-file=foo-从变量文件在Terraform配置中设置变量。如果当前目录中存在a terraform.tfvars或任何.auto.tfvars文件,它们将被自动加载。terraform.tfvars首先加载,然后.auto.tfvars按字母顺序加载文件。指定的任何文件将-var-file覆盖从工作目录中的文件自动设置的任何值。该标志可以多次使用。

terraform taint

命令手动将 Terraform 管理的资源标记为已污染,强制将其销毁并在下一次应用时重新创建。该命令不会修改基础结构,但是会修改状态文件,以将资源标记为已污染。将资源标记为已污染后,下一个 计划将显示该资源将被销毁并重新创建,而下一个 应用将实施此更改。当您想要某种在资源属性中不可见的重新创建的副作用时,强制重新创建资源很有用。例如:重新运行预配器将导致节点不同,或者从基本映像重新引导计算机将导致新的启动脚本运行。请注意,为娱乐而污染资源可能会影响依赖于新污染资源的资源。例如,可能需要修改使用服务器IP地址的DNS资源,以反映受污染服务器的潜在新IP地址。在这种情况下, plan 命令将显示此内容。

-address参数是玷污了资源标记的地址。地址 采用资源地址语法语法,如其他命令的输出所示,例aws_instance.foo
aws_instance.bar[1]
aws_instance.baz[\\"key\\"] (资源地址中的引号必须在命令行上转义,以便您的shell不会解释它们)
module.foo.module.bar.aws_instance.qux
命令行标志都是可选的。可用标志的列表为:
 -allow-missing-如果指定,即使资源丢失,命令也将成功(退出代码0)。该命令仍然可以出错,但仅在严重错误的情况下才可以。
 -backup=path-备份文件的路径。默认为-state-out带有“ .backup”扩展名。通过设置为“-”禁用。
 -lock=true -支持锁定时锁定状态文件。
 -lock-timeout=0s -重试状态锁定的持续时间。
 -state=path-读取和写入状态文件的路径。默认为“ terraform.tfstate”。使用远程状态时忽略。
 -state-out=path-写入更新的状态文件的路径。默认情况下,-state将使用该 路径。使用远程状态时忽略 

terraform force-unlock

手动解锁已定义配置的状态。这不会修改您的基础结构。此命令删除当前配置的状态锁定。此锁的行为取决于所使用的后端。本地状态文件不能由其他进程解锁。

-force -请勿输入解锁确认信息。

以上是关于Terraform 学习总结——Terraform 命令详解的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结

Terraform 学习总结—— Terraform 常用命令再总结

Terraform 学习总结—— Terraform 常用命令再总结

Terraform 学习总结—— Terraform 常用命令再总结

Terraform 学习总结——Terraform 命令详解

Terraform 学习总结—— 基于阿里云平台上的 Terraform 实战