AWS ECR
Introduction
The AWS Elastic Container Registry (ECR) is a hosted docker repository that requires extra configuration for day-to-day use. This configuration is not typical of other repositories, and there are some considerations to account for when using it with Earthly. This guide will walk you through creating an Earthfile, building an image, and pushing it to ECR.
This guide assumes you have already installed the AWS CLI, and created a new repository named hello-earthly.
Create an Earthfile
No special considerations are needed in the Earthfile itself. You can use SAVE IMAGE
just like any other repository.
Install and Configure the ECR Credential Helper
ECR does not issue permanent credentials. Instead, it relies on your AWS credentials to issue docker credentials. You can follow instructions to log in with generated credentials, but the process will need to be repeated every 12 hours. In practice, this often means lots of glue code in your CI pipeline to keep credentials up to date.
AWS has released a credential helper to ease logging into ECR. It may be that you already have the credential helper installed, since it has been included with Docker Desktop as of version 2.4.0.0. If not, you can follow installation instructions on their GitHub repository here. Here is a sample .docker/config.json
to enable the usage of this helper:
IAM
Ensure that you have correct permissions to push the images. The ECR helper is aware of the AWS_PROFILE
variable; and can work under an assumed role. Here is a minimum set of privileges needed to push to ECR from Earthly:
Additional examples for policy configuration.
Run the Target
With the helper installed, no special To build and push an image, simply execute the build target. Don't forget the --push
flag!
Pulling Images
Using this credential helper; you can also pull images without any special handling in an Earthfile:
And here is how you would run it:
Troubleshooting
Basic Credentials Not Found
If you get a message saying basic credentials not found
; your distribution may not have the most recent version installed. A simple workaround is to simply prepend AWS_SDK_LOAD_CONFIG=true
to your Earthly invocation. This will force the helper to use the SDK over built-in config when executing. You can track this issue.
401 Unauthorized
Double-check your AWS credentials, to ensure you have the correct ones set up. aws configure
can help you do this. Also, check IAM to ensure you have the correct permissions (see the IAM section above). Finally, if you use IAM assumed roles, ensure that you have assumed the correct role in your terminal session.
If these are in order, the same fix from Basic Credentials Not Found may help.
If you are using a pull-through-cache, the ECR credential helper may cause 401 failures when fetching metadata from the mirrored registry. You can solve this by manually logging in, instead of using the credential helper. Here is an example of logging in manually:
Last updated