简介
学习如何使用配置器在本地或远程环境中执行脚本。
概述
在设置资源后,我们可能需要对其进行后续配置。我们可以使用多种方式来管理资源的配置,而 Terraform 的 provisioners 就是其中一种方法。
什么是 provisioners?
Provisioners 用于帮助我们通过 Terraform 完成资源的初始化配置。其基本语法如下:
1provisioner "type" { 2 # provisioner 的配置选项 3}
Provisioners 的类型
Provisioners 分为两种类型:local-exec 和 remote-exec
local-exec provisioners
用于在安装 Terraform 的本地系统上运行脚本。local-exec provisioner 的基本语法如下:
1provisioner "local-exec" { 2 command = "要执行的命令" 3}
一个典型的 local-exec provisioner 示例是使用 echo 命令输出已创建资源的值。例如,我们需要获取 EC2 实例的 IP 地址,并将其保存到文件中。以下代码展示了实现这一功能的写法。
1resource "aws_instance" "my-instance" { 2 //...其他配置项 3 4 provisioner "local-exec" { 5 command = "echo ${self.private_ip} >> filename.txt" 6 } 7 8 tags = { 9 Name = "my-instance", 10 } 11}
在上述代码中,我们创建了一个 EC2 实例,并在其中调用了 local-exec provisioner,使用 echo 命令将 EC2 实例的 IP 地址写入名为 filename.txt 的文件中。
remote-exec provisioners
用于远程管理资源上的配置。remote-exec provisioner 的基本语法如下:
1provisioner "remote-exec" { 2 connection { 3 type = "ssh" 4 user = "用户名" 5 password = "密码" 6 host = "主机名" 7 } 8 inline = [ 9 "命令1", 10 "命令2", 11 "命令3", 12 ] 13}
例如,我们可以在创建 EC2 实例的同时,使用 remote-exec provisioner 安装软件包。下面的代码展示了如何使用 remote-exec provisioner 启动一个 EC2 实例,安装 apache2 包,并启动服务。
1resource "aws_instance" "example" { 2 //...其他配置项 3 4 provisioner "remote-exec" { 5 connection { 6 type = "ssh" 7 user = "用于认证的用户名" 8 private_key = file("私钥路径") 9 host = public_ip_of_instance 10 } 11 12 inline = [ 13 "sudo apt-get update", 14 "sudo apt-get install -y apache2", 15 "sudo systemctl start apache2", 16 ] 17 } 18}
需要注意的是,在使用 remote-exec provisioner 时,必须建立连接机制(通常是 SSH)。
何时需要使用 provisioners?
Provisioners 并不是配置管理的默认标准,我们在配置方面不应完全依赖它们。常见的使用场景包括:
- 部署前配置:用于安装软件包和应用程序依赖。
- 部署后配置:例如安装 Web 服务器并启动服务。