“Error: Task definition file does not exist: ” when deploying Docker images to AWS ECS
Closed this issue · 9 comments
I am trying to push docker images from GitHub Actions to AWS ECR then to ECS with a task to deploy the latest container in AWS ECS.
I am using the default aws.config file with changes only for AWS ECR repository name, AWS ECS cluster name and it's service name and docker image details to push docker images to AWS ECR to which could then to deployed as containers to AWS ECS by defining tasks. And I got an error message with defining tasks to deploy to ECS(in the section "Fill in the new image ID in the Amazon ECS task definition" in aws.yml) and it is:
Error: Task definition file does not exist: ecs-task-definition.json
Some information to prove everything is in place(presumably):
Here's me checking the existence of file and pushing the task from my terminal to AWS ECS:
And here's that very task definition with the revision number and task's family name shown in screenshot above:
So, as you can see task-definition file does exist, but GitHub doesn't recognise it. What has caused this error and how do I fix this?
Here's the complete build screenshot:
And here's the part of my ".github/workflows/aws.yml" in my repo for task definition (file can be found here in my repository)
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: ecs-task-definition.json
container-name: aws-dock-p-cont
image: ${{ steps.build-image.outputs.image }}
Images are being pushed to my ECR repository without any problems, but the problem comes right before executing tasks to use those images and deploy as containers.
EDIT:
Here's the cluster I have used in aws.yml file:
Here's the role I have specified in the task json file:
I have done as described in this article.
I hadn't uploaded the task defintion file to my github repo with the thought that the GitHub will pull it from my AWS account.
for anyone else finding this, it turns out task-definition:
does not obey working_directory
, so the relative path needs to be from the root of your repo
my task-defintion.json file is directly under repo. How should I specify the path?
my task-defintion.json file is directly under repo. How should I specify the path?
In that case, path should be ./task-defintion.json
In my case, I had forgotten to run the checkout step.
Please anyone can help, failing at the same step as mentioned above. and i have my
and my github is https://github.com/JohnQ1981/teachermonsters
env:
AWS_REGION: us-east-2
ECR_REPOSITORY: mfedockertest
ECS_SERVICE: mfedockertest-service
ECS_CLUSTER: mfedockertest-cluster
ECS_TASK_DEFINITION: ./task-definition.json
CONTAINER_NAME: mfedockertest-task-definition
AWS_DEFAULT_REGION: us-east-2
AWS_ACCESS_KEY_ID: ***
AWS_SECRET_ACCESS_KEY: ***
Error: Task definition file does not exist: ./task-definition.json
Please anyone can help, failing at the same step as mentioned above. and i have my
and my github is https://github.com/JohnQ1981/teachermonsters
env: AWS_REGION: us-east-2 ECR_REPOSITORY: mfedockertest ECS_SERVICE: mfedockertest-service ECS_CLUSTER: mfedockertest-cluster ECS_TASK_DEFINITION: ./task-definition.json CONTAINER_NAME: mfedockertest-task-definition AWS_DEFAULT_REGION: us-east-2 AWS_ACCESS_KEY_ID: *** AWS_SECRET_ACCESS_KEY: *** Error: Task definition file does not exist: ./task-definition.json
because your file is .yml but your path says .json
I faced the same issue, then I figured out that I need to download the task definition first then update it with the new container image. that solved the issue and I was able to deploy to ECS.
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition ${{ vars.MY_ECS_TASK_DEFINITION }} \
--query taskDefinition > task-definition.json
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ vars.MY_CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
for anyone else finding this, it turns out
task-definition:
does not obeyworking_directory
, so the relative path needs to be from the root of your repo
Continuing on @chorsnell answer, I changed task-definition.json
to ./server/task-definition.json
you can change server
to your-subdirectory-name
Turns out to be working.
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: ./server/task-definition.json
container-name: ${{ vars.MY_CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}```