对ECS容器UUID的Terraform访问



如果我使用Terraform创建一个ECS任务定义…

resource "aws_ecs_task_definition" "ecs_container" {
family = "${var.component}-ecs-${var.variant}"
task_role_arn = "${aws_iam_role.ecs_task_role.arn}"
execution_role_arn = "${aws_iam_role.ecs_taskexec_role.arn}"
container_definitions = <<EOT
[
{
"name": "${var.component}",
"image": "${var.ecrurl}/${var.component}-${terraform.workspace}:latest-${var.variant}",
"cpu": 2,
"memoryReservation": 256,
"privileged": true,
"essential": true
}
]
EOT
}

…我可以通过结果aws_ecs_task_definition对象的'arn'属性检索taskId。然而,arn的格式使用的是taskdef标识的ECS family:version样式。

是否有办法看到"容器实例uuid";格式吗?例如,"任务"中显示的样式。列,或aws ecs list-tasks返回的值?

{
"taskArns": [
"arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84",
"arn:aws:ecs:us-east-1:<aws_account_id>:task/6b809ef6-c67e-4467-921f-ee261c15a0a1"
]
}

然而,arn的格式使用的是taskdef标识的ECS family:version样式。

是否有办法看到"容器实例uuid";格式吗?

这不是ID格式的问题。这是两个完全独立的id,用于两种完全独立的AWS资源类型。

您混淆了任务定义和正在运行的任务。ECS任务定义和正在运行的ECS任务是两个完全不同的东西。Terraform正确地给你任务定义的id作为aws_ecs_task_definition资源的属性。

如果您熟悉EC2,那么您可以将ECS任务定义视为EC2启动配置,并将正在运行的ECS任务ID视为EC2实例ID。

Terraform不直接运行ECS任务。请注意,(目前)无法通过Terraform AWS提供商直接调用AWS ECS RunTask API。Terraform可以创建ECS服务,或ECS任务时间表,或其他EventBridge触发器来运行ECS任务,最终运行ECS任务,但Terraform不直接运行这些任务作为terraform apply的一部分。运行中的ECS任务本身不受Terraform管理。

您试图访问的任务uuid不是静态值。它们可以随着ECS部署、触发器和自动伸缩的发生而不断变化。因此,在Terraform状态中不跟踪这些值,并且在Terraform中没有方法来查找这些值。

请注意,在运行terraform apply之后更新ECS服务可能需要一段时间,然后这些值才可用。在运行terraform apply之后,您通常希望在查询当前ECS任务id之前运行命令等待服务部署完成,如下所示:

aws ecs wait services-stable --cluster mycluster --services myservice
aws ecs list-tasks --cluster mycluster --service myservice

最新更新