Terraform正在更新众多ECS服务/任务之一
星期五快乐!希望有人能帮我解决这个问题,或者指出我思维中的缺陷Terraform正在更新众多ECS服务/任务之一,terraform,amazon-ecs,terraform-provider-aws,aws-fargate,Terraform,Amazon Ecs,Terraform Provider Aws,Aws Fargate,星期五快乐!希望有人能帮我解决这个问题,或者指出我思维中的缺陷 $terraform--版本 地形v0.12.7 +provider.aws v2.25.0 +provider.template v2.1.2 前言 这是我第一次使用Terraform。我们有一个现有的AWS ECS/Fargate环境正在启动和运行,这是一个“测试”环境。我们最近(例如,在设置测试环境后)开始将Terraform用于IaC目的 当前配置 该环境只有一个ECS集群,我们使用FARGATE,但我不确定这对这个问题是
$terraform--版本
地形v0.12.7
+provider.aws v2.25.0
+provider.template v2.1.2
前言
这是我第一次使用Terraform。我们有一个现有的AWS ECS/Fargate环境正在启动和运行,这是一个“测试”环境。我们最近(例如,在设置测试环境后)开始将Terraform用于IaC目的
当前配置
该环境只有一个ECS集群,我们使用FARGATE,但我不确定这对这个问题是否重要。集群有多个服务,每个服务都有一个与之关联的任务(docker映像),因此它们可以单独扩展。每个docker映像都有自己的回购协议
我想做什么
所以我希望通过Terraform能够创造、更新和破坏环境。然而,创建/销毁似乎相当直截了当;我遇到了更新的障碍
正如我所说的,每个任务都有自己的repo,当针对repo发出拉请求时,我们的CI平台(CircleCI,如果有必要)构建新的docker映像,标记它并推送它。然后,我们使用一个API调用来触发Terraform Repo的构建,传递已更新的服务/任务的名称
问题
我们面临的问题是,在浏览服务(如下所述)时,我不知道如何让Terraform忽略未更新的服务,或者如何在aws_ecs_任务_定义中提供正确的容器_定义,特别是当前图像标记(我们不使用)。因此,我试图弄清楚如何获取最新的容器信息(标签),或者只是告诉Terraform跳过未修改的任务
地形文字
这是我尝试过的一个精简版本,它位于一个名为ecs.tf的模块中,var.ecs_svc_name是服务名称的列表。我已经删除了一些元素,因为我认为它们与这个问题无关,拥有它们会使问题变得非常严重
警告
由于我要问的问题,我没有运行如下所示的Terraform“script”,因此我的语法可能有问题。对不起,如果是这样的话,希望这能告诉你我在做什么
ecs.tf
data.tf
我没有发布JSON文档,如果您需要,我可以提供它
谢谢有必要在任务定义修订版的容器定义中传递更新的图像属性 您可以
数据源
服务使用的当前任务修订版的容器定义,并将其传递给地形。您可以按照下面的代码操作
data "template_file" "example" {
template = "${file("${path.module}/example.json")}"
vars {
image = "${data.aws_ecs_container_definition.example.image}"
}
}
resource "aws_ecs_task_definition" "example" {
family = "${var.project_name}-${var.environment_name}-example"
container_definitions = "${data.template_file.example.rendered}"
cpu = 192
memory = 512
}
data "aws_ecs_container_definition" "example" {
task_definition = "${var.project_name}-${var.environment_name}-example"
container_name = "example"
}
有必要在任务定义修订版的容器定义中传递更新的图像属性 您可以
数据源
服务使用的当前任务修订版的容器定义,并将其传递给地形。您可以按照下面的代码操作
data "template_file" "example" {
template = "${file("${path.module}/example.json")}"
vars {
image = "${data.aws_ecs_container_definition.example.image}"
}
}
resource "aws_ecs_task_definition" "example" {
family = "${var.project_name}-${var.environment_name}-example"
container_definitions = "${data.template_file.example.rendered}"
cpu = 192
memory = 512
}
data "aws_ecs_container_definition" "example" {
task_definition = "${var.project_name}-${var.environment_name}-example"
container_name = "example"
}
data "template_file" "example" {
template = "${file("${path.module}/example.json")}"
vars {
image = "${data.aws_ecs_container_definition.example.image}"
}
}
resource "aws_ecs_task_definition" "example" {
family = "${var.project_name}-${var.environment_name}-example"
container_definitions = "${data.template_file.example.rendered}"
cpu = 192
memory = 512
}
data "aws_ecs_container_definition" "example" {
task_definition = "${var.project_name}-${var.environment_name}-example"
container_name = "example"
}