Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Invalid task definition format: containerDefinitions section is not present or is not an array #193

Closed
sgript opened this issue Oct 17, 2022 · 2 comments

Comments

@sgript
Copy link

sgript commented Oct 17, 2022

Hey there,

I've been trying to get this GitHub action to work but have been running into issues. I've been programmatically been trying to retrieve the task definition using this command:
aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION }} > ecs/node/task_definition.json

Then using it for this action. But for some reason, it just isn't liking the containerDefinitions, which are returned in the JSON. I've verified the command does return correctly.

Here is our GitHub actions yaml:

steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: eu-west-1
      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1
      - name: Build and push
        uses: docker/build-push-action@v3
        with:
          push: true
          tags: ${{ steps.login-ecr.outputs.registry }}/${{ env.REPO_NAME }}-${{ env.ENVIRONMENT }}:${{ github.sha }}
          build-args: |
            COMMIT=${{ github.sha }}
            BRANCH=${{ github.ref_name }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
      - name: Send image version to SSM
        run: aws ssm put-parameter --name ${{ env.REPO_NAME }}-version-${{ env.ENVIRONMENT }} --value ${{ github.sha }} --overwrite
      - run: mkdir -p ecs/node
      - run: aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION }} > ecs/node/task_definition.json
      - uses: actions/upload-artifact@v3
        with:
          name: task-definition
          path: ecs/node/task_definition.json
      - uses: actions/download-artifact@v3
        with:
          name: task-definition
      - name: Display structure of downloaded files
        run: ls -R && cat ecs/node/task_definition.json # The file is present here <--------------
      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
        with:
          task-definition: ecs/node/task_definition.json # Issue arises here <--------------
          container-name: ${{ env.CONTAINER_NAME }}
          image: ${{ steps.login-ecr.outputs.registry }}/${{ env.REPO_NAME }}-${{ env.ENVIRONMENT }}:${{ github.sha }}
      - name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: ${{ env.ECS_SERVICE }}
          cluster: ${{ env.ECS_CLUSTER }}
          wait-for-service-stability: true

I was hoping someone could direct me on what may be wrong here, or if I'm doing this incorrectly. I would ideally like to stick to dynamically generating the task definition using the AWS CLI, as it is our separate Terraform repo that spins up the ECS infrastructure, hence why I opted for AWS CLI to grab the task definition in order to use this action.

@andiempettJISC
Copy link

Hi @sgript

take a look at your describe-task-definition run command step again. you need to make sure its a valid task definition as the raw aws-cli will output the task def with the key taskDefinition

so you can either do:

- run: aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION }} --query taskDefinition > ecs/node/task_definition.json

or

- run: aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION }} | jq '.taskDefinition' > ecs/node/task_definition.json

hope that helps.
-andy

@amazreech
Copy link
Contributor

Hi, closing this issue as it seems to have been answered. Please feel free to re-open or open a new issue if there are additional concerns. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants