如何在terraform中使用代码管道设置代码构建?

如何在terraform中使用代码管道设置代码构建?,terraform,aws-codepipeline,aws-codebuild,Terraform,Aws Codepipeline,Aws Codebuild,我正在尝试设置codebuild以接收来自terraform代码管道的工件。terraform文件中codebuild资源的相关部分如下所示: source { type = "CODEPIPELINE" git_clone_depth = 1 } 运行terraform apply时,我收到一个错误,错误是: 错误:创建CodeBuild项目时出错:InvalidInputException:无效输入:使用CodePipeline时,sour

我正在尝试设置codebuild以接收来自terraform代码管道的工件。terraform文件中codebuild资源的相关部分如下所示:

  source {
     type            = "CODEPIPELINE"
     git_clone_depth = 1
  }
运行
terraform apply
时,我收到一个错误,错误是:

错误:创建CodeBuild项目时出错:InvalidInputException:无效输入:使用CodePipeline时,sourceType和artifactType必须设置为:CodePipeline 状态代码:400,请求id:2c32335e-d3c1-4abd-823b-83e26b947c77


terraform文档中没有关于sourceType和FactType的任何内容。。。一个设置代码如何构建以从terraform的代码管道接收工件?谢谢

此错误与生成输出工件定义[1]有关

要解决此问题,请为TF资源上的“源”和“工件”属性定义类型=“CODEPIPELINE”:aws\u codebuild\u项目

发件人:

源代码支持以下内容:

type-(必选)包含源代码的存储库的类型 待建。此参数的有效值为:CODECOMMIT, 代码管道、GITHUB、GITHUB_ENTERPRISE、BITBUCKET、S3或无_源

工件支持以下内容:

type-(必选)生成输出工件的类型。的有效值 此参数为:CODEPIPELINE、无_工件或S3

如果您仍然面临问题,请共享您的TF模板

参考:

[1]

编辑1: 我复制了你的模板并应用了它,它运行起来没有任何问题。唯一改变的是bucket名称和项目名称:

resource "aws_s3_bucket" "example" {
  bucket = "shariqexampletestingterrastartup"  # <======

resource "aws_codebuild_project" "example" {
  name          = "terraform-cb-project" #var.DOMAIN_NAME # <======
作为参考,我的TF版本如下:

terraform --version
Terraform v0.12.10
+ provider.aws v2.44.0

Your version of Terraform is out of date! The latest version
is 0.12.19. You can update by downloading from www.terraform.io/downloads.html

这是我为我的用例测试和工作的内容:

codebuild.tf

resource "aws_codebuild_project" "code_build" {
  name                          = "${var.teamid}-${var.prjid}"
  description                   = "${var.teamid}-${var.prjid}"
  build_timeout                 = "5"
  service_role                  = var.codebuild_role
  artifacts {
    type                        = "CODEPIPELINE"
  }

  environment {
    compute_type                = "BUILD_GENERAL1_LARGE"
    image                       = "aws/codebuild/amazonlinux2-x86_64-standard:3.0"
    type                        = "LINUX_CONTAINER"
    privileged_mode             = true
  }

  source {
    type                          = "${var.build_source}"
    location                      = "${var.storage_bucket}"
    git_clone_depth               = var.git_clone_depth
    buildspec                     = "${file("${var.buildspec_filepath}")}"
  }

  tags = {
    Name                          = "${var.teamid}-${var.prjid}"
    Owner                         = "${var.email}"
    TeamId                        = "${var.teamid}"
    PrjId                         = "${var.prjid}"
  }
}
input.tfvars

email                       = "demo@demo.com"
aws_region                  = "us-east-2"
codebuild_role              = "arn:aws:iam::123456789012:role/service-role/codebuild-service-role"
storage_bucket              = "codepipeline-12345"
kms_keyid                   = "12345"
github_org                  = "tomarv2"
github_repo                 = "demo"
github_oauth_token          = "xyz"
build_source                = "CODEPIPELINE"
git_clone_depth             = "0"
buildspec_filepath          = "buildspec.yml"
teamid                      = "demo"
prjid                       = "demo-pipeline"

我已经按照您的建议添加了terraform模板,这两个项目都按照您的建议用value CODEPIPELINE填写请参见Edit1。
email                       = "demo@demo.com"
aws_region                  = "us-east-2"
codebuild_role              = "arn:aws:iam::123456789012:role/service-role/codebuild-service-role"
storage_bucket              = "codepipeline-12345"
kms_keyid                   = "12345"
github_org                  = "tomarv2"
github_repo                 = "demo"
github_oauth_token          = "xyz"
build_source                = "CODEPIPELINE"
git_clone_depth             = "0"
buildspec_filepath          = "buildspec.yml"
teamid                      = "demo"
prjid                       = "demo-pipeline"