使用AWS API网关计数的Terraform循环错误



在添加对上一计数索引的依赖项时,我得到了Cycle错误

我想使用AWS Terraform定义API路径/test1/{id}id资源取决于test1。如果资源是test1,则将父级设置为根API网关资源。

locals {
resources = ["test1", "{id}"]
}
resource "aws_api_gateway_rest_api" "root_api" {
name = "dev-api"
}
resource "aws_api_gateway_resource" "dev_gateway_test_resources" {
count       = length(local.resources)
path_part   = local.resources[count.index]
parent_id   = count.index == 0 ? aws_api_gateway_rest_api.root_api.root_resource_id : aws_api_gateway_resource.dev_gateway_test_resources[count.index - 1].id
rest_api_id = aws_api_gateway_rest_api.root_api.id
}

回应:

Error: Cycle: aws_api_gateway_resource.dev_gateway_test_resources[1], aws_api_gateway_resource.dev_gateway_test_resources[0]

我已经使用for_each尝试了相同的逻辑,但我仍然看到相同的错误

您所拥有的是一个引用自身的资源。到目前为止,Terraform不支持这一点,即使很容易看出资源实际上并没有引用它自己,而是引用了在循环中创建的另一个相同类型的资源。支持自引用存在问题:GitHub

现在,我不知道有多少项目可以有你的resources列表,但在这种情况下,你可能想复制你的aws_api_gateway_resource:

resource "aws_api_gateway_resource" "dev_gateway_test_root" {
path_part   = "test"
parent_id   = aws_api_gateway_rest_api.root_api.root_resource_id
rest_api_id = aws_api_gateway_rest_api.root_api.id
}
resource "aws_api_gateway_resource" "dev_gateway_test_resources" {
path_part   = "{id}"
parent_id   = aws_api_gateway_resource.dev_gateway_test_root.id
rest_api_id = aws_api_gateway_rest_api.root_api.id
}

您想要实现的是拥有一个端点,例如/test/{id}。根据我的经验,API网关端点的宽度往往会增加,这意味着您将拥有以下内容:

/
/test1
/{id}
/test2
/{id}
/test3
...
/testN

而不是像/test/child1/child2/.../{id}那样有一个非常长的端点。

你可以为树中的每个级别都有一个循环,它们不会有自引用。在树的不同级别之间不可能有真正的循环。

相关内容

  • 没有找到相关文章

最新更新