如何使用Terraform控制Docker映像版本,同时将映像推送到ECR



我是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操作符为该数据源生成资源集合。

例如,您可以将每个任务定义的容器定义保存到文件夹中的JSON文件中。每个文件看起来像这样:
[
{
"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}")
}

相关内容

最新更新