Pular para conteúdo

AWS S3 DELETE - Deletar Arquivo do S3

O que é este Node?

O AWS S3 DELETE é o node responsável por deletar permanentemente arquivos armazenados em buckets do Amazon S3.

Por que este Node existe?

Remover arquivos desnecessários do S3 é importante para gerenciar custos e privacidade. O S3 DELETE existe para:

  1. Gerenciar armazenamento: Remover arquivos antigos ou temporários para reduzir custos
  2. Privacidade/LGPD: Deletar dados de usuários que solicitam remoção
  3. Limpeza automática: Remover arquivos processados ou obsoletos
  4. Gerenciar espaço: Manter bucket organizado removendo lixo

Como funciona internamente?

Quando o S3 DELETE é executado, o sistema:

  1. Recebe as credenciais AWS: Access Key ID, Secret Access Key e região
  2. Localiza o arquivo: Usa bucketName + key para encontrar
  3. Deleta o objeto: Remove permanentemente do S3
  4. Confirma remoção: Retorna sucesso
  5. IMPORTANTE: Não há recuperação sem versionamento!

Código interno (aws-executors.service.ts:61-69):

case 'delete':
  await s3.deleteObject({
    Bucket: data.bucketName,
    Key: data.key,
  }).promise();
  return {
    success: true,
    message: 'Object deleted successfully',
  };

Quando você DEVE usar este Node?

Use S3 DELETE sempre que precisar remover arquivos do S3:

Casos de uso

  1. Limpeza de arquivos temporários: Deletar uploads processados
  2. LGPD/Privacidade: Remover dados de usuários que solicitam
  3. Rotação de backups: Deletar backups antigos após período
  4. Gerenciar espaço: Remover arquivos duplicados ou obsoletos
  5. Cancelamento de processo: Deletar arquivos de processos cancelados

Quando NÃO usar S3 DELETE

  • Arquivos importantes sem backup: Sempre faça backup antes
  • Arquivos versionados: Use DeleteMarker ao invés (preserva versões)
  • Dados regulatórios: Verifique política de retenção legal antes

Parâmetros Detalhados

accessKeyId (string, obrigatório)

O que é: Sua AWS Access Key ID (credencial de autenticação).

Onde conseguir: IAM Console → Users → Security credentials → Create access key

Flow completo para testar:

