Как настроить codebuild с помощью конвейеров кода в terraform? - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь настроить codebuild для получения артефакта из конвейера кода с terraform. Соответствующая часть ресурса codebuild в файле terraform выглядит следующим образом:

  source {
     type            = "CODEPIPELINE"
     git_clone_depth = 1
  }

Я получаю ошибку при запуске terraform apply Ошибка:

Ошибка: ошибка создания Проект CodeBuild: InvalidInputException: Неверный ввод: при использовании CodePipeline для sourceType и artifactType должно быть установлено значение: CODEPIPELINE код состояния: 400, идентификатор запроса: 2c32335e-d3c1-4abd-823b-83e26b947c77

Здесь мой шаблон:

resource "aws_s3_bucket" "example" {
  bucket = "exampletestingterrastartup"
  acl    = "private"
  tags = {
    Name = "example_testing_terrastartup"
  }
}

resource "aws_iam_role" "example" {
  name = "example"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codebuild.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_policy" "policy" {
  name        = "test-policy"
  description = "A test policy"
  policy      = <<EOF
{
"Version": "2012-10-17",
"Statement": [
  {
    "Sid": "CloudWatchLogsPolicy",
    "Effect": "Allow",
    "Action": [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents"
    ],
    "Resource": [
      "*"
    ]
  },
  {
    "Sid": "CodeCommitPolicy",
    "Effect": "Allow",
    "Action": [
      "codecommit:GitPull"
    ],
    "Resource": [
      "*"
    ]
  },
  {
    "Sid": "S3GetObjectPolicy",
    "Effect": "Allow",
    "Action": [
      "s3:GetObject",
      "s3:GetObjectVersion"
    ],
    "Resource": [
      "*"
    ]
  },
  {
    "Sid": "S3PutObjectPolicy",
    "Effect": "Allow",
    "Action": [
      "s3:PutObject"
    ],
    "Resource": [
      "*"
    ]
  },
  {
    "Sid": "S3BucketIdentity",
    "Effect": "Allow",
    "Action": [
      "s3:GetBucketAcl",
      "s3:GetBucketLocation"
    ],
    "Resource": [
      "*"
    ]
  }
]
}
EOF
}

resource "aws_iam_role_policy_attachment" "test-attach" {
  role       = "${aws_iam_role.example.name}"
  policy_arn = "${aws_iam_policy.policy.arn}"
}

resource "aws_codebuild_project" "example" {
  name          = var.DOMAIN_NAME
  description   = "A terrastartup codebuild project."
  build_timeout = "5"
  service_role  = "${aws_iam_role.example.arn}"

  artifacts {
    type = "CODEPIPELINE"
  }


  environment {
    compute_type                = "BUILD_GENERAL1_SMALL"
    image                       = "aws/codebuild/standard:1.0"
    type                        = "LINUX_CONTAINER"
    image_pull_credentials_type = "CODEBUILD"

  }

  logs_config {
    cloudwatch_logs {
      group_name  = "log-group"
      stream_name = "log-stream"
    }

    s3_logs {
      status   = "ENABLED"
      location = "${aws_s3_bucket.example.id}/build-log"
    }
  }

  source {
    type            = "CODEPIPELINE"
    git_clone_depth = 1
  }

  tags = {
    Environment = "Test"
  }
}

В документации по terraform ничего не говорится о sourceType и arifactType ... Как создать один код установки для получения артефакта из конвейера кода с помощью terraform? Спасибо!

1 Ответ

0 голосов
/ 12 января 2020

Эта ошибка связана с определением выходного артефакта сборки: [1]

Чтобы разрешить, определите type = 'CODEPIPELINE' для свойств 'source' и 'artifacts' на Ресурс TF: aws_codebuild_project :

От https://www.terraform.io/docs/providers/aws/r/codebuild_project.html#artifacts:

Источник поддерживает следующее:

type - (Обязательно) Тип репозитория, который содержит исходный код для сборки. Допустимые значения этого параметра: CODECOMMIT, CODEPIPELINE, GITHUB, GITHUB_ENTERPRISE, BITBUCKET, S3 или NO_SOURCE.

Артефакты поддерживают следующее:

type - (Обязательный) Тип артефакта построения вывода. Допустимые значения этого параметра: CODEPIPELINE, NO_ARTIFACTS или S3.

Предоставьте общий доступ к шаблону TF, если проблема не устранена.

Ссылка:

[1 ] https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html

Редактировать 1:

Я скопировал ваш шаблон и применил его, и он запустился без каких-либо проблем. Единственное, что изменилось, это название группы и проекта:

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

resource "aws_codebuild_project" "example" {
  name          = "terraform-cb-project" #var.DOMAIN_NAME # <======

Ответ Terraform применяется:

Plan: 5 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_iam_role.example: Creating...
aws_iam_policy.policy: Creating...
aws_s3_bucket.example: Creating...
aws_iam_role.example: Creation complete after 2s [id=example]
aws_iam_policy.policy: Creation complete after 3s [id=arn:aws:iam::123456789012:policy/test-policy]
aws_iam_role_policy_attachment.test-attach: Creating...
aws_iam_role_policy_attachment.test-attach: Creation complete after 2s [id=example-20200113052522878300000001]
aws_s3_bucket.example: Still creating... [10s elapsed]
aws_s3_bucket.example: Creation complete after 15s [id=shariqexampletestingterrastartup]
aws_codebuild_project.example: Creating...
aws_codebuild_project.example: Creation complete after 3s [id=arn:aws:codebuild:us-east-1:123456789012:project/terraform-cb-project]

Для справки, моя версия 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...