我是Terraform的新手,所以请大家谅解。
在构建过程中,Terraform将docker映像以新名称推送到AWS ECR。
由于Image Name不同,我们需要为每个新构建创建一个新的Task Definition。
在Terraform中有办法处理这个问题吗?
任何帮助都是感激的。
如果您可以每次用新图像替换任务定义,那么您可以更新任务定义中使用的图像名称,Terraform将为您处理更新。
如果你每次都需要生成一个新的任务定义,而把旧的留在原地,那么继续往下读。
如果您不需要将任务定义保持在Terraform状态,那么您可以在部署后将其删除,以便下次创建新的任务定义。
state rm命令从状态中删除资源:
terraform state rm aws_ecs_task_definition.service
如果您确实需要将每个任务定义保持在Terraform状态,您可以创建一个数据源,您可以使用for_each
操作符为该数据源生成资源集合。
[
{
"name": "a-service",
"image": "my-image",
"cpu": 10,
"memory": 512,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
]
}
]
使用fileset函数列出文件夹中的文件,并使用for_each
为每个文件生成一个新的资源:
resource "aws_ecs_task_definition" "service" {
family = "service"
for_each = fileset(path.module, "task-definitions/*.json")
container_definitions = file("${path.module}/${each.key}")
}