Организация веб-перехватчика Terraform и ошибка токена

Я следую инструкциям HashiCorp по предоставлению AWS CodePipeline веб-перехватчика здесь. Я продолжаю получать ошибки:

$ terraform plan -var-file = "secret.tfvars" -out=tfplan -input=false 

Error: provider.github: "organization": required field is not set
Error: provider.github: "token": required field is not set

Но в их документации нет места, где можно добавить эти поля. Я пытался добавить их на все этапы или только на этап исходного кода, потому что это единственный раз, когда GitHub упоминается как поставщик.

Мне удалось подготовить их AWS CodePipeline без веб-перехватчика здесь. У этого есть возможность периодически проводить опрос, но не мгновенно, как параметр веб-перехватчика, который я могу настроить с помощью консоли.

Для вашего удобства вот файл tf:

resource "aws_codepipeline" "bar" {
  name     = "tf-test-pipeline"
  role_arn = "${aws_iam_role.bar.arn}"

  artifact_store {
    location = "${aws_s3_bucket.bar.bucket}"
    type     = "S3"

    encryption_key {
      id   = "${data.aws_kms_alias.s3kmskey.arn}"
      type = "KMS"
    }
  }

  stage {
    name = "Source"

    action {
      name             = "Source"
      category         = "Source"
      owner            = "ThirdParty"
      provider         = "GitHub"
      version          = "1"
      output_artifacts = ["test"]

      configuration = {
        Owner  = "my-organization"
        Repo   = "test"
        Branch = "master"
      }
    }
  }

  stage {
    name = "Build"

    action {
      name            = "Build"
      category        = "Build"
      owner           = "AWS"
      provider        = "CodeBuild"
      input_artifacts = ["test"]
      version         = "1"

      configuration = {
        ProjectName = "test"
      }
    }
  }
}

# A shared secret between GitHub and AWS that allows AWS
# CodePipeline to authenticate the request came from GitHub.
# Would probably be better to pull this from the environment
# or something like SSM Parameter Store.
locals {
  webhook_secret = "super-secret"
}

resource "aws_codepipeline_webhook" "bar" {
  name            = "test-webhook-github-bar"
  authentication  = "GITHUB_HMAC"
  target_action   = "Source"
  target_pipeline = "${aws_codepipeline.bar.name}"

  authentication_configuration {
    secret_token = "${local.webhook_secret}"
  }

  filter {
    json_path    = "$.ref"
    match_equals = "refs/heads/{Branch}"
  }
}

# Wire the CodePipeline webhook into a GitHub repository.
resource "github_repository_webhook" "bar" {
  repository = "${github_repository.repo.name}"

  name = "web"

  configuration {
    url          = "${aws_codepipeline_webhook.bar.url}"
    content_type = "form"
    insecure_ssl = true
    secret       = "${local.webhook_secret}"
  }

  events = ["push"]
}

Update

Одна из вещей, которые я пробовал, это:

stage {
    name = "Source"

    action {
        name = "Source"
        category = "Source"
        owner = "ThirdParty"
        provider = "GitHub"
        token = "${var.github_token}"
        organization = "${var.github_username}"   
        version = "1"
        output_artifacts = ["SourceArtifact"]

        configuration {
            # Owner = "${var.github_username}"
            # OAuthToken = "${var.github_token}"
            Repo = "${var.github_repo}"
            Branch = "master"
            PollForSourceChanges = "true"
        }
    }
}

Где код про provider?

BMW 14.03.2019 01:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
863
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поэтому вам нужно сначала установить Гитхаб-провайдер.

Образец как:

# Configure the GitHub Provider
provider "github" {
  token        = "${var.github_token}"
  organization = "${var.github_organization}"
}

Это в стадии Источник. Я пытался добавить туда organization и token, но это не сработало. Должен ли я указывать провайдера «github» сверху?

Viet 14.03.2019 02:09

Откуда сцена? кодопровод? у вас был какой-нибудь tf-файл с provider "github" {}?

