【问题标题】:terraform apply pass variable to deploy specific ECSterraform 应用 pass 变量来部署特定的 ECS
【发布时间】: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


【解决方案1】:

首先,这里有一些重叠的概念。你没有指定你使用的是什么版本的 Terraform,所以我假设它是相对较新的。

您可能指的 Terraform 资源是 ecs_task_definition。此资源采用以下格式(来自文档):

resource "aws_ecs_task_definition" "service" {   
    family = "service"
    container_definitions = jsonencode([

     //ommitted for brevity

    ])

}

您似乎改为使用 filetemplatefile 函数将名为 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 “干净地应用”,因为所有状态都与您的存储库内容同步。

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 2021-12-31
    • 2018-01-17
    • 2021-06-16
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多