1.7.4.1. apply

Terraform 最重要的命令就是 applyapply 命令可以生成执行计划(可选)并执行之,使得基础设施资源状态符合代码的描述。

1.7.4.1.1. 用法

terraform apply [options] [plan file]

Terraform 的 Apply 有两种模式:自动 Plan 模式以及既有 Plan 模式。

1.7.4.1.2. 自动 Plan 模式

当我们运行 terraform apply 而不指定计划文件时,Terraform 会自动创建一个新的执行计划,就像我们已运行 terraform plan 一样,提示我们批准该计划,并采取指示的操作。我们可以使用所有 plan 模式plan 选项来自定义 Terraform 创建计划的方式。

我们可以设置 -auto-approve 选项来要求 Terraform 跳过确认直接执行计划。

警告:如果使用 -auto-approve,建议确保没有人可以在 Terraform 工作流程之外更改我们的基础设施。这可以最大限度地降低不可预测的变更和配置漂移的风险。

1.7.4.1.3. 既有 Plan 模式

当您将既有的计划文件传递给 terraform apply 时,Terraform 会执行既有的计划中的操作,而不提示确认。在自动化运行 Terraform 时,可能需要使用由这样的两个步骤组成的工作流。

我们在应用计划之前可以使用 terraform show 检查既有的计划文件。

使用既有的计划时,我们无法指定任何其他计划模式或选项。这些选项只会影响 Terraform 关于采取哪些操作的决策,而这些决策的最终结果已经在计划文件中包含了。

1.7.4.1.4. Plan 参数

在未提供既有计划文件时,terraform apply 命令支持 terraform plan 命令所支持的所有 Plan 模式参数以及 Plan 选项参数。

  • Plan 模式参数:包括 -destroy(创建销毁所有远程对象的计划)和 -refresh-only(创建更新 Terraform 状态和根模块输出值的计划)。
  • Plan 选项参数:包括指定 Terraform 应替换哪些资源实例、设置 Terraform 输入变量等的参数。

1.7.4.1.5. Apply 参数

下面的参数可以更改 apply 命令的执行方式和 apply 操作生成的报告格式。

  • -auto-approve:跳过交互确认步骤,直接执行变更。此选项将被忽略,因为 Terraform 认为我们指定了计划文件即已批准执行,因此在这种情况下永远不会提示。
  • -compact-warnings:以紧凑的形式显示所有警告消息,其中仅包含摘要消息,除非输出信息中存在至少一个错误,因此警告文本中可能包含有错误的上下文信息。
  • -input=true:禁用 Terraform 的所有交互式提示。请注意,这也会阻止 Terraform 提示交互式批准计划,这时 Terraform 将保守地假设您不希望应用该计划,从而导致操作失败。如果您希望在非交互式上下文中运行 Terraform,请参阅 Terraform 与自动化 了解一些不同的方法。
  • -json:启用机器可读的 JSON UI 输出。这意味着 -input=false,因此配置 variable 值都已赋值才能继续。要启用此参数,您还必须启用 -auto-approve 标志或指定既有的计划文件。
  • -lock=false:执行时是否先锁定状态文件。如果其他人可能同时对同一工作区运行命令,则这是危险的。
  • -lock-timeout=DURATION:除非使用 -lock=false 禁用锁定,否则命令 Terraform 为上锁操作设置一个超时时长。持续时间语法是一个数字后跟一个时间单位字母,例如“3s”表示三秒。
  • -no-color:关闭彩色输出。在无法解释输出色彩的终端中运行 Terraform 时请使用此参数。
  • -parallelism=n:限制 Terraform 遍历图时的最大并行度,默认值为 10(考试高频考点)

当配置中只使用了 local Backend 时,terraform apply 还支持以下三个遗留参数:

  • -backup-path:保存备份文件的路径。默认等于 -state-out 参数后加上 ".backup" 后缀。设置为 "-" 可关闭
  • -state=path:保存状态文件的路径,默认值是 "terraform.tfstate"。如果使用了远程 Backend 该参数设置无效。该参数不影响其他命令,比如执行 init 时会找不到它设置的状态文件。如果要使得所有命令都可以使用同一个特定位置的状态文件,请使用 Local Backend
  • -state-out=path:写入更新的状态文件的路径,默认情况使用 -state 的值。该参数在使用远程 Backend 时设置无效

1.7.4.1.6. 指定其他配置文件目录

Terraform v0.13 及更早版本接受提供目录路径的附加位置参数,在这种情况下,Terraform 将使用该目录作为根模块而不是当前工作目录。

该用法在 Terraform v0.14 中已弃用,并在 Terraform v0.15 中删除。如果您的工作流程需要修改根模块目录,请改用 -chdir 全局选项,该选项适用于所有命令,并使 Terraform 始终在给定目录中查找它通常在当前工作目录中读取或写入的所有文件。

如果我们之前使用此遗留模式时同时需要 Terraform 将 .terraform 子目录写入当前工作目录,即使根模块目录已被覆盖,请使用 TF_DATA_DIR 环境变量命令 Terraform 将 .terraform 目录写入其他位置,而不是当前工作目录。

results matching ""

    No results matching ""