Trava contra exclusão e restauração
Dois mecanismos evitam que um recurso de produção desapareça por engano:
- a trava contra exclusão, que recusa a exclusão enquanto estiver ligada;
- a exclusão reversível (soft delete), que guarda bancos, buckets e projetos excluídos por alguns dias antes de apagar os dados de vez.
Trava contra exclusão
Projetos, ambientes, bancos de dados (PostgreSQL, MySQL, Redis, filas, busca e documentos), buckets e volumes têm a trava. Com ela ligada, a exclusão é recusada por qualquer origem: portal, API, CLI, MCP, OpenTofu, coda.yaml ou a restauração de uma revisão antiga do canvas. A API responde 409 com o código resource.deletion_protected.
A trava já vem ligada:
- nos ambientes protegidos (o ambiente
productionde todo projeto); - nos bancos, buckets e volumes criados num ambiente protegido.
Nos demais recursos ela começa desligada.
Onde ver e mudar
- Projeto e ambientes: em Configurações do projeto, seção Trava contra exclusão. Cada linha mostra o selo Protegido contra exclusão quando a trava está ligada.
- Bancos, buckets e volumes: o selo aparece no nó, no canvas e na lista do ambiente. A trava de um nó muda pela API (
PUT .../environments/{id}/nodes/{nodeId}/deletion-protection).
Ligar a trava exige o papel Admin do projeto. Desligar exige o papel Admin, a confirmação da sua identidade com o segundo fator (step-up) e um motivo, que fica registrado na auditoria (resource.deletion_protection_disabled). Um token de API com o escopo da rota (projects:write, environments:write ou apps:write) pode desligar a trava informando o motivo, como faz o provider OpenTofu.
# Ligar a trava de um ambiente
curl -X PUT -H "Authorization: Bearer $CODA_TOKEN" -H "Content-Type: application/json" \
-d '{"enabled": true}' \
"$CODA_API_URL/api/v1/orgs/$ORG/projects/$PROJECT/environments/$ENV/deletion-protection"
# Desligar (motivo obrigatório)
curl -X PUT -H "Authorization: Bearer $CODA_TOKEN" -H "Content-Type: application/json" \
-d '{"enabled": false, "reason": "encerramento do ambiente de testes"}' \
"$CODA_API_URL/api/v1/orgs/$ORG/projects/$PROJECT/environments/$ENV/deletion-protection"
No OpenTofu
O atributo deletion_protection do coda_project e do coda_environment é a trava da API: o tofu plan mostra a diferença quando alguém a muda pelo portal, e o tofu apply grava o valor declarado. Para remover um projeto protegido, defina deletion_protection = false, aplique e só então remova o bloco.
Excluídos recentemente
Bancos de dados, buckets e projetos excluídos não somem na hora. Eles ficam pendentes de exclusão (PENDING_DELETION) pelo prazo do plano, 7 dias por padrão (limite deletion.softDeleteDays, visto em Plano e uso). Durante o prazo:
- o recurso sai do canvas e as aplicações perdem o acesso a ele, mas os dados continuam guardados;
- só o armazenamento é cobrado (CPU e memória de um banco param de contar);
- o nome fica reservado no ambiente: criar outro recurso com o mesmo nome responde
409 resource.name_reserved; - o recurso aparece em Configurações do projeto › Excluídos recentemente, com a data do expurgo.
Restaurar (papel Admin do projeto) traz de volta o mesmo recurso, com os mesmos dados. Um banco ou bucket volta ao canvas já aplicado e pronto; as conexões com as aplicações precisam ser refeitas no canvas. Um projeto volta desativado; reative-o quando quiser.
Depois do prazo vem o expurgo: os dados são apagados de vez, junto com as credenciais e as chaves do recurso guardadas no cofre da organização. A partir daí, a restauração responde 404 e o nome volta a ficar livre.
Volumes não entram na exclusão reversível: ao excluir um volume com backup ligado, a plataforma guarda um backup final. Ambientes de preview de pull request também ficam de fora, porque os dados deles são descartáveis.
Excluir um projeto
Só o Owner da organização exclui um projeto, e só depois de desativá-lo. Em Configurações do projeto, seção Excluir projeto, digite o slug para confirmar; a ação também pede o segundo fator. O projeto fica restaurável pelo prazo do plano e o slug continua reservado até o expurgo, quando todos os recursos dos ambientes são apagados.
Se a trava do projeto estiver ligada, desligue-a antes.