Terraform AWS提供商:ECS任务放置约束的数组



我正在使用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块中取出阻止错误发生。

您链接的代码中的架构仅指定typeexpression,并且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

最新更新