ECR + AWS App Runner: Step by Step

1. Prerequisite

Make sure you have Docker Desktop installed.

Warning

The homebrew version ofdocker-compose requires virtualbox, and will not work on Apple Silicon computers.

Ensure aws-cli is installed and configured

brew install awscli
aws configure

You’ll need your account_key_id & secret_access_key from the AWS console.

Log docker client into AWS ECR with aws ecr get-login-password --region __region__ | docker login --username AWS --password-stdin __aws_account_id__.dkr.ecr.__region__.amazonaws.com

For example:

aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin xxxxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com

2. Set up ECR

Create your private repository for your project in the AWS console, and note down the repository_name.

3. Build Your Application

Build the Docker image.

docker build .

Use docker images to find the tag of the newly built image. Referred to as __IMAGE ID__ henceforth.

docker images

Tag the local Docker image with the ECR repository name & tags using: docker tag __IMAGE ID__ __aws_account_id__.dkr.ecr._region_.amazonaws.com/__repository_name__:__tag__

For example:

docker tag xxxxxxxxx xxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/the-app-that-will-blow-your-socks-off:0.0.11

4. Push Dockerised Application to ECR Repository

Push the images to ECR using docker push __repository__:__tag__

docker push xxxxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/the-app-that-will-blow-your-socks-off:0.0.11

Verify that the docker image is pushed to ECR from the AWS console

5. Run Application w/ App Runner

Head to the App Runner Console once the Docker image is up in ECR. Make sure you choose the same region as the ECR. You should be able to find the image from the dropdown if you have selected the same AWS region.

Following the Creating App Runner Service step-by-step guide.

Local Development with docker compose

docker compose --env-file ./.env.local up

Troubleshooting

AWS ECS/ECS exec /usr/local/bin/docker-entrypoint.sh: exec format error

If you build your docker image on an Apple M1/M2 machine, this error may occur. To fix the issue, use:

FROM --platform=linux/amd64 node:lts-alpine
 
# Insdead of the standard `FROM node:lts-alpine`

Private

-----BEGIN PGP MESSAGE-----

hQIOAxdwc3QWykEfEAgAjGjXJq30tjZAPrHjt4N3bEt2xXNQv14l5N3RSc2rGf8V
oFJ2Nrekm1cQmv219LDw8QtsBElyYw8xc4i5LUvzszc2tjHV+EBsbtk10gAseN++
sBAA1yxdytUISvzkj5PVcROKsY4Opu16hwoTO+JYvwUL9Z7m7MTubDgeU1Zna5Lf
xB+axolS4ydCpboIDNRAGlhn0lhFc57fOpjRcJ5zzvruxKdvbrunn1nXfArA3faW
ZdKKK21RJcq6Sr2D1Ca+0VbNZI0hhr/6xsZqKnEnR4ke9YJVhZPa8hOcQnDQUibb
KAsCZeVZitIZyseeWoHPFj3oiwUoGPQ41zmhsNG8ZQgAuFCY0XKAe6GMajj6uNzf
XRwmyU2w9ET2Qk74ZQJEcKmSTNTVg0sPWC3qBCBAyskGDtk5Fk20KwH+USog+J0c
mdOs/nOVWeX1XC9rRe2f0oCQ6pSO+0SIBFNXhHsnhBYNpyNVwKsNq6iuC5pBKGWp
mxtnLrMqoSf7MRbZmGE8GbVAfsjMVT87BY7Us/iJh1QFZ0vQot46587ff7uqyZef
0CR3sr20RlwFwqcwkG6icPx78UWMsbKdNvUdnAmXjTeZyYhMTH5lonJyiVyt433F
Eq7pLOsu3fdvVDmNKQkyBSiTYLM0aVmv8UwGYqLutUocVRcfFnpydqbI3cgc9fJM
WtLA6AFJZ1MpzwElijF5zDmQvVmyY7CtwVkUTO+fKQem77kwZHImkDnzPUnD+ZLs
9eeQsKqJOXgk0mDqgdfbXjpgR6A/TCA7CraNw/pllG92fDFesrc1Hr6yy39Y23jE
+d89mgNez9YwhCbv6+X3ajQ/DRv7bSqq60gHlvRRpsskFjreUELFsZseual4XDFB
u/A7chT57A8C/Q4PJaY3IBwrIQqXihZqDNSXMMFCvA2rsBsms5kmXxx3/+i2IVel
q/t+kHnEY1IWckwBGxF/qND1YiZI3w20Vwquj5AFZ9FBXsqRi6bKqunq3NrMtFN/
QNksECxvXDnWTuILB6McQPijC3prgZ4JBdE5q7v/EhE4sra0tUFH6eAjR4U8ZYBQ
M/6EHpsVRIg0IfrAPQUqZcUa3FA3OKzMsRvRqX+PP/nVXDbSZ/Q97bRI1qlNiPal
0cJc0WheYvWfei7iTeVCCedLypt/RW27XCILsAeKfKc/bsHlRIYr8OwJivm7Mxg4
Bp5WRfbxCXpbJ36REHEvfakD45xg95+9xGlUr69gICoT3kzEpBX8dHrelNA=
=Ep/b
-----END PGP MESSAGE-----