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

Zha*_* Yi 7 terraform

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ter 12

如果现有资源已经在另一个模块或工作区的 terraform 中,那么我不会导入任何这些资源,因为资源应该由单个状态而不是多个状态管理。

如果现有资源不在 terraform 中的其他任何地方进行管理,则应将其导入 terraform。

您需要找到安全security-search-populate组的安全组 ID。

aws ec2 describe-security-groups \
    --group-names security-search-populate \
    --query 'SecurityGroups[].GroupId' \
    --output text
Run Code Online (Sandbox Code Playgroud)

假设 sg id 是sg-903004f8。使用您的配置文件将安全组导入terraform 资源。aws_security_group.elb_sgdev

AWS_PROFILE=dev terraform import aws_security_group.elb_sg sg-903004f8
Run Code Online (Sandbox Code Playgroud)

使用您的个人资料将IAM 角色 PopulateTaskRole导入terraform 资源。aws_iam_role.developerdev

AWS_PROFILE=dev terraform import aws_iam_role.developer PopulateTaskRole
Run Code Online (Sandbox Code Playgroud)

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

aws ec2 describe-security-groups \
    --group-names security-search-populate \
    --query 'SecurityGroups[].GroupId' \
    --output text
Run Code Online (Sandbox Code Playgroud)


小智 9

将属性“name”更改为“name_prefix”对我来说已经解决了,并且不重复任何角色和/或策略。