Deployment example

This is an example TF stack demonstrating the principles described in this RFC.

Usage

Setup

You will need to create the stack and populate the ECR repositories.

# Create the stack
terraform apply

# Populates ECR repos with images
./deploy.sh

You should receive a list of the images in ECR:

{
    "imageIds": [
        {
            "imageDigest": "sha256:4fe8827f51a5e11bb83afa8227cbccb402df840d32c6b633b7ad079bc8144100",
            "imageTag": "prod"
        },
        {
            "imageDigest": "sha256:afe605d272837ce1732f390966166c2afff5391208ddd57de10942748694049d",
            "imageTag": "hash_2"
        },
        {
            "imageDigest": "sha256:4fe8827f51a5e11bb83afa8227cbccb402df840d32c6b633b7ad079bc8144100",
            "imageTag": "hash_1"
        }
    ]
}

You can see there are 2 images (notice the matching digests) under 3 tags. By default hash_1 is tagged prod.

Check the state

You can then run check.sh to view the current state of deployments.

This lists the image digests in use by the services current tasks, along with the digest currently tagged "prod".

$ ./check.sh
prod ENV_DIGEST: sha256:4fe8827f51a5e11bb83afa8227cbccb402df840d32c6b633b7ad079bc8144100

All TASK_DIGESTS will match the ENV_DIGEST when the deployment is complete.

TASK_DIGEST: sha256:4fe8827f51a5e11bb83afa8227cbccb402df840d32c6b633b7ad079bc8144100 (match)

Deploy

You can choose to deploy hash_2 as follows:

# Populates ECR repos with images
./deploy.sh hash_2

This will update the image tags so that hash_2 is tagged prod and a redeployment is forced.

Again you can check the status of the deployment by running check.sh.

If you check while the transition is occuring you may see both tasks available with the new image_id task replacing the old.

$ ./check.sh
prod ENV_DIGEST: sha256:afe605d272837ce1732f390966166c2afff5391208ddd57de10942748694049d

All TASK_DIGESTS will match the ENV_DIGEST when the deployment is complete.

TASK_DIGEST: sha256:afe605d272837ce1732f390966166c2afff5391208ddd57de10942748694049d (match)
TASK_DIGEST: sha256:4fe8827f51a5e11bb83afa8227cbccb402df840d32c6b633b7ad079bc8144100 (no_match)

Last updated