Esta pasta contém a definição do ambiente de desenvolvimento usado em todos os laboratórios da disciplina Cloud Engineering. A ideia é simples: qualquer aluno, em qualquer máquina, consegue abrir um ambiente idêntico ao do professor em segundos — sem instalar nada localmente.
Tip
Se você é aluno e só quer começar os laboratórios, vá direto para o setup da aula 01. Este README é para quem quer entender como o ambiente é construído.
Um Dev Container é uma especificação do projeto Development Containers que descreve, em um arquivo JSON, todo o ambiente necessário para desenvolver um projeto: sistema operacional base, ferramentas instaladas, extensões do editor, variáveis de ambiente e scripts de inicialização.
Esse mesmo arquivo é consumido por:
- GitHub Codespaces — ambiente cloud usado na disciplina
- VS Code Remote - Containers — para rodar localmente em Docker
- JetBrains Gateway e outras IDEs compatíveis
Ou seja: um único arquivo garante reprodutibilidade total do ambiente em qualquer plataforma que suporte a spec.
Durante a disciplina você vai executar comandos da AWS CLI, rodar scripts Python, executar Terraform, usar Serverless Framework e interagir com vários serviços AWS. Sem um ambiente padronizado, teríamos:
- versões diferentes de cada ferramenta por aluno
- problemas de permissão e dependências no Windows/macOS/Linux
- tempo de aula perdido com "no meu computador não funciona"
Com o Dev Container desta pasta, todos os alunos recebem:
- ✅ Ubuntu como base
- ✅ Python 3, AWS CLI, Terraform, Node LTS, Git e Docker-in-Docker
- ✅ Serverless Framework v3 pré-instalado
- ✅ Extensões essenciais do VS Code já instaladas
- ✅ Região AWS
us-east-1configurada por padrão
| Arquivo | Função |
|---|---|
devcontainer.json |
Manifesto principal. Define a imagem base, features instaladas, extensões do VS Code e o comando pós-criação. |
script.sh |
Script executado automaticamente após a criação do container. Instala o Serverless Framework e copia a config padrão da AWS. |
config |
Arquivo de configuração padrão da AWS CLI (região us-east-1, output json). Copiado para ~/.aws/config pelo script.sh. |
Abaixo, cada bloco da configuração e o porquê dele estar ali.
"name": "FIAP Lab",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu"O name é o rótulo que aparece na tela de criação do Codespaces (você seleciona FIAP Lab como Dev container configuration). A image é a imagem oficial do Microsoft com Ubuntu enxuto, otimizada para ser ponto de partida de Dev Containers.
"features": {
"ghcr.io/devcontainers/features/python:1": { "version": "3" },
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/aws-cli:1": {},
"ghcr.io/devcontainers/features/terraform:1": {},
"ghcr.io/devcontainers/features/node:1": { "version": "lts" },
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
}Features são pacotes reutilizáveis publicados no registry ghcr.io/devcontainers. Cada um adiciona uma ferramenta configurada corretamente na imagem, sem precisar escrever Dockerfile. Aqui instalamos:
- Python 3 — para scripts Python e notebooks
- Git — versionamento
- AWS CLI — interação com todos os serviços AWS dos laboratórios
- Terraform — provisionamento de infraestrutura
- Node LTS — necessário para o Serverless Framework
- Docker-in-Docker — permite rodar containers dentro do Codespaces (útil em labs futuros)
Note
A sintaxe feature:1 é versionamento por major. Você recebe a última versão estável do major 1 da feature. Isso evita quebras de versão mantendo compatibilidade com correções recentes.
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"aws-scripting-guy.cform",
"hashicorp.terraform",
"github.copilot",
"redhat.vscode-yaml",
"fradolph.serverless-snippets"
]
}
}Assim que o Codespaces sobe, o VS Code já vem com as extensões essenciais: Python, CloudFormation, Terraform, Copilot, YAML e snippets do Serverless. Não é preciso instalar nada manualmente.
"postCreateCommand": "chmod +x /workspaces/fiap-cloud-engineering/.devcontainer/script.sh && bash /workspaces/fiap-cloud-engineering/.devcontainer/script.sh"Depois que o container é criado, o postCreateCommand é executado uma única vez. Ele dá permissão de execução ao script.sh e o roda. É nesse momento que o Serverless Framework é instalado e o ~/.aws/config é preparado.
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
}Garante que o terminal integrado do VS Code use bash por padrão — importante porque os comandos dos laboratórios assumem sintaxe bash.
#!/bin/bash
set -eux
sudo apt-get update -y
npm i serverless@3.39.0 -g
mkdir -p ~/.aws/
cp /workspaces/fiap-cloud-engineering/.devcontainer/config ~/.aws/configPasso a passo:
set -eux— falha rápido se qualquer comando der erro (-e), trata variáveis não definidas como erro (-u) e mostra cada comando antes de executar (-x). Boa prática em scripts de provisionamento.apt-get update— atualiza os índices de pacotes do Ubuntu.npm i serverless@3.39.0 -g— instala globalmente o Serverless Framework v3 (v4 mudou o modelo de licenciamento, por isso fixamos v3).mkdir -p ~/.aws/— garante que a pasta exista.cp .../config ~/.aws/config— copia a configuração padrão de região/output para o perfil default da AWS CLI.
Important
O script.sh não copia credenciais. Isso é intencional — credenciais são individuais por aluno e saem do AWS Academy. O aluno precisa colar o ~/.aws/credentials manualmente a cada sessão. Veja o setup da aula 01 para o passo a passo.
Fluxo resumido:
1. Aluno clica em "New codespace" no repositório
│
▼
2. GitHub lê este .devcontainer/devcontainer.json
│
▼
3. Instancia a imagem base Ubuntu
│
▼
4. Aplica as features (Python, AWS CLI, Terraform, Node, Docker)
│
▼
5. Instala as extensões do VS Code listadas
│
▼
6. Executa o postCreateCommand → script.sh
│
▼
7. Codespaces pronto, com terminal bash aberto em /workspaces/...
Todo esse processo leva alguns minutos na primeira criação. Nas próximas vezes que você iniciar (não recriar) o Codespaces, o ambiente já estará pronto em segundos — as features e extensões ficam persistidas no container.
Se precisar adicionar uma ferramenta ou extensão para todos os alunos, siga este fluxo:
- Edite o
devcontainer.jsonadicionando a feature ou extensão desejada.- Para ferramentas novas, consulte o catálogo oficial em containers.dev/features.
- Para extensões, copie o ID exato do marketplace do VS Code.
- Se precisar de lógica adicional na inicialização, ajuste o
script.sh. - Faça commit e push da alteração.
- Os alunos precisam recriar o Codespaces (ou usar
Codespaces: Rebuild Containervia Command Palette) para que as mudanças sejam aplicadas.
Warning
Mudanças no devcontainer.json não são aplicadas automaticamente em Codespaces já existentes. Sempre avise os alunos para recriarem o ambiente após atualizações significativas.
Para quem preferir rodar em Docker local em vez do Codespaces:
- Instale Docker Desktop e a extensão Dev Containers do VS Code.
- Clone o repositório.
- Abra a pasta no VS Code e selecione
Reopen in Containerna notificação que aparece (ou useF1 → Dev Containers: Reopen in Container). - O VS Code executa o mesmo fluxo do Codespaces, só que localmente.
Tip
A recomendação da disciplina é usar o Codespaces. Ele elimina variáveis de instalação local e oferece 120h mensais gratuitas em contas GitHub pessoais, mais que suficiente para a disciplina — desde que você pare o ambiente ao final de cada aula.