Cloudformation:在更新资源更新后阻止删除

问题描述 投票:2回答:1

在AWS Cloudformation中,存在无法直接更新的特殊资源。它们正在被aws cloudformation update-stack命令取而代之。只要您不想在更新后保留这些资源,这样就可以正常工作。

在我的示例中,我想保留AWS::AutoScaling::LaunchConfiguration资源的所有更新版本,以便在AutoScalingGroup中手动切换LaunchConfigurations(用于测试目的或紧急回滚)。我需要这样做,因为Web界面用户无法使用Cloudformation,他们也没有被授权这样做。

所以我创建了一个模板,通过设置包含当前日期/时间的自定义LaunchConfigurationName来创建/更新LaunchConfiguration资源。 这很好,但是:在UPDATE_COMPLETE_CLEANUP_IN_PROGRESS状态之后,旧版本的AWS::AutoScaling::LaunchConfiguration资源总是会被删除。为了避免这种情况,我尝试设置set-stack-policy:

{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    },
    {
      "Effect" : "Deny",
      "Action" : "Update:Delete",
      "Principal" : "*",
      "Resource" : "*",
      "Condition" : {
        "StringEquals" : {
          "ResourceType" : ["AWS::AutoScaling::LaunchConfiguration"]
        }
      }
    }  
  ]
}

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html

Update:Delete

    Specifies update actions during which resources are removed. 
    Updates that completely remove resources from a stack template require this action.

结果:更新AutoScalingGroup(UPDATE_COMPLETE_CLEANUP_IN_PROGRESS状态)后资源仍然被删除。 你知道如何保留旧版本吗?

amazon-web-services amazon-cloudformation autoscaling
1个回答
0
投票

您可以将删除策略设置为RETAIN,还可以更改资源的逻辑ID。更改资源的逻辑ID会导致Cloudformation删除旧资源(或根据删除策略保留旧资源)并创建新资源。它的工作原理是这样的,因为cloudformation确实知道你已经改变了逻辑id。它将其视为一个被删除的资源,另一个被添加。

© www.soinside.com 2019 - 2024. All rights reserved.