当前位置: 首页 > 知识库问答 >
问题:

是否可以使用CloudFormation重新创建AWS资源?

盖锐进
2023-03-14

假设AWS堆栈是使用CloudFormation创建的。现在,其中一种资源在云层形成之外进行了修改。

1) 有没有可能让CloudFormation专门创建这些资源?根据我的理解,我们不能这样做,因为CloudFormation不能识别差异,因此不能创建修改后的资源。我的观察正确吗?

2) 此外,如果在CloudFormation之外进行了修改,我需要哪些选项才能将堆栈恢复到其原始状态?

共有3个答案

微生乐
2023-03-14

首先,请注意,根据AWS云形成最佳实践,明确不鼓励在云形成之外修改云形成创建的资源:

启动堆栈后,使用AWS CloudFormation控制台、API或AWS CLI更新堆栈中的资源。不要在AWS CloudFormation之外更改堆栈资源。这样做可能会导致堆栈模板与堆栈资源的当前状态不匹配,如果更新或删除堆栈,可能会导致错误。

但是,如果您意外地修改了CloudFormation管理的资源,并且需要恢复,那么除了简单地删除并重新创建堆栈之外,您可能还有一些有限的选项(这可能不是一个可接受的选项):

>

  • CloudFormation无法根据外部修改的资源的当前状态自动更新其内部状态。

    但是,根据具体的资源类型,在某些情况下,您可以通过应用与资源当前状态匹配的堆栈更新来手动更新CloudFormation。

    类似地,CloudFormation不可能自动将外部修改的资源恢复到其原始未修改的CloudFormation状态。

    但是,根据具体的资源类型,在某些情况下,您可以:

    • 通过手动将资源更新回其原始状态来恢复资源

  • 沈琨
    2023-03-14

    这是一种可能的破解方法,您可以在不删除整个堆栈的情况下使用它。

    1. 从模板中删除意外删除的特定资源。
    2. 现在更新堆栈,使您的堆栈和帐户中的资源同步。
    3. 将模板恢复到第1步之前的状态并再次更新,这将创建意外删除的资源。
    姜弘化
    2023-03-14

    不幸的是,你的两个问题的答案都是否定的。

    1. 如果在堆栈创建状态完成后修改堆栈中的资源,CF无能为力,因为它不会跟踪对资源的修改
    2. 除了删除当前堆栈并创建一个新堆栈之外,您别无选择
     类似资料:
    • 我希望设置不同的AWS标识和访问管理(IAM)用户,以便在该IAM用户创建AWS资源时,自动为该资源分配特定的标记。 例如:如果IAM user F创建一个新的EC2实例,该实例将自动标记为user:MrF。是否可以构建一个自定义策略来执行此操作?

    • 我正在写入一个CSV文件,并使用来完成。我有一个bean,它是我的类,我也有一个资源属性,在这里我提供了用于写出项的文件名。 是否可以将日期和时间附加到文件名? 现在我告诉它写入一个名为report.csv的文件,而不是我希望它写入一个名为report-7-2-2014-16-03.csv的文件 以下是作者的XML配置

    • 我的AWS ECR中有一个Docker映像,我想将其转换为AWS AMI,以便在环境中创建实例。 尝试在Docker容器上使用AMI的原因 我必须在m4中的Docker容器中运行计算密集型ML任务。xlarge在一些文本文件上的实例。然而,使用Docker时,实例的CPU利用率达到了100%,脚本也在提前终止。 但是,它在Docker外部的同一实例中运行良好。 因此,我想从Docker转移到AMI

    • 有没有一种方法可以将标签添加到现有的CloudFormation堆栈中?在更新堆栈操作中,可以指定新的标记,但是不需要更新(就像AWS中的任何其他资源一样)就可以吗?

    • 给定的类值: 我正在尝试使用创建该类的一个新实例: 如果是,我如何使用创建一个新的值对象,在这里我调用的? 谢谢

    • 在使用Cloudformation创建新的KMS密钥时,我在“Status Reason”列中看到以下消息: 没有IAM权限处理AWS::KMS::Key资源上的标记