_Esta edición fue originalmente abierta por @gustavosoares como hashicorp / terraform # 12665. Se migró aquí como parte de la división del proveedor . El cuerpo original del problema se encuentra a continuación.
Hola,
Manchar un servicio ecs y ejecutar terraform apply nuevamente no funciona. Recibo un Creation of service was not idempotent
Tuve que actualizar mi arn de grupo objetivo de servicio ecs y pensé en manchar el ecs para que pudiera ser destruido y recreado nuevamente con la referencia correcta.
Así es como lo corrompí:
terraform taint -module=ecs_bla_service aws_ecs_service.main
Ejecute terraform -v
para mostrar la versión. Si no está ejecutando la última versión de Terraform, actualice porque es posible que su problema ya se haya solucionado.
Terraform v0.8.8
Enumere los recursos como una lista, por ejemplo:
resource "aws_ecs_service" "main" {
name = "${var.name}"
cluster = "${var.cluster}"
task_definition = "${var.task_definition}"
desired_count = "${var.desired_count}"
deployment_minimum_healthy_percent = "${var.deployment_minimum_healthy_percent}"
deployment_maximum_percent = "${var.deployment_maximum_percent}"
iam_role = "${aws_iam_role.ecs-service-role.arn}"
depends_on = ["aws_iam_policy_attachment.ecs-service-iam-policy"]
load_balancer {
target_group_arn = "${var.target_group_arn}"
container_name = "${var.container_name}"
container_port = "${var.container_port}"
}
lifecycle {
ignore_changes = ["task_definition", "desired_count"]
create_before_destroy = true
}
# http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html
placement_strategy {
type = "${var.placement_strategy_type}"
field = "${var.placement_strategy_field}"
}
placement_constraints {
type = "${var.placement_constraints_type}"
expression = "${var.placement_constraints_expression}"
}
}
module.ecs_corporate_service.aws_ecs_service.main: Still creating... (1m50s elapsed)
Error applying plan:
1 error(s) occurred:
* aws_ecs_service.main: InvalidParameterException: Creation of service was not idempotent.
status code: 400, request id: 6b9e0243-0851-11e7-99d9-4b4a6bde7f7d "corporate-production"
Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
exit status 1
El servicio ECS debería haber sido destruido y recreado.
Tengo Creation of service was not idempotent.
Enumere los pasos necesarios para reproducir el problema, por ejemplo:
terraform apply
run terraform apply again
¿Hay algo atípico en sus cuentas que debamos saber? Por ejemplo: ¿Se ejecuta en EC2 Classic? ¿Versión personalizada de OpenStack? ¿ACL estrechas?
No sé
Estoy experimentando el mismo problema cuando intento actualizar location_constraints en un servicio ya creado.
tl; dr aws_ecs_service
necesita admitir name_prefix para que se pueda usar create_before_destroy
.
Esto parece ser el resultado del parámetro create_before_destroy
del bloque de ciclo de vida y el requisito de ECS de que serviceName sea único .
Nombre del Servicio
El nombre de su servicio. Se permiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y guiones bajos. Los nombres de los servicios deben ser únicos dentro de un clúster, pero puede tener servicios con nombres similares en varios clústeres dentro de una región o en varias regiones.
Requerido: si
Dado que aws_ecs_service
Terraform no admite name_prefix. Estos errores.
Eliminar el siguiente bloque de su servicio ecs debería solucionar el problema:
lifecycle {
create_before_destroy = true
}
Prefiero ver soporte para crear un nuevo servicio (y hacer que se inicie con éxito) antes de destruir uno antiguo. En este momento, agregar o cambiar las entradas del equilibrador de carga, por ejemplo, es una interrupción.
De acuerdo con @dekimsey, le gustaría ver name_prefix
soportado por aws_ecs_service
para evitar interrupciones. ¿Es posible utilizar random_id
para duplicar el comportamiento de name_prefix
? Si es así, ¿hay ejemplos específicos para usar esto con aws_ecs_service
?
Comentario más útil
Estoy experimentando el mismo problema cuando intento actualizar location_constraints en un servicio ya creado.