假设我已经使用terraform构建我的基础架构,并且由于某种原因我的tfstate被删除了。这意味着我已经在tf文件中定义了我的资源,我只需要重新导入所有内容。
这是否必须是手动过程?
例如,这是我导入EC2实例的方式:
terraform import aws_instance.web i-123456
如果我必须为每一个非常痛苦的资源做到这一点(可能会删除所有内容并重新开始)。
如果我已经拥有自己的tf文件,是否可以导入其中已定义的所有资源?例如,我需要实例ID才能导入该实例。 terraform import命令可以只读取我的tf文件并找到映射到" aws_instance.web"的资源吗?
为了做到这一点,terraform需要将该aws实例映射到tf文件中的资源 - 这当然是tfstate的目的。但是terraform是否也有一种方法可以用资源映射标记资源?所以我可以对tf文件进行导入,terraform只是动态读取tf文件并通过唯一标签找到与tf资源相对应的物理资源?
答案 0 :(得分:2)
不,没有办法在Terraform中本地执行此操作;即使你一起编写了一个方法 - 我认为它不是非常可靠,你也不能相信它选择了正确的资源(至少不容易)。
Terraform在文档中多次说你需要保护你的状态文件;这就是为什么远程商店,如S3被鼓励做任何你关心的事情;以及为什么这是Terraform Enterprise的卖点。