0

I am trying to deploy on ECS using AWS CodePipeline with AWS CodeDeploy and I see the following error message:

enter image description here

The buildspec.yml is

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
  build:
    commands:
      - mvn clean install
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - printf '[{"name":"totd-api","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imageDetail.json

artifacts:
  files:
    - imageDetail.json
    - appspec.yaml

and the appspec.yaml is

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:us-east-1:<accountID>:task-definition/<task>:<tag>"
        LoadBalancerInfo:
          ContainerName: "totd-api"
          ContainerPort: 80

I am confused by the misleading error message, thanks!

Federico
  • 157
  • 1
  • 5
  • 23

1 Answers1

1

Since you want to do blue/green deployment and use codepipeline, you have incorrect file definitions. From docs:

Amazon ECS standard deployments require an imagedefinitions.json file as an input to the deploy action.

Amazon ECS Blue/Green deployments require an imageDetail.json file as an input to the deploy action.

Also your appspec.yaml also needs to be different. Example from here:

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: <TASK_DEFINITION>
        LoadBalancerInfo:
          ContainerName: "sample-website"
          ContainerPort: 80

TASK_DEFINITION is important and must be in the file.

Community
  • 1
  • 1
Marcin
  • 215,873
  • 14
  • 235
  • 294
  • The task definition is already in place, but the imageDetail.json was a great hint, thanks! It keeps failing tho. – Federico May 16 '20 at 09:15
  • @Federico Failing why? New errors? If my answer was useful, accepting it would be appreciated. – Marcin May 16 '20 at 09:19
  • 1
    @Federico Can you update your question with new details and form of your files. Alternatively, can create new question. – Marcin May 16 '20 at 09:31