Gerenciar repositorios de container no AWS ECR (Elastic Container Registry) pode rapidamente se tornar uma tarefa assustadora, especialmente a medida que sua infraestrutura cresce. Neste artigo, faremos uma analise aprofundada de um util script bash projetado para automatizar a aplicacao de politicas de ciclo de vida nos seus repositorios ECR. Este script nao apenas simplifica o gerenciamento de repositorios, mas tambem garante que apenas as imagens mais recentes sejam mantidas, ajudando voce a economizar custos de armazenamento e manter seu registro organizado.

O que Este Script Faz?

O objetivo principal deste script bash e automatizar o processo de aplicacao de uma politica de ciclo de vida que mantem apenas as tres imagens mais recentes em cada repositorio AWS ECR em uma regiao especificada. Aqui esta uma visao geral rapida de sua funcionalidade:

  • Tratamento de Erros: O script e configurado para sair imediatamente se qualquer comando retornar um status nao-zero, o que minimiza o risco de comportamento nao intencional.
  • Saida com Codigo de Cores: Usa codigos de cores ANSI para destacar mensagens (como avisos em vermelho), tornando a saida mais facil de interpretar.
  • Modo Dry-Run: Para um teste seguro e nao destrutivo, o script inclui uma opcao --dry-run que simula acoes sem realmente aplicar a politica.
  • Integracao com AWS CLI: Recupera nomes de repositorios usando a AWS CLI e depois itera sobre cada repositorio para verificar se existe uma politica de ciclo de vida antes de aplicar uma nova.

Desconstruindo o Script

1. Configurando o Ambiente

O script comeca aplicando tratamento de erro estrito com set -e e define codigos de cores ANSI para saida de terminal aprimorada. Isso garante que qualquer erro pare o script imediatamente, prevenindo operacoes nao intencionais.

#!/bin/bash
set -e
RED='\033[0;31m'
NC='\033[0m' # Sem Cor

2. Analisando Argumentos da Linha de Comando

Um loop simples processa argumentos de linha de comando para detectar se o script deve rodar em modo dry-run. Isso permite que os administradores testem o script sem fazer alteracoes reais.

DRY_RUN=false
while [[ "$#" -gt 0 ]]; do
    case $1 in
        --dry-run) DRY_RUN=true ;;
        *) echo "Parametro desconhecido: $1"; exit 1 ;;
    esac
    shift
done

3. Especificando a Regiao AWS e Recuperando Repositorios

O script e configurado para funcionar em uma regiao especifica (eu-central-1 por padrao). Ele recupera a lista de nomes de repositorios do AWS ECR usando a AWS CLI. Se nenhum repositorio for encontrado, ele sai com uma mensagem apropriada.

REGION="eu-central-1"
repos=$(aws ecr describe-repositories --region "$REGION" --query 'repositories[].repositoryName' --output text)
if [ -z "$repos" ]; then
    echo "Nenhum repositorio encontrado na regiao $REGION."
    exit 1
fi

4. Definindo a Politica de Ciclo de Vida

Um objeto JSON e definido dentro do script para especificar a politica de ciclo de vida. Esta politica e configurada para manter apenas as ultimas tres imagens, o que e ideal para muitos casos de uso onde manter as imagens mais recentes e suficiente.

lifecycle_policy='{
  "rules": [
    {
      "rulePriority": 1,
      "description": "Manter ultimas 3 imagens",
      "selection": {
        "tagStatus": "any",
        "countType": "imageCountMoreThan",
        "countNumber": 3
      },
      "action": {
        "type": "expire"
      }
    }
  ]
}'

5. Aplicando a Politica de Ciclo de Vida a Cada Repositorio

O script entao percorre cada repositorio. Verifica se ja existe uma politica de ciclo de vida. Se existir, o repositorio e ignorado e um aviso e mostrado em vermelho. Se nao, a politica de ciclo de vida e aplicada ou uma mensagem de dry-run e impressa se esse modo estiver ativado.

for repo in $repos; do
    echo "Processando repositorio: $repo"
    if aws ecr get-lifecycle-policy --repository-name "$repo" --region "$REGION" > /dev/null 2>&1; then
        echo -e "${RED}Politica de ciclo de vida ja existe para o repositorio $repo. Pulando...${NC}"
    else
        if [ "$DRY_RUN" = true ]; then
            echo "DRY RUN: Aplicaria politica de ciclo de vida ao repositorio: $repo"
            echo "DRY RUN: aws ecr put-lifecycle-policy --repository-name \"$repo\" --lifecycle-policy-text '$lifecycle_policy' --region \"$REGION\""
        else
            echo "Aplicando politica de ciclo de vida ao repositorio: $repo"
            aws ecr put-lifecycle-policy \
                --repository-name "$repo" \
                --lifecycle-policy-text "$lifecycle_policy" \
                --region "$REGION" | tee
        fi
    fi
done
echo "Processamento concluido."

Beneficios de Usar Este Script

Automacao e Eficiencia

Aplicar politicas de ciclo de vida manualmente em varios repositorios pode ser tedioso e propenso a erros. Este script automatiza o processo, garantindo a aplicacao consistente de politicas e liberando tempo valioso para sua equipe.

Gerenciamento de Custos

Ao manter apenas as imagens mais recentes, o script ajuda a gerenciar os custos de armazenamento. Imagens antigas e nao utilizadas sao removidas automaticamente, reduzindo gastos desnecessarios com armazenamento.

Testes Seguros com Modo Dry-Run

Antes de fazer alteracoes permanentes, voce pode executar o script no modo dry-run. Este recurso fornece uma visualizacao clara de quais acoes serao executadas, minimizando o risco de erros.

Personalizavel e Extensivel

O script pode ser facilmente modificado para atender as suas necessidades especificas, como alterar a politica de retencao ou segmentar diferentes regioes. Seu design modular permite adaptacoes rapidas a medida que seu ambiente AWS evolui.

Conclusao

Automatizar tarefas rotineiras e uma estrategia-chave para DevOps e administracao de sistemas eficientes. Este script bash para aplicar politicas de ciclo de vida a repositorios AWS ECR e um excelente exemplo de como automacao simples pode gerar beneficios operacionais significativos. Seja para reduzir custos, simplificar seu fluxo de trabalho ou aplicar uma politica consistente em seus repositorios, este script oferece uma solucao confiavel e personalizavel.

Implemente este script no seu ambiente AWS e experimente a facilidade da gestao automatizada de repositorios hoje mesmo!