Развертывание AWS Fargate: недопустимая конфигурация действия Контейнер AWS ECS ***** не существует

Я использую 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 не существует»

Какое имя у меня здесь должно быть?


person edzillion    schedule 05.10.2018    source источник


Ответы (2)


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

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

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

person Jamie Starke    schedule 07.10.2018
comment
Благодарность! Я читал руководство, в котором использовалась часть этого кода, но не объяснялось его. Было намного лучше читать оригинал. У меня был другой name в task_definition.json, чем name, который я писал в imagedefinitions.json файл. - person edzillion; 08.10.2018
comment
Отлично, спасибо! - person Madhav Palshikar; 26.12.2020
comment
Это была моя проблема. Я назвал свое контейнерное приложение в TaskDefinition, но когда я создавал определение изображения, json-файл из CodeBuild, он использовал имя контейнера api, поскольку я копировал этот код из другого проекта. Спасибо друг - person Dalmiro Granas; 30.01.2021

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

person OpenBSDNinja    schedule 06.10.2018