CloudFormation是幂等的吗?

时间:2015-07-07 22:56:27

标签: amazon-web-services amazon-cloudformation

我在互联网上的许多地方都读到CloudFormation不是幂等的,但我找不到任何证明这一事实的例子。

您能否提供一个运行资源的示例来证明CloudFormation不是幂等的?

3 个答案:

答案 0 :(得分:14)

根据维基百科的idempotent定义如下:

  

在计算机科学中,幂等词一词被更全面地使用   描述一个将产生相同结果的操作   执行一次或多次。

CloudFormation在其行为的几个方面被认为不是幂等的:

  • 为已存在的堆栈调用create API将导致错误
  • 使用未更改的CloudFormation堆栈调用更新API会导致错误
  • 再次创建和删除相同的堆栈将导致为IAM用户,安全组ID,EC2实例ID,VPC ID等创建具有不同ARN的资源...
  • 如果使用现有内容更新现有堆栈,则CloudFormation外部修改的资源不会更改回原始值

但是,从高层次来看,使用CloudFormation的一个主要原因是您将基础架构表示为代码,以便您可以使用它来重复生成相同的基础架构。这几乎与幂等的原始定义相同,但区别在于多次部分。如上所述,当使用相同的堆栈并在其上面应用或删除堆栈并重新创建它时,从技术上讲,您没有得到完全相同的结果,但从实际的角度来看,这是完全可以理解的完全可以接受。

答案 1 :(得分:2)

我不确定这个答案是否有用,因为该问题已于2年前发布。迟到总比没有好。

AWS CloudFormation在这两年中发生了很大变化。现在,我可以肯定地说它的API调用是幂等的。

看看这些API调用:

  1. CreateStack
  2. UpdateStack
  3. DeleteStack
  4. 您会发现有一个名为 ClientRequestToken 的可选参数。这为API调用提供了幂等性。它是客户端提供的令牌,告诉CloudFormation服务它没有进行新的API调用。只要您使用相同的令牌并继续使用相同的其余参数进行呼叫,CloudFormation就知道您只是在重试该呼叫。

答案 2 :(得分:0)

如果您没有对已经完成的堆栈进行更新,则Cloudformation是幂等的,如果有更改则会更新,现在更新资源可能需要删除它并创建或更新而不创建新资源< / p>

要了解有关cfn-hup过程的更多信息,这将有助于您