Disons que j'ai une machine que je souhaite pouvoir écrire dans un certain fichier journal stocké sur un compartiment S3.
Donc, la machine doit avoir des capacités d'écriture dans ce compartiment, mais je ne veux pas qu'elle ait la capacité d'écraser ou de supprimer les fichiers de ce compartiment (y compris celui sur lequel je veux écrire).
Donc, fondamentalement, je veux que ma machine puisse uniquement ajouter des données à ce fichier journal, sans le remplacer ni le télécharger.
Existe-t-il un moyen de configurer mon S3 pour qu'il fonctionne comme ça? Peut-être y a-t-il une politique IAM que je peux y attacher pour qu'elle fonctionne comme je le souhaite?
Réponses:
Malheureusement, vous ne pouvez pas.
S3 n'a pas d'opération "append". * Une fois qu'un objet a été téléchargé, il n'y a aucun moyen de le modifier en place; votre seule option est de télécharger un nouvel objet pour le remplacer, ce qui ne répond pas à vos exigences.
*: Oui, je sais que ce post date de quelques années. C'est toujours exact, cependant.
la source
Comme l'indique la réponse acceptée, vous ne pouvez pas. La meilleure solution que je connaisse est d'utiliser:
AWS Kinesis Firehose
https://aws.amazon.com/kinesis/firehose/
Leur exemple de code semble compliqué, mais le vôtre peut être très simple. Vous continuez à effectuer des opérations PUT (ou BATCH PUT) sur un flux de livraison Kinesis Firehose dans votre application (à l'aide du kit AWS SDK), et vous configurez le flux de livraison Kinesis Firehose pour envoyer vos données en streaming vers un compartiment AWS S3 de votre choix (dans le Console AWS Kinesis Firehose).
Ce n'est toujours pas aussi pratique que
>>
depuis la ligne de commande Linux, car une fois que vous avez créé un fichier sur S3, vous devez à nouveau gérer le téléchargement, l'ajout et le téléchargement du nouveau fichier, mais vous ne devez le faire qu'une fois par lot de lignes. que pour chaque ligne de données, vous n'avez donc pas à vous soucier des frais énormes en raison du volume des opérations d'ajout. Peut-être que cela peut être fait mais je ne vois pas comment le faire à partir de la console.la source
Les objets sur S3 ne peuvent pas être ajoutés. Vous avez 2 solutions dans ce cas:
la source
Comme d'autres l'ont indiqué précédemment, les objets S3 ne peuvent pas être ajoutés.
Cependant, une autre solution serait d'écrire dans les journaux CloudWatch, puis d' exporter les journaux que vous souhaitez vers S3 . Cela empêcherait également les attaquants qui accèdent à votre serveur de supprimer de votre compartiment S3, car Lambda ne nécessiterait aucune autorisation S3.
la source
Au cas où quelqu'un souhaiterait ajouter des données à un objet avec un service de type S3, Alibaba Cloud OSS (Object Storage Service) le prend en charge de manière native .
la source
J'ai eu le même problème et c'est ce que j'avais demandé
comment ajouter des données dans un fichier à l'aide d'AWS Lambda
Voici ce que je propose pour résoudre le problème ci-dessus:
Utilisez getObject pour récupérer du fichier existant
Fonction d'écriture à ajouter dans le fichier
J'espère que cette aide !!
la source
writeToS3
fonction écrasera un fichier, ne lui ajoutera pas.