AWS Amplify:如何重新创建手动删除的 CloudFormation 堆栈
Posted
技术标签:
【中文标题】AWS Amplify:如何重新创建手动删除的 CloudFormation 堆栈【英文标题】:AWS Amplify: How to recreate manually deleted CloudFormation stacks 【发布时间】:2019-08-06 11:27:59 【问题描述】:我在this 研讨会之后构建了一个 Amplify 示例应用程序。
之后,我手动删除了 CloudFormation 堆栈(从 AWS 控制台 - 选择根堆栈并执行删除堆栈操作),希望我可以使用 amplify push
重建它们。不幸的是,放大报告没有变化并且不重建堆栈。有没有办法强制放大提供资源?
【问题讨论】:
您是删除了资源(例如数据库表等)还是更改了堆栈文件上的内容?您可以详细说明删除 CloudFormation 堆栈。 感谢您的建议,我编辑了我的问题。我从控制台中删除了根堆栈。据我所知,所有资源(DynamoDB 表、ElasticSearch 等)都在 S3 存储桶之外,这些存储桶仍然存在。 您的案例与此处的问题类似:github.com/aws-amplify/amplify-cli/issues/549。如果您同意,您可能需要amplify init
,并将之前的amplify/#current-cloud-backend
复制到新创建的backend
文件中。
感谢您在 github 上指出我的问题。确实看起来像同样的问题。不幸的是,建议的解决方案不起作用。我应该在哪个项目中尝试amplify push
也有点不清楚。无论如何,它都会在旧项目中引发错误并且检测到新项目中没有任何更改。我将尝试进一步澄清您建议的主题。再次感谢!
【参考方案1】:
放大 cli 检查项目中 amplify/#current-cloud-backend
和 amplify/backend
文件夹之间的差异。它不会检查当前部署在云中的内容。
由于您已经删除了根堆栈,即使有任何要推送的更改,它也会因为堆栈丢失而失败。要从此错误中恢复,您可以运行amplify init
,当询问Do you want to use an existing environment?
时选择No
。这将重新创建根堆栈并允许您推送更改。
PS:在 amplify cli 版本 1 及更高版本中提供了多环境支持。如果它的前v1
init 命令不起作用
【讨论】:
感谢您的帖子。我知道我需要在 app 文件夹中运行amplify init
。当被问及我应该提供相同的环境名称还是不同的名称时?我正在运行 1.1.7 版,所以应该没问题。
如果需要,您可以提供相同的名称。环境名称需要仅在项目amplify/team-provider-info.json
文件中使用。确保在运行 init 之前删除 <proj-root>/amplify
文件夹
再次感谢亚西。我删除了包含#current-cloud-backend
和backend
文件夹的/amplify
文件夹。然后在我的应用程序目录的根目录中,我运行了amplify init
,并且成功地重新创建了我之前删除的/amplify
文件夹。它还创建了根堆栈。不幸的是,在运行amplify init
之后,我收到了No changes detected
消息。我想我会放弃进一步挽救这个项目的尝试。再次非常感谢您的意见!【参考方案2】:
如果你删除了其他资源依赖的函数或API,可能会导致推送失败。所以我通常做的是重新创建相同的函数或 API 并再次推送。这是我使用的临时 hack,但我认为可能会有更好的。
【讨论】:
【参考方案3】:Amplify 似乎将有关 AWS 中托管内容的信息保存在 amplify/team-provider-info.json
中。在这个文件中应该是 JSON 对象,其键与您的环境名称匹配。如果您将环境名称的条目保留在此文件中并运行 amplify init
,如果您使用相同的环境名称,您很可能会看到失败。
通过删除与您在 AWS 中删除的环境匹配的环境,amplify 将忘记该环境的 CloudFormation 堆栈。现在您可以再次运行amplify init
,并使用相同的环境名称,成功。
【讨论】:
以上是关于AWS Amplify:如何重新创建手动删除的 CloudFormation 堆栈的主要内容,如果未能解决你的问题,请参考以下文章
如何删除并重新创建由 mock api 创建的本地 dynamodb/appsync/amplify 数据库?
AWS-amplify 在请求中包含 cognito Authorization 标头
如何将 Quasar 2 与 AWS Amplify 结合使用?