Могу ли я включить / отключить некоторые этапы aws_codepipeline в Terraform

У меня есть CodePipeline в Terraform следующим образом:

resource "aws_codepipeline" "main" {
      stage {
          name = "Source"
          ....
      }
      stage {
          name = "Test"
          ....
      }
      stage { 
          name = "Approval"
          ....
      }
      stage {
          name = "Deployment"
          ....
      }
}

Можно ли настроить, нужен ли мне один из вышеперечисленных этапов, например, если переменная enable_approval_stage=1, создается этап утверждения, если enable_approval_stage=0, этап утверждения не создается? как установить количество = 0 в ресурсе {}?

2 ответа

Решение

Моя идея состояла в том, чтобы создать два разных конвейера, один с этапом утверждения, а другой без него. И у них вот так:

Если manual_approve равно true (значение равно 1):

resource "aws_codepipeline" "pipeline-manualapprove" {
     count    = "${var.manual_approve}"

И если manual_approve имеет значение false (значение равно 0):

resource "aws_codepipeline" "pipeline-automatic" {
     count    = "${1-var.manual_approve}"

У меня очень похожая проблема. У меня есть этап «зеркалирования», который синхронизирует репозиторий CodeCommit с корпоративным сервером Gitlab. Я включил его только для среды разработки , в случае слияния с веткой разработки . Используя динамическое предложение, вы можете достичь своей цели. Он существует по крайней мере с версии 1.1.

Рассмотрим переменную:

      variable "stages" {
  type = set(string)
  default = ["dev","qa","prod"]
}

Скрипт будет выглядеть так:

      resource "aws_codepipeline" "pipeline_template" {
  for_each = var.stages

  name = "Awesome pipeline for ${each.key}"
  role_arn = data.aws_iam_role.my_codepipeline_role.arn

  stage {
    name = "Source"
    ....
  }
  stage {
    name = "Test"
    ....
  }

  dynamic "stage" {
    for_each = each.key == "dev" ? [each.key] : []

    content {
      name = "Mirror"
      ....
    }
  }
}


Другие вопросы по тегам