我是新来Terraform的,所以请善待我。
在构建过程中,Terraform会在每次构建时使用新名称将docker镜像推送到AWS ECR。
由于镜像名称不同,我们需要为每个新构建创建一个新的任务定义。
有没有办法在Terraform中处理这个问题?
任何帮助都是非常感谢的。
发布于 2021-02-21 22:46:17
如果您可以每次都用新图像替换任务定义,那么您可以更新任务定义中使用的图像名称,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}")
}https://stackoverflow.com/questions/66239859
复制相似问题