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-backendamplify/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-backendbackend 文件夹的/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 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

删除 AWS Amplify 添加的用户池

如何删除并重新创建由 mock api 创建的本地 dynamodb/appsync/amplify 数据库?

AWS-amplify 在请求中包含 cognito Authorization 标头

如何将 Quasar 2 与 AWS Amplify 结合使用?

带有 AWS Amplify 的 GraphQL - 如何启用对查询的排序

AWS Amplify GraphQL Schema 导致错误