解决 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=dev
对terraform import
有效吗?我认为它可以工作,但结果我不得不在单独的命令中更改我的个人资料。【参考方案2】:
将属性“name”更改为“name_prefix”解决了我的问题,并且不会重复任何角色和/或策略。
【讨论】:
以上是关于解决 terraform 中 EntityAlreadyExists 错误的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 部署 Azure 资源时如何解决插件错误?
terraform 解决冲突的提供者约束:没有可用的版本与给定的约束匹配
Terraform 学习总结—— 如何解决存量云资源的管理难题
Terraform 学习总结—— 如何解决存量云资源的管理难题