Powiedzmy, że mam maszynę, na której chcę mieć możliwość zapisu w określonym pliku dziennika przechowywanym w zasobniku S3.
Tak więc maszyna musi mieć możliwości zapisu w tym zasobniku, ale nie chcę, aby miała możliwość nadpisywania lub usuwania jakichkolwiek plików w tym zasobniku (w tym tego, w którym chcę zapisywać).
Zasadniczo chcę, aby mój komputer mógł tylko dołączać dane do tego pliku dziennika, bez nadpisywania go lub pobierania.
Czy istnieje sposób, aby skonfigurować mój S3, aby działał w ten sposób? Może jest jakaś zasada IAM, którą mogę do niej dołączyć, aby działała tak, jak chcę?
Odpowiedzi:
Niestety nie możesz.
S3 nie ma operacji „dołączania”. * Po przesłaniu obiektu nie ma możliwości modyfikacji go na miejscu; jedyną opcją jest przesłanie nowego obiektu, aby go zastąpić, który nie spełnia Twoich wymagań.
*: Tak, wiem, że ten post ma kilka lat. Jednak nadal jest dokładna.
źródło
Jak stwierdza przyjęta odpowiedź, nie możesz. Najlepszym znanym mi rozwiązaniem jest użycie:
AWS Kinesis Firehose
https://aws.amazon.com/kinesis/firehose/
Ich przykładowy kod wygląda na skomplikowany, ale Twój może być naprawdę prosty. Wciąż wykonujesz operacje PUT (lub BATCH PUT) na strumieniu dostarczania Kinesis Firehose w swojej aplikacji (używając AWS SDK) i konfigurujesz strumień dostarczania Kinesis Firehose, aby wysyłać strumieniowane dane do wybranego przez Ciebie wiadra AWS S3 (w Konsola AWS Kinesis Firehose).
Nadal nie jest to tak wygodne, jak
>>
z wiersza poleceń Linuksa, ponieważ po utworzeniu pliku na S3 ponownie musisz poradzić sobie z pobieraniem, dołączaniem i przesyłaniem nowego pliku, ale musisz to zrobić tylko raz na partię wierszy, a niż dla każdego wiersza danych, więc nie musisz się martwić ogromnymi opłatami ze względu na liczbę operacji dołączania. Może da się to zrobić, ale nie widzę, jak to zrobić z konsoli.źródło
Obiekty na S3 nie mogą być dołączane. W tym przypadku masz 2 rozwiązania:
źródło
Jak powiedzieli wcześniej inni, obiektów S3 nie można dołączać.
Jednak innym rozwiązaniem byłoby zapisanie w dziennikach CloudWatch, a następnie wyeksportowanie dzienników, które chcesz, do S3 . Uniemożliwiłoby to również atakującym, którzy uzyskują dostęp do twojego serwera, usunięciem z twojego wiadra S3, ponieważ Lambda nie wymagałaby żadnych uprawnień S3.
źródło
W przypadku, gdy ktoś chce dołączyć dane do obiektu za pomocą usługi podobnej do S3, Alibaba Cloud OSS (Object Storage Service) obsługuje to natywnie .
źródło
Miałem podobny problem io to właśnie prosiłem
jak dołączyć dane do pliku za pomocą AWS Lambda
Oto, co wymyśliłem, aby rozwiązać powyższy problem:
Użyj getObject, aby pobrać z istniejącego pliku
Funkcja zapisu do dołączenia do pliku
Mam nadzieję, że to pomoże!!
źródło
writeToS3
funkcja nadpisze plik, a nie dołączy do niego.