Este projeto contém um script de automação em Bash para provisionar uma infraestrutura de entrega de conteúdo (CDN) utilizando Amazon CloudFront e Amazon S3.
Autor: José Anderson da Silva Costa | Github: DessimA
Referência Heberton Geovane | Guia: Notion
O script setup_lab.sh realiza as seguintes operações de forma automatizada e idempotente:
- S3 Bucket Provisioning: Cria um bucket único (baseado no Account ID) e configura permissões públicas (ACLs).
- Asset Management: Verifica/Baixa uma imagem de teste e realiza o upload para o S3.
- CloudFront Distribution:
- Verifica se já existe uma distribuição apontando para o bucket.
- Cria uma nova distribuição caso não exista.
- Reutiliza a existente para evitar duplicidade e custos.
- Cache Invalidation: Força a limpeza do cache nas Edge Locations para garantir que a imagem mais recente seja servida.
- Client Generation: Gera um arquivo
index.htmllocal configurado dinamicamente com a URL da CDN.
O script trata especificidades do ambiente Windows/MinGW:
- Path Conversion Fix: Utiliza a flag
MSYS_NO_PATHCONV=1no comando de invalidação. Isso impede que o Git Bash converta caminhos absolutos do Linux (ex:/image.png) para caminhos do Windows (ex:C:/Program Files/...), o que causaria erro na API da AWS.
- O script verifica a existência de recursos (Buckets, Distribuições) antes de tentar criá-los.
- Utiliza queries JMESPath otimizadas (
[Id, DomainName]) para garantir a extração correta de variáveis, independente da formatação de saída da AWS CLI.
- AWS CLI v2 instalado e configurado (
aws configure). - Ambiente Bash (Linux, macOS ou Git Bash no Windows).
- Permissões de usuário AWS para S3 e CloudFront.
- Clone este repositório ou baixe o script.
- Dê permissão de execução:
chmod +x setup_lab.sh
- Execute o script:
./setup_lab.sh
- Ao final, abra o arquivo gerado
index.htmlno seu navegador para validar a entrega via CDN.
Para remover os recursos criados e evitar custos:
- Exclua o bucket S3 e seus objetos.
- Desabilite a distribuição CloudFront.
- Exclua a distribuição após o status mudar para "Disabled".
Desenvolvido como parte de estudos práticos em Engenharia de Nuvem AWS.