Digamos que eu tenha uma máquina que deseja que possa gravar em um determinado arquivo de log armazenado em um balde S3.
Portanto, a máquina precisa ter capacidade de gravação nesse intervalo, mas não quero que ela tenha a capacidade de sobrescrever ou excluir quaisquer arquivos nesse intervalo (incluindo aquele em que desejo gravar).
Então, basicamente, eu quero que minha máquina seja capaz de apenas anexar dados a esse arquivo de log, sem substituí-lo ou baixá-lo.
Existe uma maneira de configurar meu S3 para funcionar assim? Talvez haja alguma política IAM que eu possa anexar a ele para que funcione como eu desejo?
Respostas:
Infelizmente, você não pode.
S3 não tem uma operação "anexar". * Uma vez que um objeto foi carregado, não há como modificá-lo no local; sua única opção é enviar um novo objeto para substituí-lo, o que não atende aos seus requisitos.
*: Sim, eu sei que este post tem alguns anos. Ainda é preciso, no entanto.
fonte
Como afirma a resposta aceita, você não pode. A melhor solução que conheço é usar:
AWS Kinesis Firehose
https://aws.amazon.com/kinesis/firehose/
O exemplo de código deles parece complicado, mas o seu pode ser muito simples. Você continua realizando operações PUT (ou BATCH PUT) em um fluxo de entrega Kinesis Firehose em seu aplicativo (usando o AWS SDK) e configura o fluxo de entrega Kinesis Firehose para enviar seus dados transmitidos para um balde AWS S3 de sua escolha (no Console AWS Kinesis Firehose).
Ainda não é tão conveniente quanto
>>
na linha de comando do Linux, porque uma vez que você criou um arquivo no S3, você novamente tem que lidar com o download, anexar e enviar o novo arquivo, mas você só tem que fazer isso uma vez por lote de linhas. do que para cada linha de dados, então você não precisa se preocupar com cobranças enormes por causa do volume de operações de acréscimo. Talvez isso possa ser feito, mas não consigo ver como fazer no console.fonte
Os objetos no S3 não podem ser acrescentados. Você tem 2 soluções neste caso:
fonte
Como outros afirmaram anteriormente, os objetos S3 não podem ser acrescentados.
No entanto, outra solução seria gravar nos logs do CloudWatch e, em seguida, exportar os logs que deseja para o S3 . Isso também evitaria que qualquer invasor que acessar seu servidor excluísse de seu bucket S3, uma vez que o Lambda não exigiria nenhuma permissão S3.
fonte
Caso alguém queira anexar dados a um objeto com um serviço semelhante ao S3, o Alibaba Cloud OSS (Object Storage Service) oferece suporte nativo .
fonte
Tive um problema semelhante e foi isso que perguntei
como anexar dados no arquivo usando AWS Lambda
Aqui está o que eu proponho para resolver o problema acima:
Use getObject para recuperar do arquivo existente
Função de gravação para anexar ao arquivo
Espero esta ajuda !!
fonte
writeToS3
função substituirá um arquivo, não acrescentará a ele.