Pular para o conteúdo principal

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 production de 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.