Je veux créer un dossier dans un compartiment S3 à partir d'une instance Ec2. J'ai essayé l'objet mis mais ça ne marche pas. Est-il possible de créer un dossier sur s3 à partir d'une instance ec2 à l'aide de cli.
Vous n'avez pas besoin de créer un dossier pour y mettre un élément. Par exemple, exécutez quelque chose comme la commande ci-dessous et s3 créera les dossiers s’ils n’existent pas:
aws s3 cp ./testfile s3://yourBucketName/any/path/you/like
Si vous voulez utiliser cp de manière récursive, vous pouvez spécifier l'option --recursive ou utiliser "aws s3 sync".
Si votre commande ne fonctionne pas, vous pouvez avoir des problèmes d'autorisation. Collez votre erreur afin que nous puissions vous aider.
aws s3api put-object --bucket bucketname --key foldername/
Cette commande fonctionne comme un charme. Avec l'aimable autorisation de AWS Support.
Et gardez bien à l'esprit que S3 est un magasin d'objets. Il ne traite pas de dossier.
Si vous créez/xyz/et téléchargez un fichier appelé /xyz/foo.txt, il s’agit en fait de deux objets différents. Si vous supprimez/xyz /, il ne supprimera pas /xyz/foo.txt.
La console S3 vous permet de "créer un dossier", mais une fois que vous aurez joué avec, vous remarquerez que vous NE POUVEZ PAS RENOMMER de dossier ou que vous pouvez TOUT FAIRE que vous puissiez jouer avec un dossier (comme déplacer une arborescence, spécifier récursivement les droits d'accès).
Dans S3, il existe un élément appelé "PREFIX" dans lequel l'API vous permet de répertorier/filtrer un fichier avec un "préfixe" particulier, ce qui vous permet de gérer les abstractions.
Comme mentionné ci-dessus, comme vous ne pouvez rien faire comme un dossier de système de fichiers, si vous souhaitez effectuer une tâche telle que déplacer un dossier dans un autre dossier, vous devez écrire votre propre code pour "réécrire" le nom du fichier (Pour être précis, "Key" dans S3), c'est-à-dire copiez-le dans le nouveau nom d'objet et supprimez l'ancien objet.
Si vous souhaitez créer un contrôle avancé sur S3, vous pouvez choisir l'un des kits AWS SDK pour le faire. https://aws.Amazon.com/tools/
Vous pouvez jouer avec l'appel de la fonction API put_object () (le nom varie en fonction du langage du SDK) et vérifier ces faits (dont la plupart se trouvent dans la documentation AWS).
mise à jour: Depuis @Tom soulève les problèmes.
Vous ne pouvez pas créer de dossier virtuel à l'aide d'AWS cli (peut-être que @Tom peut vous montrer comment faire), la seule façon de le faire consiste à utiliser AWS SDK put_object ().
Essayons ceci Je crée d'abord un fichier factice dans Shell
echo "dummy">test.txt
Ensuite, essayez d'utiliser 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")
Maintenant, allez dans votre shell de commande, lancez votre AWS CLI (ou continuez à jouer avec 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
Vous pouvez trouver les commandes ici sur le blog officiel d’AWS:
http://docs.aws.Amazon.com/cli/latest/userguide/using-s3-commands.html
Et il existe différents autres outils disponibles qui peuvent être utilisés pour créer un dossier/des dossiers dans S3. Un des outils connus est S3Browser, disponible pour les serveurs Windows. Installez-le sur votre instance EC2 et fournissez votre clé d'accès AWS et vos clés secrètes pour accéder au S3. Cet outil fournit une interface utilisateur simple pour le faire.
Aucune commande cli ne vous permet de créer simplement un dossier dans un compartiment s3. Pour créer ce dossier, je voudrais utiliser la commande suivante, qui crée un fichier vide, avec rien à l'intérieur. Mais si vous supprimez le fichier, vous supprimerez le dossier tant que vous n'avez rien ajouté par la suite.
aws s3api put-object --bucket bucket_name --key nom_fichier/empty.csv
aws s3 sync <folder_name> s3://<you-prefix>/<some_other_folder>/<folder_name>