Terraform输出中的Terraform user_data输出



我用Terraform创建EC2实例,其中还包括user_data,我的问题是我能在Terraform输出中看到user_data的linux命令输出吗
示例。

....
user_data = <<EOF
echo "Output from server"
EOF
...

并在执行terraform apply时查看此命令输出。请告知,也许不需要使用user_data来完成此操作?

从EC2和Terraform的角度来看,user_data只是保存在EC2 API中的一些任意字节,EC2实例中的软件可以在虚拟机开始运行后随时检索这些字节。由于这种设计,user_data不需要是一组要运行的命令,也不需要这些命令应该在引导过程的早期运行。

我预计您可能使用的是AMI,其中包括将运行cloudinit作为其引导过程的一部分,因此您习惯于在VM的第一次引导时运行此参数的内容。在这种情况下,我可以理解为什么你可能期望Terraform能够观察输出,但不幸的是,这是不可能的。

不可能的原因是从EC2 API的角度来看;运行";当它开始在AMI中运行代码时,它会立即执行,因此即使cloudinit通常会在启动过程的早期运行指定的脚本,对于Terraform来说,这仍然为时已晚:在cloudinit有机会检索数据并将其作为脚本执行之前,实例创建已经完成。

此外,cloudinit只是在系统上运行的普通软件,就像在系统启动时运行的任何其他应用程序一样。它没有任何特殊的方式将输出发送到像Terraform这样的外部程序:它只能将结果写入VM文件系统中的日志文件,对于您配置为在AMI内启动时运行的任何其他服务也是如此。

既然如此,那么:从EC2 API的角度来看,通常没有办法观察cloud-init的结果。如果您确实希望看到这些结果,那么您将需要采用不同的策略,例如向AMI添加配置,以便将该VM的系统日志发送到像CloudWatch logs这样的日志聚合器服务。然后,您可以使用该服务(Terraform之外(在VM的整个运行时间内,而不仅仅是在引导过程中,查看系统上软件正在进行的日志输出。

最新更新