Развертывание AWS Fargate: «Недопустимая конфигурация действия. Контейнер AWS ECS ***** не существует» - PullRequest
0 голосов
/ 05 октября 2018

Я использую terraform для предоставления необходимых ресурсов.

У меня есть кодовая линия terraform resource, и Production stage читает файл imagedefinitions.json, чтобы узнать, какие образы для развертывания:

resource "aws_codepipeline" "pipeline" {
  stage {
    name = "Build"
    action {
      name             = "Build"
      category         = "Build"
      owner            = "AWS"
      provider         = "CodeBuild"
      version          = "1"
      input_artifacts  = ["source"]
      output_artifacts = ["imagedefinitions"]
      configuration {
        ProjectName = "${var.project_prefix}-codebuild"
      }
    }
  }
 stage {
    name = "Production"
    action {
      name            = "Deploy"
      category        = "Deploy"
      owner           = "AWS"
      provider        = "ECS"
      input_artifacts = ["imagedefinitions"]
      version         = "1"
      configuration {
        ClusterName = "${var.ecs_cluster_name}"
        ServiceName = "${var.ecs_service_name}"
        FileName    = "imagedefinitions.json"
      }
    }
  }

Файл imagedefinitions.jsonпостроено на этапе сборки, начиная с buildspec.yml:

build:
  commands:
    - echo Build started on 'date'
    - echo Building the Docker image...
    - docker build -t $REPOSITORY_URI:latest .
    - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
  commands:
    - echo Build completed on 'date'
    - echo Pushing the Docker images...
    - docker push $REPOSITORY_URI:latest
    - docker push $REPOSITORY_URI:$IMAGE_TAG
    - echo Writing image definitions file...
    - printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json  

Я не уверен, какое имя изображения должно быть в этой строке:

  • printf '[{"name": "docker-image-name", "imageUri": "% s"}] '$ REPOSITORY_URI: $ IMAGE_TAG> imagedefinitions.json

Ошибка, которую я получаюповторяет значение "name" из этой строки:

"Недопустимая конфигурация действия. Имя-докер контейнера AWS ECS не существует"

Что такое имя Iдолжен иметь здесь?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Похоже, что вы используете Непрерывное развертывание с AWS CodePipeline .Начиная с Предпосылки , у вас должно быть определение задачи и служба, которая использует определение задачи.

Когда выполняется шаг ECS Deploy в CodePipeline, он ищетопределение задачи для указанной вами службы создает новое определение задачи, в котором он обновляет контейнер с тем же значением name, что и в вашем файле imagedefinition.json.

Так что из вашего примера я бы ожидал, что в определении задачи, связанном со службой ECS, которую обновляет ваш конвейер, будет контейнер с именем docker-image-name.

0 голосов
/ 06 октября 2018

Вы создали репозиторий ERC и загрузили на него изображение?Это может помочь, я видел это, которое похоже на часть того, чего вы пытаетесь достичь: https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml

...