我有一些ECS。是否可以将变量传递给ecs-container-definition。json部署到特定的ECS?
。Terraform apply -var 'deploy=aws-ecs-backend'
首先,这里有几个重叠的概念。你没有说明你使用的是什么版本的Terraform,所以我假设它是相对较新的。
您可能引用的Terraform资源是ecs_task_definition。该资源采用以下格式(来自文档):
resource "aws_ecs_task_definition" "service" {
family = "service"
container_definitions = jsonencode([
//ommitted for brevity
])
}
看起来您正在使用file或templatefile函数来嵌入名为ecs-container-definition的文件的内容。Json放入资源中。从Terraform的角度来看,您不应用更改到这个文件,您应用更改到引用它的资源(aws_ecs_task_definition)。
您尝试执行的过程是资源定位,它是通过在terraform apply
命令中指定目标资源来调用的(例如)。下面是一个例子,如果你的ecs_task_definition资源myservice您将得到以下内容:
resource "aws_ecs_task_definition" "myservice" {
family = "service"
container_definitions = file('./templates/aws_ecs_task_definition')
.....
}
然后使用以下命令(从包含.tf文件的同一目录运行)对该资源应用更改:
terraform plan -target="aws_ecs_task_definition.myservice"
(查看计划变更)
terraform apply -target="aws_ecs_task_definition.myservice"
(应用更改)
请注意,这是一种Terraform反模式,正如文档开头段落所述:
有时您可能希望只应用计划的一部分,例如当Terraform的状态与你的不同步时资源由于网络故障,上游云出现问题平台,或者Terraform或其提供程序的错误。
一般来说,最佳实践是让terrform"干净地应用"。在这种情况下,所有的状态都与存储库内容同步。