当自定义命名的资源需要替换时,CloudFormation无法更新堆栈

时间:2019-07-07 09:10:48

标签: amazon-web-services amazon-cloudformation

我有一个CloudFormation模板,用于创建启动配置:

Resources:
# Launch Configuration for the instances in the Atoscaling Group
  LaunchConfiguration:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      AssociatePublicIpAddress: false
      ImageId: !Ref EC2AMI
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2Key
      IamInstanceProfile: !ImportValue EC2RoleInstanceProfileARN
      LaunchConfigurationName: jxt-private-asg-launch-config
      SecurityGroups:
        - !ImportValue PrivateSecurityGroupId   

当我尝试更新堆栈时,出现以下错误:

  

自定义名称的资源时,CloudFormation无法更新堆栈   需要更换

我正在通过TeamCity运行此脚本,因此用户无法每次都更改启动配置的名称。我该怎么办才能消除此错误?

2 个答案:

答案 0 :(得分:3)

一种解决方案是省略LaunchConfigurationName,因为它不是强制性的。

AWS::AutoScaling::LauncConfiguration documentation复制:

  

启动配置的名称。此名称在每个帐户的每个区域中必须是唯一的。 [...]

     

更新要求:Replacement

您面临的问题是您进行了更改,需要替换启动配置。通常,CloudFormation会创建一个新资源(以防无法更新现有资源),将任何从属资源指向新资源,然后删除旧资源。但是,如果资源使用静态名称,此操作将失败,因为它与文档中提到的唯一名称约束冲突。

答案 1 :(得分:0)

您可以:

  1. 执行@matsev建议的操作,不要对不需要的资源使用名称(可能是最佳选择)-名称将根据堆栈名称生成。
  2. 在您的资源名称中添加一个变量,例如一个参数,该参数传递commit-id或date或类似的内容。理想情况下,这将使您的资源名称唯一。