Terraform 0.12:输出bucket列表,用作另一个模块的输入并迭代



我使用的是Tf0.12。我有一个s3模块,它输出一个bucket列表,我想用它作为我所拥有的cloudfront模块的输入。

我面临的问题是,当我执行terraform plan/apply时,我会得到以下错误count.index is 0 |var.redirect-buckets is tuple with 1 element

我试过各种各样的方法来移动count.index,但都无济于事。我的示例代码如下。

module.s3
resource "aws_s3_bucket" "redirect" {
count = length(var.redirects)
bucket = element(var.redirects, count.index)
}
mdoule.s3.output
output "redirect-buckets" {
value = [aws_s3_bucket.redirect.*]
}
module.cdn.variables
...
variable "redirect-buckets" {
description = "Redirect buckets"
default = []
}
....

错误被抛出这里

module.cdn
resource "aws_cloudfront_distribution" "redirect" {
count = length(var.redirect-buckets)
default_cache_behavior {
// Line below throws the error, one amongst many
target_origin_id = "cloudfront-distribution-origin-${var.redirect-buckets[count.index]}.s3.amazonaws.com"
....
//Another error throwing line
target_origin_id = "cloudfront-distribution-origin-${var.redirect-buckets[count.index]}.s3.amazonaws.com"

非常感谢您的帮助。

模块.s3

resource "aws_s3_bucket" "redirects" {
for_each = var.redirects
bucket = each.value
}

重定向的变量定义需要更改为以下内容:

variable "redirects" {
type = map(string)
}

模块.s3输出:

output "redirect_buckets" {
value = aws_s3_bucket.redirects
}

模块.cdn

resource "aws_cloudfront_distribution" "redirects" {
for_each = var.redirect_buckets
default_cache_behavior {
target_origin_id = "cloudfront-distribution-origin-${each.value.id}.s3.amazonaws.com"
}

重定向桶的变量定义需要更改为类似的内容(注意下划线,在某些情况下,使用串切会表现得很奇怪,不值得(:

variable "redirect_buckets" {
type = map(object(
{
id = string
}
))
}

根模块

module "s3" {
source = "../s3" // or whatever the path is
redirects = {
site1 = "some-bucket-name"
site2 = "some-other-bucket"
}
}
module "cdn" {
source = "../cdn" // or whatever the path is
redirects_buckets = module.s3.redirect_buckets
}

从示例的角度来看,这很有趣,但您不需要在这里使用S3的输出,因为您只需将相同的重定向映射交给cdn模块,并在这些重定向上使用for_each即可。

有一个名为Terragrunt的工具,它封装Terraform并支持依赖项。

https://terragrunt.gruntwork.io/docs/features/execute-terraform-commands-on-multiple-modules-at-once/#dependencies-模块间

最新更新