在添加对上一计数索引的依赖项时,我得到了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}
那样有一个非常长的端点。
你可以为树中的每个级别都有一个循环,它们不会有自引用。在树的不同级别之间不可能有真正的循环。