terraform应用pass变量来部署特定的ECS



我有一些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"干净地应用"。在这种情况下,所有的状态都与存储库内容同步。

相关内容

  • 没有找到相关文章

最新更新