Это имеет смысл.Парень использует источник данных, чтобы получить последнюю версию определения задачи.Это потому, что он может использовать какой-то другой инструмент (jenkins / circleci) для внесения изменений в определение или ревизию задачи.
Следовательно, если он снова запустит этот код, то terraform должен выбрать последнюю версию и соответствующим образом обновить службу ecs.
Проверьте следующий код:
resource "aws_ecs_service" "test-ecs-service" {
name = "test-vz-service"
cluster = "${aws_ecs_cluster.test-ecs-cluster.id}"
task_definition = "${aws_ecs_task_definition.test.family}:${max("${aws_ecs_task_definition.test.revision}", "${data.aws_ecs_task_definition.test.revision}")}"
desired_count = 1
iam_role = "${aws_iam_role.ecs-service-role.name}"
load_balancer {
target_group_arn = "${aws_alb_target_group.test.id}"
container_name = "nginx"
container_port = "80"
}
Он обновляет сервис с последней версией.Он использует функцию MAX, которая возвращает максимальное значение.Вы можете проверить синтаксис интерполяции terraform, здесь .
, если определение задачи не существует, будет ли этот сценарий terraform создавать его?
Да,Он создаст его в соответствии с определением задачи, которое содержится в файле состояния.Если вы создали определение задачи вручную, он будет увеличивать номер редакции.
, если определение задачи существует и блок источника данных его получил, будет ли блок ресурсов повторно создавать другое пересмотренное определение задачи, или будетон просто ничего не делает?
Если есть изменения в любой конфигурации ресурса, то он создаст новое определение задачи, и это определение задачи будет выделено для ресурса службы ecs, но если нетизменение ресурса тогда ничего не даст.
Мне также неясно, предназначен ли этот скрипт terraform для запуска только один раз (первоначальное создание инфраструктуры) или при изменении?
Это должно быть выполнено во время создания инфраструктуры или если вы хотите выполнить любое другое обновление ресурса определения задачи.