本地与远程执行配置器
实现 `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 反馈 — 无需本地设置。