gpt4 book ai didi

terraform - 如何管理多个存储库的 terraform

转载 作者:行者123 更新时间:2023-12-03 06:58:53 26 4
gpt4 key购买 nike

我的项目有 2 个存储库。静态网站和服务器。我希望网站由 cloudfront 和 s3 托管,服务器在 elasticbeanstalk 上。我知道这些资源至少需要了解 Route53 资源才能在同一域名下运行,cors 才能正常工作。其中包括 vpc 之类的东西。

所以我的问题是如何管理具有多个存储库的 terraform。我想我可以拥有一个为所有存储库构建的单独的基础设施存储库。我还可以将它们分开并将 arns/names/ids 作为变量传递(烦人)。

最佳答案

您可以使用 terraform remote_state为了这。它允许您从另一个 terraform 状态文件读取输出变量。

假设您将状态文件远程保存在 s3 上,并且您拥有 website.tfstateserver.tfstate 文件。您可以在 website.tfstate 中将 Route53 区域的托管区域 ID 输出为 hosted_zone_id,然后直接在服务器状态 terraform 代码中引用该输出变量。

data "terraform_remote_state" "website" {
backend = "s3"

config {
bucket = "<website_state_bucket>"
region = "<website_bucket_region>"
key = "website.tfstate"
}
}

resource "aws_route53_record" "www" {
zone_id = "${data.terraform_remote_state.website.hosted_zone_id}"
name = "www.example.com"
type = "A"
ttl = "300"
records = ["${aws_eip.lb.public_ip}"]
}

请注意,您只能从远程状态读取输出变量。您无法直接访问资源,因为 terraform 将其他状态/模块视为黑匣子。

更新

正如评论中提到的,terraform_remote_state 是一种跨多个状态共享显式发布的变量的简单方法。但是,它有两个问题:

  1. 代码组件之间的紧密耦合,即变量的生成者不能轻易更改。
  2. 它只能由 terraform 使用,即您无法轻松地在不同层之间共享这些变量。如果没有一些额外的自定义插件/包装器,Ansible 等配置工具无法 native 使用 .tfstate

推荐的 HashiCorp 方法是使用中央配置存储,例如 Consul。它还有更多好处:

  1. 消费者与变量生产者解耦。
  2. 显式发布变量(例如 terraform_remote_state)。
  3. 可由其他工具使用。

更详细的解释可以参见here .

关于terraform - 如何管理多个存储库的 terraform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com