{
  "name": "Teste S3 Delete - Access Key",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "s3_1",
      "type": "aws_s3",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Deletar S3",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
          "secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
          "region": "us-east-1",
          "bucketName": "meu-bucket",
          "key": "temporario/arquivo.txt"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Arquivo deletado com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "s3_1" },
    { "source": "s3_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Substitua pelos seus dados reais da AWS. O arquivo será deletado permanentemente.

secretAccessKey (string, obrigatório)

O que é: Sua AWS Secret Access Key (senha da credencial).

Segurança: NUNCA exponha essa chave! Use variáveis de ambiente.

region (string, obrigatório)

O que é: Região AWS onde está o bucket S3.

Valores comuns: - us-east-1 (Norte da Virgínia) - us-west-2 (Oregon) - sa-east-1 (São Paulo) - eu-west-1 (Irlanda)

Flow completo para testar:

{
  "name": "Teste S3 Delete - Região",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "s3_1",
      "type": "aws_s3",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Deletar Brasil",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "sa-east-1",
          "bucketName": "bucket-brasil",
          "key": "temp/arquivo-processado.pdf"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "Arquivo removido da região São Paulo!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "s3_1" },
    { "source": "s3_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

bucketName (string, obrigatório)

O que é: Nome do bucket S3 onde o arquivo está armazenado.

Flow completo para testar:

{
  "name": "Teste S3 Delete - Bucket",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "s3_1",
      "type": "aws_s3",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Deletar",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "us-east-1",
          "bucketName": "uploads-temporarios",
          "key": "processados/relatorio-old.pdf"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Relatório antigo removido!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "s3_1" },
    { "source": "s3_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

key (string, obrigatório)

O que é: Caminho completo do arquivo a ser deletado.

ATENÇÃO: Esta operação é IRREVERSÍVEL (sem versionamento)!

Flow completo para testar:

{
  "name": "Teste S3 Delete - Key Dinâmica",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pedir ID",
        "parameters": {
          "message": "Digite o ID do documento a deletar:",
          "variable": "doc_id"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar?",
        "parameters": {
          "message": "ATENÇÃO: Deletar documento {{doc_id}}? Digite SIM para confirmar."
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar Confirmação",
        "parameters": {
          "message": "Aguardando...",
          "variable": "confirmacao"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Verificar SIM",
        "parameters": {
          "variable": "confirmacao",
          "operator": "equals",
          "value": "SIM"
        }
      }
    },
    {
      "id": "s3_1",
      "type": "aws_s3",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Deletar Documento",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "us-east-1",
          "bucketName": "documentos",
          "key": "uploads/doc-{{doc_id}}.pdf"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1300, "y": 50 },
      "data": {
        "label": "Deletado",
        "parameters": {
          "message": "Documento {{doc_id}} DELETADO com sucesso!"
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1100, "y": 150 },
      "data": {
        "label": "Cancelado",
        "parameters": {
          "message": "Operação cancelada. Documento NÃO foi deletado."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "input_2" },
    { "source": "input_2", "target": "condition_1" },
    { "source": "condition_1", "target": "s3_1", "label": "true" },
    { "source": "s3_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" },
    { "source": "condition_1", "target": "message_3", "label": "false" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Teste: Digite "123" → Pergunta confirmação → "SIM" deleta uploads/doc-123.pdf

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "delete"
accessKeyId string Sim AWS Access Key ID
secretAccessKey string Sim AWS Secret Access Key
region string Sim Região AWS (ex: us-east-1)
bucketName string Sim Nome do bucket S3
key string Sim Caminho do arquivo a deletar

Exemplo 1: LGPD - Deletar Dados do Usuário

Objetivo: Permitir usuário solicitar remoção de seus dados (LGPD).

JSON para Importar

{
  "name": "LGPD - Deletar Dados do Usuário",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Informar LGPD",
        "parameters": {
          "message": "Você tem o direito de solicitar a exclusão dos seus dados.\n\nATENÇÃO: Esta ação é IRREVERSÍVEL!\n\nDigite DELETAR MEUS DADOS para confirmar."
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Aguardar Confirmação",
        "parameters": {
          "message": "Aguardando confirmação...",
          "variable": "confirmacao_lgpd"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Verificar",
        "parameters": {
          "variable": "confirmacao_lgpd",
          "operator": "equals",
          "value": "DELETAR MEUS DADOS"
        }
      }
    },
    {
      "id": "s3_1",
      "type": "aws_s3",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Deletar RG",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "sa-east-1",
          "bucketName": "documentos-clientes",
          "key": "rg/{{phone}}.jpg"
        }
      }
    },
    {
      "id": "s3_2",
      "type": "aws_s3",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Deletar CPF",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "sa-east-1",
          "bucketName": "documentos-clientes",
          "key": "cpf/{{phone}}.jpg"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1300, "y": 50 },
      "data": {
        "label": "Confirmação LGPD",
        "parameters": {
          "message": "Seus dados foram DELETADOS permanentemente conforme solicitado (LGPD).\n\nNúmero de protocolo: {{phone}}-{{timestamp}}"
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Cancelado",
        "parameters": {
          "message": "Operação cancelada. Seus dados NÃO foram deletados."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "condition_1" },
    { "source": "condition_1", "target": "s3_1", "label": "true" },
    { "source": "s3_1", "target": "s3_2" },
    { "source": "s3_2", "target": "message_2" },
    { "source": "message_2", "target": "end_1" },
    { "source": "condition_1", "target": "message_3", "label": "false" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Você tem o direito de solicitar a exclusão dos seus dados...
Usuário: DELETAR MEUS DADOS
Sistema: Seus dados foram DELETADOS permanentemente conforme solicitado (LGPD).

Exemplo 2: Limpeza Automática de Temporários

Objetivo: Deletar arquivos temporários após processamento.

JSON para Importar

{
  "name": "Limpeza Automática - Arquivos Processados",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "s3_upload_1",
      "type": "aws_s3",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Upload Temp",
        "parameters": {
          "operation": "upload",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "us-east-1",
          "bucketName": "temp-processing",
          "key": "temp/arquivo-{{phone}}.txt",
          "content": "RGFkb3MgdGVtcG9yw6FyaW9z",
          "contentType": "text/plain"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Processar",
        "parameters": {
          "message": "Processando arquivo temporário..."
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar Processo",
        "parameters": {
          "duration": 5000
        }
      }
    },
    {
      "id": "s3_delete_1",
      "type": "aws_s3",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Limpar Temp",
        "parameters": {
          "operation": "delete",
          "accessKeyId": "SUA_ACCESS_KEY",
          "secretAccessKey": "SUA_SECRET_KEY",
          "region": "us-east-1",
          "bucketName": "temp-processing",
          "key": "temp/arquivo-{{phone}}.txt"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Concluído",
        "parameters": {
          "message": "Processamento concluído! Arquivo temporário removido."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "s3_upload_1" },
    { "source": "s3_upload_1", "target": "message_1" },
    { "source": "message_1", "target": "delay_1" },
    { "source": "delay_1", "target": "s3_delete_1" },
    { "source": "s3_delete_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Processando arquivo temporário...
[aguarda 5 segundos]
Sistema: Processamento concluído! Arquivo temporário removido.

Resposta do Node

{
  "success": true,
  "message": "Object deleted successfully"
}

Configuração AWS

Permissões IAM Necessárias

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::seu-bucket/*"
    }
  ]
}

Boas Práticas

Segurança

SIM: - SEMPRE peça confirmação antes de deletar - Use IAM roles com permissões mínimas - Ative versionamento no bucket (permite recuperação) - Log todas as deleções para auditoria - Implemente double-check para dados críticos

NÃO: - Nunca delete sem confirmação do usuário - Não delete arquivos sem verificar existência - Não use DeleteObject em buckets sem versionamento para dados críticos - Não compartilhe Access Keys com permissão de delete

LGPD/Privacidade

SIM: - Documente todas as deleções (protocolo) - Permita usuários deletarem seus dados - Mantenha log de solicitações de exclusão - Confirme exclusão com número de protocolo

NÃO: - Não ignore solicitações de exclusão de dados - Não mantenha dados após solicitação de remoção

Performance

SIM: - Para múltiplos arquivos, use DeleteObjects (batch) - Considere lifecycle policies para automação - Use S3 Events para trigger de limpeza

NÃO: - Não faça deleção sequencial de milhares de arquivos (use batch)

Recuperação

SIM: - SEMPRE ative versionamento em buckets importantes - Faça backup antes de deleções em massa - Use MFA Delete para proteção extra - Configure replicação cross-region para dados críticos

Dicas

Versionamento: Com versionamento ativo, DeleteObject cria um "delete marker" mas preserva versões antigas.

Recuperação: Sem versionamento, deleção é PERMANENTE. Não há recuperação!

MFA Delete: Configure para exigir autenticação de dois fatores em deleções.

Lifecycle: Use S3 Lifecycle policies para deletar automaticamente após X dias.

Audit: Use CloudTrail para registrar todas as operações de deleção.

Batch Delete: Para deletar múltiplos arquivos, use DeleteObjects (suporta até 1000 por vez).

Próximo Node

S3 UPLOAD - Enviar arquivo para S3 → S3 DOWNLOAD - Baixar arquivo do S3 → S3 LIST - Listar objetos no bucket