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:
- Gerenciar armazenamento: Remover arquivos antigos ou temporários para reduzir custos
- Privacidade/LGPD: Deletar dados de usuários que solicitam remoção
- Limpeza automática: Remover arquivos processados ou obsoletos
- Gerenciar espaço: Manter bucket organizado removendo lixo
Como funciona internamente?
Quando o S3 DELETE é executado, o sistema:
- Recebe as credenciais AWS: Access Key ID, Secret Access Key e região
- Localiza o arquivo: Usa bucketName + key para encontrar
- Deleta o objeto: Remove permanentemente do S3
- Confirma remoção: Retorna sucesso
- 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
- Limpeza de arquivos temporários: Deletar uploads processados
- LGPD/Privacidade: Remover dados de usuários que solicitam
- Rotação de backups: Deletar backups antigos após período
- Gerenciar espaço: Remover arquivos duplicados ou obsoletos
- 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