我正在使用Terraform 0.10.7和AWS Terraform提供商版本1.7。
在我的Terraform中为创建ECS任务,我希望能够使用多个ECS放置约束。借着Terraform文档,我只看到使用单个约束的示例,但一切似乎都表明这是可能的。(示例:https://github.com/terraform-providers/terraform-provider-aws/blob/e7777ce9a5b2a3e1138f5df5df5f5f5f86e87170ac89aac89a a/aws/aws/resource_aws_aws_ecs_ecs_task_task_task_definition
我最近的尝试看起来像:
resource "aws_ecs_task_definition" "task" {
family = "${var.service_name}"
container_definitions = "${var.container_definitions}"
task_role_arn = "${var.task_role_arn}"
placement_constraints {
count = "${var.placement_constraint_count}"
type = "memberOf"
expression = "${element(var.placement_constraints, count.index)}"
}
}
在传递的tfvars中,我声明了各种各样的内容,包括:
var.placement_constraint_count = 1
var.placement_constraints = [ "attribute:adsk.max-container-disk-space-gb not_exists or attribute:adsk.max-container-disk-space-gb == 100"]
(这是一个自定义属性,与手头的问题无关。(
这导致:*错误:[Plopement_Constraints.0:无效或未知键:count]
查看位置约束(https://github.com/terraform-providers/terraform-provider-aws/blob/e77777777777777777777777777771138f5ddddddddddddddddf87171717170ac8e89ae89a ite________efce_aws(的
最多10个元素,每个元素具有"类型"one_answers"表达式"。
那么...说出所有这些的正确方法是什么?
谢谢,
dave
澄清
我刚刚在沙箱中跑了您的Terraform片段以查看内容,如果有些简短,则给定的错误是正确的:
:Error: aws_ecs_task_definition.task: placement_constraints.0: invalid or unknown key: count
现实是 placement_constraint
do 不是支持count
属性。
将count
线从placement_constraint
块中取出阻止错误发生。
您链接的代码中的架构仅指定type
和expression
,并且count
没有津贴。
定义多个约束需要Terraform模板中placement_constraint
块的多个实例。
替代建议
出于您的目的,我将使用这些行:
Terraform.tfvars
placement_constraints = [
"attribute:one == 1",
"attribute:two == 2",
"attribute:three == 3",
]
ecs_task.tf
resource "aws_ecs_task_definition" "task" {
container_definitions = "${var.container_definitions}"
family = "${var.service_name}"
task_role_arn = "${var.task_role_arn}"
placement_constraints {
expression = "${element(var.placement_constraints, 0)}"
type = "memberOf"
}
placement_constraints {
expression = "${element(var.placement_constraints, 1)}"
type = "memberOf"
}
placement_constraints {
expression = "${element(var.placement_constraints, 2)}"
type = "memberOf"
}
}
是的,它是重复且丑陋的。
不,Terraform尚不是功能完整的V1.0工具。😔
我一直在与我的客户和项目一起遇到这样的限制。
在加号上,即将到来的 for
和v0.12中的for-each
循环应有助于这样的情况。
希望有帮助!
我用terraform version
的以下内容运行了所有这些:
Terraform v0.11.7
+ provider.aws v1.28.0