0Pricing
DevOps Bootcamp · 课时

本地与远程执行配置器

实现 `local-exec` 和 `remote-exec` 配置器,分别在运行 Terraform 的计算机上或已创建的资源上执行命令。

本地与远程执行配置器 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

认识 Terraform 配置器

如果您需要在 Terraform 创建资源之后运行脚本或命令,该怎么办?这正是配置器发挥作用的地方!

配置器允许您在资源的生命周期中,在本地计算机或远程资源上执行操作。它们弥合了基础设施创建与初始软件设置之间的差距。

您可以将它们理解为钩子,让您能够在资源刚创建完成后立即对其进行定制。

`local-exec`:在本地运行

local-exec 配置器会在执行 Terraform 的计算机上运行命令。

它适用于以下任务:

  • 在本地生成配置文件。
  • 触发本地脚本或工具。
  • 在资源销毁后执行清理操作。

对于不需要在云资源本身上执行的操作,它非常合适。

`local-exec` 基本示例

下面演示如何让 local-exec 在空资源创建后于本地计算机上创建一个简单文件。

null_resource 是一个占位资源,不会在云中创建任何内容,但可以方便地用于触发配置器。

resource "null_resource" "local_file_creator" {
  provisioner "local-exec" {
    command = "echo 'Local file created by Terraform!' > local_output.txt"
  }

  triggers = {
    always_run = timestamp()
  }
}

何时使用 `local-exec`

local-exec 适用于:

  • 部署后通知:发送电子邮件或 Slack 消息。
  • 本地文件生成:为 Ansible 或其他工具创建清单文件。
  • 部署前检查:运行本地验证脚本。
  • 触发持续集成/持续交付:在基础设施更改后启动流水线。

请记住,它会从您运行 terraform apply 的位置执行。

`remote-exec`:在资源上运行

与 local-exec 不同,remote-exec 配置器会直接在远程资源上运行命令。

它对于新创建服务器上的初始设置任务至关重要,例如:

  • 安装软件包(例如 Web 服务器、数据库)。
  • 配置操作系统设置。
  • 部署应用程序代码。

它需要通过网络连接到目标资源(例如 Linux 使用 SSH,Windows 使用 WinRM)。

为 `remote-exec` 建立连接

要使 remote-exec 正常工作,Terraform 需要连接到您的资源。

常见的连接类型包括:

  • SSH:用于 Linux 实例,需要私钥。
  • WinRM:用于 Windows 实例,需要凭据。

您通常会在 provisioner 块中配置连接详细信息,或者从资源继承这些信息。

在 EC2 上使用 `remote-exec`

以下演示如何使用 remote-exec 在新的 AWS EC2 实例上安装 Apache。

注意:这要求 EC2 实例已经完成配置,并且可以通过 SSH 访问。为简单起见,我们假设密钥对和安全组已经存在。

resource "aws_instance" "web_server" {
  ami           = "ami-0abcdef1234567890" # Replace with valid AMI ID
  instance_type = "t2.micro"
  key_name      = "my-ssh-key" # Replace with your SSH key name
  vpc_security_group_ids = ["sg-0123456789abcdef0"] # Replace with your SG ID

  provisioner "remote-exec" {
    inline = [
      "sudo yum update -y",
      "sudo yum install -y httpd",
      "sudo systemctl start httpd",
      "sudo systemctl enable httpd"
    ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/my-ssh-key.pem")
      host        = self.public_ip
    }
  }
}

何时使用 `remote-exec`

remote-exec 适用于:

  • 初始化服务器:安装 Web 服务器、数据库或 Docker。
  • 部署应用程序:复制应用程序代码并完成配置。
  • 配置管理:直接运行 Ansible playbook 或 Chef 配方。
  • 创建后验证:验证新实例上的服务是否正在运行。

它是设置服务器初始状态的首选工具。

销毁时运行供应器

资源销毁时也可以运行供应器。这对于执行清理任务非常有用。

您可以在供应器块中指定 when = destroy。例如,在实例终止前将其从负载均衡器中注销。

还可以配置 on_failure 行为,以决定供应器命令失败时的处理方式。默认情况下,操作会报错。

供应器测验

如果要在新创建的虚拟机实例上安装 Web 服务器(例如 Nginx),您会使用哪个供应器?

供应器:本地与远程

我们已经了解了 Terraform 的供应器,它们是在资源生命周期中执行命令的强大工具。

  • local-exec 在运行 Terraform 的机器上执行命令,适合执行本地脚本或发送通知。
  • remote-exec 直接在已配置的资源上执行命令,非常适合为服务器安装软件或配置启动环境。

供应器有助于弥合基础设施部署与应用初始设置之间的差距。接下来,我们将深入了解高级状态管理技术!

常见问题解答

「本地与远程执行配置器」课时是免费的吗?

是的 — 「本地与远程执行配置器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「本地与远程执行配置器」这节课中我会学到什么?

实现 `local-exec` 和 `remote-exec` 配置器,分别在运行 Terraform 的计算机上或已创建的资源上执行命令。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「本地与远程执行配置器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用数据源查询数据
  2. 本地与远程执行配置器
  3. 空资源与触发器
  4. 使用外部数据与模板
← 返回 DevOps Bootcamp