webentwicklung-frage-antwort-db.com.de

So erstellen Sie einen Ordner in S3 aus der Ec2-Instanz

Ich möchte einen Ordner im S3-Bucket von der Ec2-Instanz erstellen. Ich habe das Put-Objekt ausprobiert, aber es funktioniert nicht. Gibt es eine Möglichkeit, Ordner aus der ec2-Instanz mit cli auf s3 zu erstellen.

5
Shrikant

Sie müssen keinen Ordner erstellen, um Artikel darin ablegen zu können. Führen Sie beispielsweise etwas wie den folgenden Befehl aus und s3 erstellt die Ordner, falls sie nicht vorhanden sind:

aws s3 cp ./testfile s3://yourBucketName/any/path/you/like

Wenn Sie cp rekursiv verwenden möchten, können Sie die Option --recursive angeben oder "aws s3 sync" verwenden. 

Wenn Ihr Befehl nicht funktioniert, haben Sie möglicherweise Berechtigungsprobleme. Fügen Sie Ihren Fehler ein, damit wir Ihnen helfen können.

27
Tom
aws s3api put-object --bucket bucketname --key foldername/  

Dieser Befehl funktioniert wie ein Zauber. Mit freundlicher Genehmigung des AWS-Supports.

7
Alankrit Aman

Und nicht zu vergessen, dass S3 ein Objektspeicher ist. Es geht nicht um Ordner.

Wenn Sie/xyz/erstellen und einen Dateianruf /xyz/foo.txt hochladen, handelt es sich tatsächlich um zwei verschiedene Objekte. Wenn Sie/xyz/löschen, wird /xyz/foo.txt nicht gelöscht.

Mit der S3-Konsole können Sie "Ordner erstellen", aber nachdem Sie damit gespielt haben, werden Sie feststellen, dass Sie den Ordner nicht umbenennen können oder ALLES tun, wenn Sie mit einem Ordner spielen können (z. B. durch Verschieben einer Baumstruktur, rekursive Angabe der Zugriffsrechte).

In S3 gibt es einen Aufruf "PREFIX", bei dem Sie mit der API eine Datei mit einem bestimmten "Präfix" auflisten/filtern können, mit der Sie mit der Abstraktion umgehen können. 

Da Sie wie ein Dateisystemordner KEINE Aktionen ausführen können, wenn Sie einen Ordner in einen anderen Ordner verschieben möchten, müssen Sie den Dateinamen mit einem eigenen Code "umschreiben" (um genau zu sein) "Schlüssel" in S3), dh in neuen Objektnamen kopieren und altes Objekt löschen.

Wenn Sie die erweiterte Vorsteuerung für S3 erstellen möchten, können Sie dazu das AWS SDK auswählen. https://aws.Amazon.com/tools/

Sie können mit dem API-Funktionsaufruf put_object () herumspielen (die Benennung hängt von der SDK-Sprache ab) und die Fakten belegen (die in der AWS-Dokumentation am häufigsten vorkommen). 

update: Seit @Tom die Probleme erheben. 

Sie können mit AWS cli keinen virtuellen Ordner erstellen (möglicherweise zeigt @Tom wie), Sie können dies nur tun, indem Sie AWS SDK verwenden. Put_object () 

Versuchen wir dies Zuerst erstelle ich eine Dummy-Datei in der Shell

echo "dummy">test.txt

Dann versuchen Sie es mit Python aws sdk

import boto3 
s3=boto3.client("s3")
s3.create_bucket(Bucket="dummy")
# now create so call xyz/ "empty virtual folder"
s3.put_object(Bucket="dummy", Key="xyz/")
# now I put above file name to S3 , call xyz/test.txt
# First I must open the file, because put_object only take bytes or file object
myfile=open("test.txt")
s3.put_object(Bucket="dummy", Key="xyz/test.txt")

Gehen Sie jetzt zu Ihrem Befehl Shell, starten Sie Ihre AWS CLI (oder spielen Sie weiter mit boto3) 

# check everything
aws s3 ls s3://dummy --recursive

#now delete the so call "folder" 
aws s3 rm s3://dummy/xyz/

# And you see the file "xyz/test.txt" is still there 
aws s3 s3://dummy --recursive
2
mootmoot

Sie finden die Befehle hier vom offiziellen Blog von AWS:

http://docs.aws.Amazon.com/cli/latest/userguide/using-s3-commands.html

Es gibt verschiedene andere Tools, mit denen Bucket/Ordner in S3 erstellt werden können. Eines der bekannten Tools ist S3Browser, der für Windows-Server verfügbar ist. Installieren Sie es in Ihrer EC2-Instanz und geben Sie Ihren AWS-Zugriffsschlüssel und die geheimen Schlüssel für den Zugriff auf den S3 an. Dieses Tool bietet dazu eine einfache Benutzeroberfläche. 

2
error_handler

Es gibt keinen CLI-Befehl, mit dem Sie einfach einen Ordner in einem S3-Bucket erstellen können. Um diesen Ordner zu erstellen, würde ich den folgenden Befehl verwenden, der eine leere Datei mit nichts darin erstellt. Wenn Sie die Datei löschen, löschen Sie den Ordner, sofern Sie danach nichts hinzugefügt haben

aws s3api put-object --bucket bucket_name --key ordnername/empty.csv

0
Anxo P
aws s3 sync <folder_name> s3://<you-prefix>/<some_other_folder>/<folder_name>
0
mrgloom