【发布时间】:2021-08-04 13:25:16
【问题描述】:
我有许多 ECS。是否可以将变量传递给 ecs-container-definition.json 以部署到特定的 ECS?
例如terraform apply -var 'deploy=aws-ecs-backend'
【问题讨论】:
-
什么意思?你有任何代码来展示你想要做什么吗?
标签: amazon-web-services terraform amazon-ecs
我有许多 ECS。是否可以将变量传递给 ecs-container-definition.json 以部署到特定的 ECS?
例如terraform apply -var 'deploy=aws-ecs-backend'
【问题讨论】:
标签: amazon-web-services terraform amazon-ecs
首先,这里有一些重叠的概念。你没有指定你使用的是什么版本的 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)。
您尝试执行的进程是resource targeting,并且(例如)通过在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 反模式,正如文档所述 in the opening paragraph:
有时您可能只想应用计划的一部分,例如 Terraform 的状态与您的状态不同步的情况 由于网络故障导致的资源,上游云的问题 平台,或者 Terraform 或其提供程序中的错误。
通常最佳实践是让 Terraform “干净地应用”,因为所有状态都与您的存储库内容同步。
【讨论】: