AWS Codepipeline: работает «от руки», но не получается получить терраформ для настройки этапов - PullRequest
0 голосов
/ 25 декабря 2018

Я получил образец кодовой линии AWS, работающей через консоль, но мне нужно настроить ее через Terraform.

У меня две проблемы, одна второстепенная и одна главная:

  1. Этап Github завершается неудачей, пока я не захожу и не редактирую его через консоль, даже несмотря на то, что я не изменяю ничего, что уже настроено в «Хозяине» или «Репо»
  2. Более важный пункт - это то, что я сохраняюполучение CannotPullContainerError на этапе сборки, который предотвращает что-либо еще.В нем говорится «хранилище не существует или может потребоваться« вход в докер ».

хранилище существует;Я использовал командную строку из моего экземпляра Linux, чтобы проверить те же команды 'docker login' и 'docker pull', которые не работают из AWS CodePipeline.

(я знаю: buildspec.yml тупо небезопасен, ноЯ хотел получить прототип, который у меня был таким же образом, прежде чем вводить в км.)

Мой buildspec.yml прост:

version: 0.2
phases:
  pre_build:
    commands:
      - $(aws ecr get-login --no-include-email --region us-west-2)
      - docker pull 311541007646.dkr.ecr.us-west-2.amazonaws.com/agverdict-next:latest
  build:
    commands:
      - sudo apt install curl
      - curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
      - sudo apt install nodejs -y
      - mkdir /root/.aws
      - cp ./deployment/credentials /root/.aws/credentials
      - cd ./deployment
      - bash ./DeployToBeta.sh

Вот terraform, которая создает конвейер.(Нет шага «развернуть», поскольку сценарий оболочки «build» делает это из предыдущего воплощения.)

locals {
  github_owner           = "My-Employer"
  codebuild_compute_type = "BUILD_GENERAL1_LARGE"
  src_action_name        = "projectname-next"
  codebuild_envronment   = "int"
}

data "aws_caller_identity" "current" {}

provider "aws" {
       region     = "us-west-2"
      }

variable "aws_region" { default="us-west-2"}



variable "github_token" {
  default = "(omitted)"
  description = "GitHub OAuth token"
}

resource "aws_iam_role" "codebuild2" {
  name               = "${var.codebuild_service_role_name}"
  path               = "/projectname/"
  assume_role_policy = "${data.aws_iam_policy_document.codebuild_arpdoc.json}"
}

resource "aws_iam_role_policy" "codebuild2" {
  name   = "codebuild2_service_policy"
  role   = "${aws_iam_role.codebuild2.id}"
  policy = "${data.aws_iam_policy_document.codebuild_access.json}"
}




resource "aws_iam_role" "codepipeline2" {
  name               = "${var.codepipeline_service_role_name}"
  path               = "/projectname/"
  assume_role_policy = "${data.aws_iam_policy_document.codepipeline_arpdoc.json}"
}

resource "aws_iam_role_policy" "codepipeline" {
  name   = "codepipeline_service_policy"
  role   = "${aws_iam_role.codepipeline2.id}"
  policy = "${data.aws_iam_policy_document.codepipeline_access.json}"
}

resource "aws_codebuild_project" "projectname_next" {
  name           = "projectname-next"
  description    = "projectname_next_codebuild_project"
  build_timeout  = "60"
  service_role   = "${aws_iam_role.codebuild2.arn}"
  encryption_key = "arn:aws:kms:${var.aws_region}:${data.aws_caller_identity.current.account_id}:alias/aws/s3"

  artifacts {
    type = "CODEPIPELINE"
    name = "projectname-next-bld"
  }

  environment {
    compute_type    = "${local.codebuild_compute_type}"
    image    = "311541007646.dkr.ecr.us-west-2.amazonaws.com/projectname-next:latest"
    type            = "LINUX_CONTAINER"
    privileged_mode = false

    environment_variable {
      "name"  = "PROJECT_NAME"
      "value" = "projectname-next"
    }

    environment_variable {
      "name"  = "PROJECTNAME_ENV"
      "value" = "${local.codebuild_envronment}"
    }
  }

  source {
    type = "CODEPIPELINE"
  }
}



resource "aws_codepipeline" "projectname-next" {
  name     = "projectname-next-pipeline"
  role_arn = "${aws_iam_role.codepipeline2.arn}"


 artifact_store {
     location = "${var.aws_s3_bucket}"
         type     = "S3"
     }
     stage {
           name = "Source"
           action {
             name = "Source"
         category = "Source"
         owner = "ThirdParty"
         provider = "GitHub"
         version = "1"
         output_artifacts = ["projectname-webapp"]


                  configuration {
             Owner = "My-Employer"
              Repo = "projectname-webapp"
              OAuthToken = "${var.github_token}"
              Branch = "deploybeta_bash"
              PollForSourceChanges = "false"
              }
              }
        }

    stage {


        name = "Build"

            action {
                    name            = "projectname-webapp"
                category        = "Build"
                 owner           = "AWS"
                 provider        = "CodeBuild"
             input_artifacts = ["projectname-webapp"]
             output_artifacts = ["projectname-webapp-bld"]
             version         = "1"

                 configuration {
                       ProjectName = "projectname-next"
                }
        }
        }
        }

Большое спасибо за понимание!

1 Ответ

0 голосов
/ 08 января 2019

Обе проблемы звучат как проблемы с правами доступа.

...