Digamos que tengo una máquina que quiero poder escribir en un determinado archivo de registro almacenado en un bucket de S3.
Entonces, la máquina necesita tener habilidades de escritura en ese depósito, pero no quiero que tenga la capacidad de sobrescribir o eliminar ningún archivo en ese depósito (incluido el que quiero que escriba).
Entonces, básicamente, quiero que mi máquina solo pueda agregar datos a ese archivo de registro, sin anularlo ni descargarlo.
¿Hay alguna forma de configurar mi S3 para que funcione así? Tal vez haya alguna política de IAM que pueda adjuntar para que funcione como quiero.
Respuestas:
Desafortunadamente, no puedes.
S3 no tiene una operación de "agregar". * Una vez que se ha cargado un objeto, no hay forma de modificarlo en su lugar; su única opción es cargar un nuevo objeto para reemplazarlo, que no cumple con sus requisitos.
*: Sí, sé que esta publicación tiene un par de años. Sin embargo, sigue siendo exacto.
fuente
Como dice la respuesta aceptada, no puede. La mejor solución que conozco es usar:
AWS Kinesis Firehose
https://aws.amazon.com/kinesis/firehose/
Su ejemplo de código parece complicado, pero el tuyo puede ser realmente simple. Continúa realizando operaciones PUT (o BATCH PUT) en un flujo de entrega de Kinesis Firehose en su aplicación (utilizando el AWS SDK) y configura el flujo de entrega de Kinesis Firehose para enviar sus datos transmitidos a un bucket de AWS S3 de su elección (en el Consola de AWS Kinesis Firehose).
Todavía no es tan conveniente como
>>
desde la línea de comandos de Linux, porque una vez que haya creado un archivo en S3, nuevamente tendrá que lidiar con descargar, agregar y cargar el nuevo archivo, pero solo tiene que hacerlo una vez por lote de líneas. que por cada línea de datos, por lo que no necesita preocuparse por los enormes cargos debido al volumen de operaciones de adición. Tal vez se pueda hacer, pero no veo cómo hacerlo desde la consola.fuente
Los objetos en S3 no se pueden agregar. Tienes 2 soluciones en este caso:
fuente
Como otros han dicho anteriormente, los objetos S3 no se pueden adjuntar.
Sin embargo, otra solución sería escribir en los registros de CloudWatch y luego exportar los registros que desee a S3 . Esto también evitaría que los atacantes que accedan a su servidor eliminen de su bucket de S3, ya que Lambda no requeriría ningún permiso de S3.
fuente
En caso de que alguien quiera agregar datos a un objeto con un servicio similar a S3, Alibaba Cloud OSS (Object Storage Service) lo admite de forma nativa .
fuente
Tuve un problema similar y esto es lo que había preguntado
cómo agregar datos en un archivo usando AWS Lambda
Esto es lo que se me ocurre para resolver el problema anterior:
Utilice getObject para recuperar del archivo existente
Escribir función para agregar en el archivo
¡¡Espero que esto ayude!!
fuente
writeToS3
función sobrescribirá un archivo, no lo agregará.