The Atlassian Community Forums are currently in read-only mode. We will be relaunching on a new platform on September 22 (read more here). We apologize for the extended downtime. For concerns or questions, please email communitymanagers@atlassian.com. See you on the other side, on the new Atlassian Community Forums! :)

×

Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Deploying to AWS ECS

Eric Wein
Contributor
September 30, 2019

I'm in the process of setting up a CD pipeline to deploy my Bitbucket repo to AWS ECS (fargate). I haven't been able to find many up to date tutorials on how to do this. I found the documentation for "How to deploy to ECS using Pipes" (https://confluence.atlassian.com/bitbucket/deploy-to-amazon-ecs-892623902.html) however its a bit unclear. I have added the example script:

- pipe: atlassian/aws-ecs-deploy:1.0.0
  variables:
    AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
    AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
    CLUSTER_NAME: 'aws-ecs-deploy-example'
    SERVICE_NAME: 'aws-ecs-deploy-example-service'
    TASK_DEFINITION: 'taskDefinition.json'

however the build fails saying it can't find the task definition json in the repo. Could I get some more defined steps on how to get this working with AWS ECS (fargate, ECR et..)

Thanks

14 answers

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

1 vote
Mark Milan
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
May 6, 2020

@VictorUsoro 

Try adding on the top of your pipeline

image: 

name: atlassian/default-image:2
1 vote
VictorUsoro
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
April 13, 2020

The build fails at this step, it says envsubst not found

1 vote
Alexander Zhukov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
December 23, 2019

@Mazen El-Kashef you have to replace it with the real image name before executing the pipe. For example, you can use the envsubst tool. Here is an example 

envsubst < task-definition-template.json > task-definition.json
This will replace the "${IMAGE_NAME}" value in your task definition with the corresponding environment variable. Here is a link to the complete example: https://bitbucket.org/bitbucketpipelines/example-aws-ecs-deploy/src/master/bitbucket-pipelines.yml
1 vote
Eric Wein
Contributor
October 5, 2019

@Alexander Zhukov I'm getting "Container 'docker' exceeded memory limit." errors when trying to run my react app in production mode. I have tried to increase the memory for the docker build step by setting size: 2x but the error is still occurring. My app does not have any super large dependencies just the pretty standard react dependencies. Here is the step that is breaking.

- step:
name: Build Docker Image
services:
- docker
image: atlassian/pipelines-awscli
size: 2x # Double resources available for this step.
script:
- echo $(aws ecr get-login --no-include-email --region us-west-2) > login.sh

- sh login.sh

- docker build -t my-image-name --build-arg NPM_TOKEN=${NPM_TOKEN} .

- docker tag my-image-name:latest 231231231.dkr.ecr.us-west-2.amazonaws.com/my-image-name:latest

- docker push 231231231.dkr.ecr.us-west-2.amazonaws.com/my-image-name:latest

 

1 vote
Eric Wein
Contributor
October 2, 2019

I got it working, I decided to not use the pipe and just use the manual docker commands.

0 votes
Ignacio Mendizabal
July 6, 2020

Any solution to this? I'm experiencing the same issue... 

0 votes
Omri
April 14, 2020

@Alexander Zhukov 

Hi, I am using this example and it all works for me.

However, I need to fill out the port mapping (e.g. 8080)

      "portMappings": [        {          "hostPort": "${PORT}",          "protocol""tcp",          "containerPort": "${PORT}"        }      ],

It fails because PORT should be a number and not a string, removing the quotes makes it invalid JSON file.

What do you suggest?

0 votes
Mazen El-Kashef
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
December 23, 2019

@Alexander Zhukov I was wondering how would this work? "image": "${IMAGE_NAME}", in my definition I need to add environment variables and I definitely don't want them to be in my repository, at the same time "image": "${IMAGE_NAME}" resolves resolves to a string, and would that be evaluated at the pipeline or at AWS (it doesn't make sense to be evaluated in AWS but just wondering)?

0 votes
Alexander Zhukov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
October 4, 2019

@Diônitas Mendes dos Santos you don't need to add the 

$AWS_ECR_REPO_URL

 before the /my-image-name. The pipe adds this URL for you, so when you add it to the pipe parameter, it basically becomes

<AWS_ECR_REPO_URL>/<AWS_ECR_REPO_URL>/my-image-name

Docker interprets the second part (after the first slash) as an image name, instead of repository/image_name, that's why there is an error.  

 

Here is an example:

- pipe: atlassian/aws-ecr-push-image:0.1.3
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
IMAGE_NAME: my-image-name
0 votes
Diônitas Mendes dos Santos
Contributor
October 4, 2019

@Alexander Zhukov,  do you have any idea of the reason why the erro bellow happens?

Docker push error: name unknown: The repository with name 'repositoryy_name/image_name' does not exist in the registry with id 'repository_id'

I am using the same setup of Eric.

0 votes
Eric Wein
Contributor
October 2, 2019

Ok perfect, do I also need a Dockerfile to boot the Node service after it is deployed or can I do it in the bitbucket-pipelines.yml under a script? Also for the ecr-push pipe what should be the value for IMAGE_NAME? Is that the ECR repo url? I'm getting a `Docker push error: name unknown` error when I do the following:


- step:
name: Build and push image to ECR
services:
- docker
script:
# build the image
- docker build -t $AWS_ECR_REPO_URL/my-image-name .

# use the pipe to push the image to AWS ECR
- pipe: atlassian/aws-ecr-push-image:0.1.3
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
IMAGE_NAME: $AWS_ECR_REPO_URL/my-image-name

 

0 votes
Alexander Zhukov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
October 2, 2019

This doesn't matter, you can use dockerhub, AWS ECR or some other container registry of your choice. Also, there is a pipe for pushing images to AWS ECR as well https://bitbucket.org/atlassian/aws-ecr-push-image/

0 votes
Eric Wein
Contributor
October 2, 2019

Great thanks. I noticed in the example you are using docker hub. I'm using AWS ECR so do I need to push the image there instead of docker hub? 

0 votes
Alexander Zhukov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
October 2, 2019

Hi @Eric Wein ! You have to create the task definition file in your repository and commit it. Use the name of this file as a TASK_DEFINITION. Here is a working example of deploying a simple application https://bitbucket.org/bitbucketpipelines/example-aws-ecs-deploy/src/master/.

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

TAGS
AUG Leaders

Atlassian Community Events