404 При создании github_repository_webhook с помощью Terraform
Мы перешли на использование
integrations/github
провайдера, и с тех пор мы начали получать 404 при попытке создать github_repository_webhook с помощью Terraform. Я полагаю, что у нас есть все необходимые части, требуемые на основе документов, но API uri в журналах отсутствует org. ПРИМЕЧАНИЕ. Настоящие названия организаций и репозиториев были отредактированы.
main.tf
resource "aws_codepipeline_webhook" "codepipeline_webhook" {
name = "test-github-webhook"
authentication = "GITHUB_HMAC"
target_action = "CC"
target_pipeline = aws_codepipeline.pipeline.name
authentication_configuration {
secret_token = data.aws_secretsmanager_secret_version.github_token.secret_string
}
filter {
json_path = "$.ref"
match_equals = "refs/heads/{Branch}"
}
tags = merge(var.tags, {
Name = "test-github-webhook"
})
}
# Wire the CodePipeline webhook into a GitHub repository.
resource "github_repository_webhook" "github_webhook" {
repository = "my_repo"
configuration {
url = aws_codepipeline_webhook.codepipeline_webhook.url
content_type = "json"
insecure_ssl = true
secret = data.aws_secretsmanager_secret_version.github_token.secret_string
}
events = ["push"]
}
бэкенд.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.65.0"
}
github = {
source = "integrations/github"
version = "~> 4.0"
}
}
}
provider "github" {
token = data.aws_secretsmanager_secret_version.github_token.secret_string
owner = "my_org"
base_url = "https://github.com/my_org/" # we have github enterprise
}
Ошибка при создании:
Error: POST https://api.github.com/repos//my_repo/hooks: 404 Not Found []
Обратите внимание, что организация полностью отсутствует в URL-адресе. Я также пытался включить имя организации в ресурс github_repository_webhook, но URL-адрес по-прежнему содержит двойную косую черту и 404:
Error: POST https://api.github.com/repos//my_org/my_repo/hooks: 404 Not Found []
Когда я полностью удаляю исходный код и версию провайдера, terraform возвращается к
hashicorp/terraform
source и веб-хук создается без проблем. Кто-нибудь еще столкнулся с этой проблемой?
3 ответа
Вы, вероятно, уже решили эту проблему, но на всякий случай есть другие, кто сталкивается с этой проблемой.
Это решение предполагает, что вы используете версию Terraform >=0.13 и новую интеграцию Terraform GitHub.
Убедитесь, что все модули, использующие провайдер, определили
required_providers
блокировать. Если этот блок не определен в модуле, то кажется, что используется (устаревший) поставщик «hashicorp/github», даже если вы настроили этот блок в корневом модуле, где вы определили
github
провайдер. (Это то, что вызывало у меня ошибку.) То есть убедитесь, что вы определили следующее в каждом из ваших модулей:
terraform {
required_providers {
github = {
source = "integrations/github"
version = "~> 4.0"
}
}
}
Предполагая, что вы сделали все вышеперечисленное, попробуйте еще раз проверить, правильно ли вы настроили интеграцию с GitHub . Некоторые заметные ошибки:
- При обновлении с
hashicorp/github
кintegrations/github
, использоватьterraform state replace-provider
. В противном случае Terraform по-прежнему будет требовать, чтобы старый провайдер взаимодействовал с файлом состояния. - В
organization
аргумент устарел в пользуowner
аргумент (должен вести себя так же, но на всякий случай).
Каков результат
terraform providers
? Я подозреваю, что у вас есть обе версии провайдера github в вашем штате. Если вы это сделаете,
terraform state replace-provider hashicorp/github integrations/github
Должен исправить тебя.
Я столкнулся с этой проблемой несколько месяцев назад. В вашем URL отсутствует организация. Он должен быть в формате
https://api.github.com/repos/my_organization/my_repo/hooks