96 votes

Comment rendre public 10 000 fichiers dans S3

J'ai un dossier dans un seau avec 10 000 fichiers. Il semble n'y avoir aucun moyen de les télécharger et de les rendre publiques immédiatement. Je les ai donc tous téléchargés, ils sont privés et je dois les rendre publics.

J'ai essayé la console aws, cela donne simplement une erreur (fonctionne très bien avec des dossiers avec moins de fichiers).

J'ai essayé d'utiliser S3 en organisant dans Firefox, même chose.

Existe-t-il un logiciel ou un script que je peux exécuter pour rendre tout cela public?

122voto

Rajiv Points 1308

Vous pouvez générer une stratégie de compartiment (voir exemple ci-dessous) donnant accès à tous les fichiers du compartiment. La stratégie de compartiment peut être ajoutée à un compartiment via la console AWS.

 {
    "Id": "...",
    "Statement": [ {
        "Sid": "...",
        "Action": [
            "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucket/*",
        "Principal": {
            "AWS": [ "*" ]
        }
    } ]
}
 

Regardez également l'outil générateur de règles suivant fourni par Amazon.

http://awspolicygen.s3.amazonaws.com/policygen.html

34voto

Daniel Von Fange Points 2739

J'ai dû changer plusieurs centaines de milliers d'objets. J'ai lancé une instance EC2 pour l'exécuter, ce qui accélère le processus. Vous voudrez d'abord installer le aws-sdk gem.

Voici le code:

 require 'rubygems'
require 'aws-sdk'


# Change this stuff.
AWS.config({
    :access_key_id => 'YOURS_HERE',
    :secret_access_key => 'YOURS_HERE',
})
bucket_name = 'YOUR_BUCKET_NAME'


s3 = AWS::S3.new()
bucket = s3.buckets[bucket_name]
bucket.objects.each do |object|
    puts object.key
    object.acl = :public_read
end
 

3voto

Eric Anderson Points 680

Eu ce besoin moi-même, mais le nombre de fichiers est-il du temps à faire dans la série. J'ai donc écrit un script qui le fait sur le fer.io's monteuse de charpentes en acier de service. Leur de 500 heures de calcul par mois suffisent à gérer de grands seaux (et si vous ne dépasser que le prix est raisonnable). Puisqu'il est fait en parallèle, il se termine en moins d'une minute pour les 32 000 objets que j'ai eu. Aussi je pense que les serveurs fonctionnent sur EC2 ainsi, la communication entre le travail et S3 est rapide.

Tout le monde est bienvenu d'utiliser mon script pour leurs propres besoins.

2voto

willbt Points 1661

Regardez BucketExplorer, il gère très bien les opérations en bloc et est un client S3 solide.

0voto

Tahbaza Points 5878

Vous pensez qu'ils feraient public lire le comportement par défaut, n'est-ce pas? : ) Je partage votre frustration alors que la construction d'une API pour l'interface avec S3 à partir d'une solution C#. Voici le morceau de code qui effectue le téléchargement d'un S3 objet et la valeur publique-accès en lecture par défaut:

public void Put(string bucketName, string id, byte[] bytes, string contentType, S3ACLType acl) {
     string uri = String.Format("https://{0}/{1}", BASE_SERVICE_URL, bucketName.ToLower());
     DreamMessage msg = DreamMessage.Ok(MimeType.BINARY, bytes);
     msg.Headers[DreamHeaders.CONTENT_TYPE] = contentType;
     msg.Headers[DreamHeaders.EXPECT] = "100-continue";
     msg.Headers[AWS_ACL_HEADER] = ToACLString(acl);
     try {
        Plug s3Client = Plug.New(uri).WithPreHandler(S3AuthenticationHeader);
        s3Client.At(id).Put(msg);
     } catch (Exception ex) {
        throw new ApplicationException(String.Format("S3 upload error: {0}", ex.Message));
     }
}

Le ToACLString(acl) renvoie le public à lire, BASE_SERVICE_URL est s3.amazonaws.com et le AWS_ACL_HEADER constante est x-amz-acl. La fiche et la DreamMessage trucs va probablement vous sembler étrange que nous utilisons le Rêve cadre de la rationalisation de nos communications http. Essentiellement, nous faisons un http METTEZ les en-têtes et un en-tête spécial de la signature par aws cahier des charges (voir cette page dans l' aws docs pour des exemples de la façon de construire l'en-tête d'autorisation).

Pour modifier un mot de 1000 objet Acl vous pouvez écrire un script, mais il est probablement plus facile d'utiliser un outil graphique pour résoudre le problème immédiat. Le meilleur que j'ai utilisé jusqu'à présent est une entreprise qui s'appelle la chicouté pour S3; on dirait qu'ils ont un libre de 15 jours d'essai pour au moins un de leurs produits. J'ai juste vérifié qu'il vous permettra de sélectionner plusieurs objets à la fois et de définir leur liste de contrôle d'accès public via le menu contextuel. Profitez de l'informatique en nuage!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X