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

Posted

技术标签:

【中文标题】解决 terraform 中 EntityAlreadyExists 错误的最佳方法是啥?【英文标题】:what is the best way to solve EntityAlreadyExists error in terraform?解决 terraform 中 EntityAlreadyExists 错误的最佳方法是什么? 【发布时间】:2019-09-12 09:11:43 【问题描述】:

我正在使用terraform v0.12.6,但遇到了许多错误,例如:

Error: Error creating Security Group: InvalidGroup.Duplicate: The security group 'security-search-populate' already exists for VPC 'vpc-003e06e33a87c22f5'
    status code: 400, request id: 82acdc81-c324-4672-b9fe-531eb8283ed3

Error: Error creating IAM Role PopulateTaskRole: EntityAlreadyExists: Role with name PopulateTaskRole already exists.
    status code: 409, request id: 49aac94c-d52b-11e9-a535-c19e5ed20660

我知道我可以通过从 aws 中删除这些资源来解决它们。但是我想知道是否有更好的方法来解决它们。

【问题讨论】:

【参考方案1】:

是的。所有重复项都应导入到 terraform 中,并且每个资源的导入可能不同。

使用您的dev 配置文件将security group sg-903004f8 导入到terraform 资源aws_security_group.elb_sg。您需要找到security-search-populate 安全组的安全组ID。

AWS_PROFILE=dev terraform import aws_security_group.elb_sg sg-903004f8

使用您的dev 配置文件将IAM role PopulateTaskRole 导入到terraform 资源aws_iam_role.developer

AWS_PROFILE=dev terraform import aws_iam_role.developer PopulateTaskRole

导入这些后,您可以制定有针对性的 terraform 计划,以查看源代码控制的 terraform 中的内容与 AWS 中的上游内容之间的差异

AWS_PROFILE=dev terraform plan \
  -target aws_security_group.elb_sg \
  -target aws_iam_role.developer

【讨论】:

感谢您的回复。我想知道在哪里可以找到要导入的内容。喜欢aws_security_group.elb_sg 如果您执行terraform plan,您可以看到尝试创建哪些资源。找到名称为 security-search-populate 的安全组,这就是应该导入的内容。如果您在 gist 中发布您的计划,则可以确定确切的导入命令。 您确定设置AWS_PROFILE=devterraform import 有效吗?我认为它可以工作,但结果我不得不在单独的命令中更改我的个人资料。【参考方案2】:

将属性“name”更改为“name_prefix”解决了我的问题,并且不会重复任何角色和/或策略。

【讨论】:

以上是关于解决 terraform 中 EntityAlreadyExists 错误的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

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

terraform 解决冲突的提供者约束:没有可用的版本与给定的约束匹配

Terraform 学习总结—— 如何解决存量云资源的管理难题

Terraform 学习总结—— 如何解决存量云资源的管理难题

Terraform 学习总结—— 如何解决存量云资源的管理难题

我只想为特定资源运行 terraform