Terraform AlreadyExistsException:名称为 arn:aws:kms:XXXXX:XXXXXXXXX:alias/myalias 的别名已存在
Terraform AlreadyExistsException: An alias with the name arn:aws:kms:XXXXX:XXXXXXXXX:alias/myalias already exists
当运行 terraform apply
我得到以下错误
Terraform AlreadyExistsException: An alias with the name arn:aws:kms:XXXXX:XXXXXXXXX:alias/myalias already exists
我可以确认该资源(KMS 密钥别名)存在于 AWS 上。
这怎么会发生?
我该如何解决?
问题是资源已创建,但 Terraform 状态不包含此资源。
怎么会这样
- 资源是在 AWS 中手动创建的
- 资源是使用 Terraform 创建的,但状态不包含该信息。这可能是因为
- 状态文件被手动删除
- 状态处于PENDING DELETION(没有完全删除,但仍然存在name/path/arn)
- 有多个开发者,但状态文件未共享(this post详细描述了如何设置)
- 状态文件未正确更新(它可能已被旧版本覆盖,尽管从 Terraform 正确应用了更改,但可能由于某种原因未能更新,...)
- 具有此名称的资源在您的 Terraform 代码中出现两次
解决方案
您可以使用
之类的方式在 Terraform 状态下导入资源
terraform import aws_kms_alias.a alias/myalias
要找出正确的命令,请查看 Terraform 文档以获取您感兴趣的资源。例如。这是 Terraform kms_alias 的文档。最下面告诉你如何导入资源(有的资源只能通过id导入,有的只能通过名称导入)。
或者,如果您正在处理许多资源并且删除它们是可以接受的(即您不想删除数据库,如果您仍然需要数据,您也不想删除 KMS 密钥,如果您仍然需要它来进行解密(删除别名是可以接受的,但请确保您保留了它所链接到的 KMS-Key 的信息),您也可以只删除资源,然后让 Terraform 重新创建它们。
如果问题反复出现,请尝试找出发生这种情况的原因(请参阅上面的“如何发生”)并解决此问题。 This post 提供了更多有关如何管理状态的上下文。
当运行 terraform apply
我得到以下错误
Terraform AlreadyExistsException: An alias with the name arn:aws:kms:XXXXX:XXXXXXXXX:alias/myalias already exists
我可以确认该资源(KMS 密钥别名)存在于 AWS 上。 这怎么会发生? 我该如何解决?
问题是资源已创建,但 Terraform 状态不包含此资源。
怎么会这样
- 资源是在 AWS 中手动创建的
- 资源是使用 Terraform 创建的,但状态不包含该信息。这可能是因为
- 状态文件被手动删除
- 状态处于PENDING DELETION(没有完全删除,但仍然存在name/path/arn)
- 有多个开发者,但状态文件未共享(this post详细描述了如何设置)
- 状态文件未正确更新(它可能已被旧版本覆盖,尽管从 Terraform 正确应用了更改,但可能由于某种原因未能更新,...)
- 具有此名称的资源在您的 Terraform 代码中出现两次
解决方案
您可以使用
之类的方式在 Terraform 状态下导入资源terraform import aws_kms_alias.a alias/myalias
要找出正确的命令,请查看 Terraform 文档以获取您感兴趣的资源。例如。这是 Terraform kms_alias 的文档。最下面告诉你如何导入资源(有的资源只能通过id导入,有的只能通过名称导入)。
或者,如果您正在处理许多资源并且删除它们是可以接受的(即您不想删除数据库,如果您仍然需要数据,您也不想删除 KMS 密钥,如果您仍然需要它来进行解密(删除别名是可以接受的,但请确保您保留了它所链接到的 KMS-Key 的信息),您也可以只删除资源,然后让 Terraform 重新创建它们。
如果问题反复出现,请尝试找出发生这种情况的原因(请参阅上面的“如何发生”)并解决此问题。 This post 提供了更多有关如何管理状态的上下文。