首页 » Terraform » 正文

Terraform 对象初始化Provisioner

Terraform 帮我们创建好instance以后,这个时候我们只是有一个空的instance,任何事情都干不了,我们需要做一些初始化的操作,例如安装必要的软件包,增加特定用户,修改特定配置文件等

Terraform 也帮我们提供了这个工具:Provisioner

直接看例子

每个资源都支持多个provisioner ,上边的例子中我们用的是local-exec 这个provisioner

local-exec 提供的功能是在当前机器(跑terraform 命令的机器)上执行一些操作,所以暂时我们不用担心需要远程登录到别的机器上做操作的问题

与local-exec 对应的的provisioner是remote-exec ,这个命令是在远程的机器上执行的命令,这个时候我们就需要选择是ssh或者winrm来连接到目标机器了

看一个remote-exec的例子

注意provisioner仅仅会在资源被创建的时候执行,它并不能代替配置管理工具,它不能修改已经在运行的资源

Tainted Resources

有时候,我们资源创建成功了,但是provisioner没有执行成功,这个时候Terraform认为我们的资源是不“安全”的,Terraform 会将这个资源标记为tainted

当我们下次执行apply的时候,terraform不会重新尝试provisioner,它会直接将标记为tainted的资源删掉,然后重新创建,通过这样的方式来触发provisioner进行再次尝试

所以我们可以利用Terraform的这个特点,来重新创建指定的资源

命令执行后,不会立刻修改我们的基础架构,它修改的是本地的状态文件,一旦某个资源被标记为tainted,下次apply的时候,这个资源就会被重新创建

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)