BMW 14.03.2019 02:44

Кроме того, пожалуйста, поймите, что я просто использовал примеры HashiCorp. Тот, что без вебхука, отлично работает без провайдера «github» var.

Viet 14.03.2019 02:44

Да, этапы являются частью codepipeline. Нет, у меня нет файла tf с provider "github", потому что в другом примере (без вебхука) он не нужен.

Viet 14.03.2019 02:45

Это правильный ответ на вашу фактическую ошибку, которую вы имеете в вопросе, где Terraform жалуется, что вы не определили token или organization ни в конфигурации провайдера, ни через переменные среды. Если у вас есть несколько проблем, вы должны разделить свои вопросы или переработать этот вопрос, чтобы более правильно указать проблему, которую решает ваш ответ.

ydaetskcoR 14.03.2019 16:25

@BMW У меня вопрос: нужно ли добавлять еще одного провайдера в код terraform, если у вас уже есть один провайдер. В этом случае, если у меня есть провайдер «aws», мне нужно добавить провайдера «git»?

Umar Tahir 14.04.2020 19:58

они разные и от случая к случаю. например, если вам нужен null , поставщик шаблонов, terraform автоматически загрузит его при «terraform init», но для поставщика github в основном вам нужно установить детали

BMW 14.04.2020 23:28

Мне пришлось добавить поставщика github в модуль, который создавал конвейер. Не уверен, почему определение моего корня main.tf, а затем ожидание передачи не сработало. Но это определенно решение для создания веб-перехватчика против частного репо.

NJITman 21.04.2021 04:40

Я понял проблему, которая у меня была:

В шаблоне terraform есть переменная с именем

locals {
  webhook_secret = "super-secret"
}

Это будет использоваться для создания секрета веб-перехватчика с GitHub при развертывании шаблона. Без webhook_secret. Без webhook_secret, даже если вы добавите провайдера, такого как ответ BMW на token и вопрос organization, ошибка сохранится.

HashiCorp также рекомендует создавать, хранить и извлекать секрет веб-перехватчика из среды или чего-то вроде хранилища параметров SSM.

Вы также можете проверить Руководство GitHub по созданию и защите вашего секрета веб-перехватчика (например, взяв вывод ruby ​​-rsecurerandom -e 'помещает SecureRandom.hex(20)' на терминал)

Вот рабочий шаблон, я только вставил изменения, остальное (...) выглядит так же, как в примере HashiCorp:

# Input variables
variable "aws_region" {
    type = "string"
    default = "us-east-1"
}

variable "pipeline_name" {
    type = "string"
    default = "static-website-terraform"
}

variable "github_username" {
    type = "string"
    default = "nditech"
}

variable "github_token" {
    type = "string"
}

variable "webhook_secret" {
    type = "string"
}
...
# Add webhook to pipeline
resource "aws_codepipeline_webhook" "codepipeline" {
    name            = "${var.pipeline_name}-codepipeline-webhook"
    authentication  = "GITHUB_HMAC"
    target_action   = "Source"
    target_pipeline = "${aws_codepipeline.codepipeline.name}"

    authentication_configuration {
        secret_token = "${var.webhook_secret}"
    }

    filter {
        json_path    = "$.ref"
        match_equals = "refs/heads/{Branch}"
    }
}

# Wire the CodePipeline webhook into a GitHub repository.
resource "github_repository_webhook" "codepipeline" {
    repository = "${var.github_repo}"

    name = "web"

    configuration {
        url          = "${aws_codepipeline_webhook.codepipeline.url}"
        content_type = "form"
        insecure_ssl = true
        secret       = "${var.webhook_secret}"
    }

    events = ["push"]
}

Это не связано с ошибкой в ​​вашем вопросе, когда Terraform говорит, что вы не определили требуемые token или organization ни в конфигурации провайдера, ни через переменные среды.

ydaetskcoR 14.03.2019 16:23

Тем не менее, спасибо за уведомление.

Viet 14.03.2019 17:44

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