Terraform 错误 EntityAlreadyExists:名称为 iam_for_lambda 的角色已存在

Posted

技术标签:

【中文标题】Terraform 错误 EntityAlreadyExists:名称为 iam_for_lambda 的角色已存在【英文标题】:Terraform error EntityAlreadyExists: Role with name iam_for_lambda already exists 【发布时间】:2019-11-14 15:57:48 【问题描述】:

运行terraform apply命令时出现以下错误,因为角色已经存在。

Error: Error creating IAM Role iam_for_lambda: EntityAlreadyExists: Role with name iam_for_lambda already exists.
    status code: 409, request id: 204c6c00-0b1d-4fb9-bf9c-fca48c67d669

  on main.tf line 1, in resource "aws_iam_role" "iam_for_lambda":
   1: resource "aws_iam_role" "iam_for_lambda" 

我可以使用条件/技巧来检查角色是否已经存在?

【问题讨论】:

理想情况下,您将在此模板中创建所需的 IAM 角色,使其生命周期与底层堆栈相同。或者,如果您需要支持现有角色,那么它将是模板的输入参数,并且它将具有独立于堆栈的生命周期。 您是否尝试管理已存在的 IAM 角色? @MattSchuchard 是的,如果不存在,我应该创建 IAM 角色,否则通过 terraform 资源创建它们 @LorenzoD'Isidoro 您可以将资源导入到 Terraform 状态,然后应用它们。更多信息official doc 【参考方案1】:

我猜你自己解决了这个问题,因为这个问题已经存在一年了,但是如果资源出于正当理由存在,你可以通过导入它来让你的代码获得所有权:

terraform import aws_iam_role.iam_for_lambda iam_for_lambda

现在,当你运行 Terraform 时,它会认为它已经创建了资源,如果你更新你的代码,rolle 也会得到更新。

话虽如此,您可能不应该尝试创建一个已经存在的角色。即使您使用terraform import 获取资源的所有权,如果您的代码正在修改也属于另一个模块的角色,您可能会得到奇怪的结果。

【讨论】:

以上是关于Terraform 错误 EntityAlreadyExists:名称为 iam_for_lambda 的角色已存在的主要内容,如果未能解决你的问题,请参考以下文章

如何解决错误:Terraform 中的“不得引用参数名称”?

Terraform 错误:错误锁定状态:获取状态锁时出错:发生 2 个错误:

使用 terraform 创建 lambda 函数时出错获取验证错误

解决 terraform 中 EntityAlreadyExists 错误的最佳方法是啥?

Terraform 上的 Azure 应用服务自动缩放错误

使用 Terraform 部署 Azure 资源时如何解决插件错误?