Как вы игнорируете вложенное поле через жизненный цикл? - PullRequest
1 голос
/ 29 апреля 2020

Terraform newb ie здесь. У меня есть код здесь для задачи расписания ECS. Всякий раз, когда я изменяю это и применяю это изменение, в задаче ECS устанавливается первая версия определения задачи. Поэтому я попытался добавить к нему метод жизненного цикла.

resource "aws_cloudwatch_event_target" "sqs" {
  rule      = aws_cloudwatch_event_rule.sqs.name
  target_id = local.namespace
  arn       = aws_ecs_cluster.app.arn
  role_arn  = aws_iam_role.ecsRole.arn
  input     = "{}"

  ecs_target {
    task_count          = 1
    task_definition_arn = aws_ecs_task_definition.sqs.arn
    launch_type         = "FARGATE"
    platform_version    = "LATEST"

    network_configuration {
      security_groups = [aws_security_group.nsg_task.id]
      subnets         = split(",", var.private_subnets)
    }
  }
}

Пробовал:

    resource "aws_cloudwatch_event_target" "sqs" {
      rule      = aws_cloudwatch_event_rule.sqs.name
      target_id = local.namespace
      arn       = aws_ecs_cluster.app.arn
      role_arn  = aws_iam_role.ecsRole.arn
      input     = "{}"

      ecs_target {
        task_count          = 1
        task_definition_arn = aws_ecs_task_definition.sqs.arn
        launch_type         = "FARGATE"
        platform_version    = "LATEST"

        network_configuration {
          security_groups = [aws_security_group.nsg_task.id]
          subnets         = split(",", var.private_subnets)
        }

        lifecycle {
          ignore_changes = [task_definition_arn]
        }
      }
    }

и

resource "aws_cloudwatch_event_target" "sqs" {
  rule      = aws_cloudwatch_event_rule.sqs.name
  target_id = local.namespace
  arn       = aws_ecs_cluster.app.arn
  role_arn  = aws_iam_role.ecsRole.arn
  input     = "{}"

  ecs_target {
    task_count          = 1
    task_definition_arn = aws_ecs_task_definition.sqs.arn
    launch_type         = "FARGATE"
    platform_version    = "LATEST"

    network_configuration {
      security_groups = [aws_security_group.nsg_task.id]
      subnets         = split(",", var.private_subnets)
    }
  }

  lifecycle {
    ignore_changes = [ecs_target.task_definition_arn]
  }

}

Как игнорировать вложенное поле в жизненном цикле?

1 Ответ

1 голос
/ 30 апреля 2020

Нашел решение. Это работает

resource "aws_cloudwatch_event_target" "sqs" {
  rule      = aws_cloudwatch_event_rule.sqs.name
  target_id = local.namespace
  arn       = aws_ecs_cluster.app.arn
  role_arn  = aws_iam_role.ecsRole.arn
  input     = "{}"

  ecs_target {
    task_count          = 1
    task_definition_arn = aws_ecs_task_definition.sqs.arn
    launch_type         = "FARGATE"
    platform_version    = "LATEST"

    network_configuration {
      security_groups = [aws_security_group.nsg_task.id]
      subnets         = split(",", var.private_subnets)
    }
  }

  lifecycle {
    ignore_changes = [ecs_target.0.task_definition_arn]
  }
}

Необычный для меня синтаксис, но это так:).

...