Terraform-.tfstate文件中的唯一ID是否始终从未使用过?

时间:2019-06-01 15:40:16

标签: amazon-web-services google-cloud-platform terraform terraform-provider-aws terraform-provider-gcp

在Terraform状态文件中,以下是针对OpenStack的.tfstate文件部分(该部分使用AWS API,因此AWS是提供者):

currentTime

说我在控制台中手动删除实例/资源。 我的Terraform配置可以通过以下方式更改:Terraform Plan可以触发 i)重新创建(+/-)或 ii)销毁(-)和创建/添加(+)。

问题是:在两种情况下,创建的新节点是否都具有与状态文件中以前相同的“ id”属性?

换句话说,"aws_instance.7.3" "primary": { "attributes": { "id": "6b646e50-..." 属性(在GCP的情况下为"id")在基础架构的整个生命周期中始终是唯一的吗? (这样一来,当将旧的tfstate文件和新的tfstate文件与"instance_id""id"属性进行比较时,可以肯定地创建/重新创建了一个新节点,并确保.tfstate反映了发生在计划。)

我检查.tfstate是否反映了计划(创建/重新创建/销毁的确切数目)的原因是,尽管“应用”是根据“计划”发生的,但有时.tfstate并不反映出

  

这样做的原因是,在“应用”之后,terraform似乎执行了   GET调用提供程序以更新.tfstate文件和此GET调用   有时会返回基础架构的不一致状态(即   即使节点已创建并且是节点的一部分,也不会返回节点的详细信息   基础架构!)。

在那种情况下,我必须在我们的自动化工具中告知.tfstate并未按照计划进行,因此.tfstate文件中可能存在损坏/不一致的问题,可以通过手动导入对其进行修复。

1 个答案:

答案 0 :(得分:0)

EC2 instance id是唯一的。从下面的参考中:

  

创建资源后,我们为每个资源分配一个唯一的资源ID。

     

新ID的格式为17个字符,例如,实例ID为i-1234567890abcdef0。

具有16 ^ 17种可能的组合意味着您不太可能重复输入数字。如果您每天创建十亿个实例,则大约需要295147905179天才能重复编号。

参考:

Resource IDs