Terraform:如何在不更改 Terraform 版本的情况下升级提供程序

Terraform: How to Upgrade Provider without Changing Terraform Version

当我尝试 运行 terraform 应用时,我看到错误:

aws_glue_catalog_database.test: Provider doesn't support resource: aws_glue_catalog_database

看起来我的提供商很旧,因为 terraform 版本显示 provider.aws v1.6.0,事实上我可以在另一个具有相同 terraform 版本但更新的 provider.aws v2.0.0 的文件夹中启动胶水

Terraform v0.11.10
+ provider.archive v1.0.0
+ provider.aws v1.6.0
+ provider.null v1.0.0
+ provider.template v1.0.0

我尝试升级提供程序但保持 terraform 版本 v0.11.10 不变。为此,我 运行 terraform init -upgrade 但看到以下警告:

terraform init -upgrade
Initializing the backend...
Backend configuration changed!

Terraform has detected that the configuration     specified for the backend
has changed. Terraform will now check for existing state in the backends.


Do you want to migrate all workspaces to "s3"?
  Both the existing "s3" backend and the newly     configured "s3" backend
 support workspaces. When migrating between      backends, Terraform will copy
  all workspaces (with the same names). THIS WILL     OVERWRITE any conflicting
  states in the destination.

  Terraform initialization doesn't currently migrate     only select workspaces.
  If you want to migrate a select number of     workspaces, you must manually
  pull and push those states.

  If you answer "yes", Terraform will migrate all     states. If you answer
  "no", Terraform will abort.

我决定说 "no" 因为上面的警告吓到我了。

我有一个后端 "s3" 资源来远程存储 s3 中的状态,并且有几个工作区。如果我使用上述命令升级提供者,我不明白为什么以及如何更改后端和工作区;它是否会破坏我的系统。

有谁知道我可以不乱说就说是吗?或者我应该 运行 在不更改 terraform 版本的情况下升级哪个 terraform cmd?谢谢

您正在进行重大版本升级,所以我担心总是存在风险。

这里有一些链接可以帮助您突出风险(如果您还没有看到它们的话):

在做任何事情之前,我建议先备份存储在远程 S3 存储桶上的状态文件。如果您的基础架构是相当静态的(或者您有一种使其静态化的机制),如果出现严重错误,您总是可以将状态的旧备份放回 S3 而不会导致问题,因为在升级过程中不会发生任何应用.

我不知道您的设置,但理想情况下您会首先在开发环境中执行此操作,这有望缓解您对更改状态文件的紧张情绪。