代码之家  ›  专栏  ›  技术社区  ›  Agrim

Terraform:AWS Cloudfront发行版在将Terraform状态后端从本地更改为s3后出现CNAMEAlreadyExists错误

  •  3
  • Agrim  · 技术社区  · 6 年前

    我正在尝试terraform来建立一个S3+Cloudfront静态站点。最初,我按照 https://alimac.io/static-websites-with-s3-and-hugo-part-1/

    然而,后来我将terraform state后端从 local s3 现在,当我表演的时候 terraform apply 我得到以下错误:

    Error: Error applying plan:
    
    2 error(s) occurred:
    
    * aws_cloudfront_distribution.primary_domain: 1 error(s) occurred:
    
    * aws_cloudfront_distribution.primary_domain: CNAMEAlreadyExists: One or more of the CNAMEs you provided are already associated with a different resource.
        status code: 409, request id: <removed>
    * aws_cloudfront_distribution.secondary_domain: 1 error(s) occurred:
    
    * aws_cloudfront_distribution.secondary_domain: CNAMEAlreadyExists: One or more of the CNAMEs you provided are already associated with a different resource.
        status code: 409, request id: <removed>
    

    关于为什么会发生这种情况,以及我能做些什么来解决这个问题,有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Eric M. Johnson    6 年前

    Terraform使用状态文件跟踪其管理的资源。如果它没有特定的资源(在这种情况下可能是 aws_cloudfront_distribution.primary_domain 资源),它将创建一个新资源,并将该新资源的ID存储在您的状态文件中。

    看起来你做了 terraform apply 使用本地状态文件,将后端更改为s3,而不将状态移植到s3,然后运行 地形应用 再一次第二次S3支持的运行具有空白状态,因此它尝试重新创建 aws_cloudfront_distribution 再次使用资源。看起来像是错误 indicates a conflict in using the same CNAME for two distributions ,如果您运行两次Terraform而不跟踪其间的状态,就会发生这种情况。

    您有几个选项可以修复此问题:

    • 返回到使用现有的本地状态文件, terraform destroy 要删除它创建的资源,请切换回s3,然后 地形应用 重新开始。请注意,这实际上 删除资源。
    • 正确更改后端和 reinitialize ,然后回答“是”,将远程状态复制到S3。
    • terraform import 将使用本地状态文件创建的资源放入S3后端。使用此操作 terraform import aws_cloudfront_distribution.primary_domain <EXISTING CLOUDFRONT DIST. ID>