在Terraform for AWS中,我可以重试资源创建吗



Terraform 0.12.x

我正在将EBS卷附加到我的EC2

resource "aws_volume_attachment" "dev_xvdf" {
device_name  = "/dev/xvdf"
instance_id  = aws_instance.jenkins_master.id
skip_destroy = var.skip_att_ebs_destroy
volume_id    = var.ebs_id
}

但我有

module.ec2_blue.aws_volume_attachment.dev_xvdf: Still creating... [10s elapsed]
module.ec2_blue.aws_volume_attachment.dev_xvdf: Still creating... [20s elapsed]
Error: Error waiting for Volume (vol-123456abcedf) to attach to Instance: i-123456abcdef, error: unexpected state 'detached', wanted target 'attached'. last error: %!s(<nil>)

我可以重试还是增加超时?

Terraform中的重试和超时由提供者作为实现细节处理(或不处理(,因此您不能在Terraform配置中直接控制它们,除非提供者开发者公开了这样做的方法。

一些资源类型遵循接受timeouts块的约定,以选择性地缩短或延长特定操作的超时:

timeouts {
create = "1m"
}

aws_volume_attachment似乎不支持这一点,而是硬编码一个5分钟的超时。

然而,我们可以看到,在您的情况下,问题似乎实际上并不是超时,因为操作仅在20秒后就失败了,而且问题似乎是它进入了一个意外的状态,而不是花了很长时间才达到预期的状态。

我对卷附件的状态机不是很熟悉,但从阅读AWS提供商代码来看,提供商似乎希望附件最初位于";附加";状态,然后最终达到";附";状态它在这里失败了,因为它实际上进入了";分离的";州,这既不是提供者认为的"州"的意思;挂起";也没有一个意思是";成功";。

话虽如此,我认为这是一个真正的错误,而不是超时。我不知道是什么原因导致了错误,但您可以通过尝试使用web控制台或AWS CLI手动执行相同的操作来找出原因。如果你能够收集更多的信息,我希望有人能够对一个新问题给出更有用的答案,包括这些额外的信息。

最新更新