2017-02-02 3 views
1

Ich versuche, Ordner aus einem Bucket auf Pfad aufzulisten und herunterzuladen, zB: "aaa/bbb /" mit dem AWS-SDK Gem v2. Allerdings kann ich nicht herausfinden, wie es geht. DieseAws S3 Verbindung mit bestimmten Pfad

ist, was ich versucht:

require 'aws-sdk' 

Aws.config.update({ 
    region: 'us-west-2', 
    credentials: Aws::Credentials.new('akid', 'secret') 
})   

s3 = Aws::S3::Resource.new 

# reference an existing bucket by name 
bucket = s3.bucket('aaa') 

bucket.objects(prefix: '/bbb/').each do |folder| 
    p folder 
end 

Dort heißt es: Zugriff verweigert (Aws :: S3 :: Fehler :: AccessDenied)

Aber wenn ich die Befehlszeile AWS CLI statt und führen:

aws s3 ls aaa/bbb/ 

es funktioniert ...

Irgendwelche Vorschläge?

Vielen Dank.

Antwort

0

Gemäß der Dokumentation haben Sie in den Anmeldeinformationen setzen etwas anders:

require 'aws-sdk' 

Aws.config.update({ 
    region: 'us-west-2', 
    credentials: Aws::Credentials.new('akid', 'secret') 
}) 

Vielleicht versuchen, den Inhalt des Eimers zur Liste:

s3.list_objects(bucket:'aaa').each do |response| 
    puts response.contents.map(&:key) 
end 
+0

Ja, stimmt. Ich habe versucht, herauszufinden, wie ich es beheben kann, und am Ende habe ich einen anderen Code verwendet, aber ich habe es bereits versucht und es funktioniert nicht ... Ich werde den Beitrag entsprechend der Dokumentation aktualisieren, danke. – soltex

+0

Kein Glück mit Ihrem Update. Gleiches Ergebnis, Zugriff verweigert. Ich habe nur Zugriff auf den Ordner "BBB" in den Eimer "aaa", aber ich weiß nicht, wie man dorthin kommt ... mit der AWS-Konsole funktioniert perfekt. – soltex

0

Die Konvention in S3 ist, dass der "root" des Schlüsselraums eines Buckets ist ein leerer leerer String der Länge 0 ... es ist nicht /, wie einige Leute natürlich annehmen.

Das Präfix, das Sie suchen, würde als bbb/ anstelle von /bbb/ ausgedrückt werden.

+0

Danke. Das hat etwas verändert, aber muss ich einen Endpunkt definieren? Ich erhalte diesen Fehler: Der Bucket, auf den Sie zugreifen möchten, muss über den angegebenen Endpunkt angesprochen werden. – soltex

+0

Sie setzen 'region: 'us-west-2'' so dass der Fehler anzeigt, dass sich Ihr Bucket in einer anderen Region befindet. Überprüfen Sie, dass? –

+0

Sie haben Recht, die Region war falsch, ich wechselte zu 'us-east-1', und jetzt bekomme ich noch: Zugriff verweigert (Aws :: S3 :: Errors :: AccessDenied). – soltex