How to deploy a container image from Gitlab to AWS Fargate – the important bits
Jumping straight into it. On GitLab I assume you already have your dockerized application and a basic .gitlab-ci.yaml
file.
We’re gonna want to build that image and push it to AWS ECR (Amazon Elastic Container Registry). In your gitlab ci file insert the following.
aws-deploy:
image: docker:latest
stage: build
services:
- docker:dind
script:
- apk update && apk -Uuv add python py-pip &&
pip install awscli && apk --purge -v del py-pip &&
rm /var/cache/apk/*
- $(aws ecr get-login --no-include-email --region us-east-1)
- docker build --pull -t "$AWS_REGISTRY_IMAGE:dev" .
- docker push "$AWS_REGISTRY_IMAGE:dev"
only:
- master
You’re gonna need to set a build-time environment variable called AWS_REGISTRY_IMAGE
with the URI of your ECR repository.
Great! We’re halfway there. Do a sample push and verify that your image ends up in ECR
Now we want to deploy to Fargate on every push so… assuming once again you already got your ECS cluster setup. We want to use a CodePipeline to detect pushes & deploy them to ECS.
Under AWS CodePipeline start a new pipeline, Source is Amazon ECR select the appropriate image and tags and stuff. Next
ok here’s the tricky part, to deploy to Fargate we need to add an imagedefinitions.json artifact to our image, this can be done automatically in the build step so.
Build Provider > AWS Codebuild
Create a new project
Environment Image > Managed Image
Operating System > Ubuntu
Runtime > Standard
Down to the Buildspec section, select ‘Insert Build Commands’
Then click ‘Switch to editor and enter the following
version: 0.2
phases:
install:
runtime-versions:
python: 3.8
post_build:
commands:
- printf '[{"name":"my-fargate-container-name","imageUri":"%s"}]' MYAWSID.dkr.ecr.us-east-1.amazonaws.com/MYIMAGENAME:dev > imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
Finally Save, continue pipeline creation.. in the Deploy stage select the correct Fargate Cluster/service and DONE.
If you did all of that right, the next time you push to your master branch; it’ll automatically get built and deployed to Fargate!!
Recent Comments