2017-03-28 3 views
0

Es gibt einen large dataset auf einem öffentlichen Server (~ 0.5TB,), den ich in meine eigenen s3-Buckets kopieren möchte. Es scheint wie aws s3 cp ist nur für lokale Dateien oder Dateien in S3-Buckets basiert?AWS S3 in den Bucket von remote location kopieren

Wie kann ich diese Datei (einzeln oder mehrteilig) in S3 kopieren? Kann ich das AWS CLI verwenden oder brauche ich etwas anderes?

+0

So ... Sie die Datenmenge in Frage da sagen ist nicht auf S3, aber Sie wollen es herunterladen und speichern Sie es auf S3 ... richtig? –

+0

@ Michael-sqlbot Genau –

+0

Aber ich führe dies von einer EC2-Instanz aus, also möchte ich nicht das ganze Ding auf die EC2-Instanz herunterladen und es auf S3 hochladen, also direkt auf S3 zu laden ist, was ich suche zum. –

Antwort

0

Es gibt keine Möglichkeit, sie direkt vom Remote-Standort auf S3 hochzuladen. Sie können jedoch den Inhalt der Remote-Dateien auf Ihren Computer und dann bis S3 streamen. Dies bedeutet, dass Sie die gesamten 0,5 TB Daten heruntergeladen haben, aber Ihr Computer wird immer nur einen winzigen Bruchteil dieser Daten im Speicher halten (er wird auch nicht auf der Festplatte gespeichert). Hier ist eine einfache Implementierung in javascript:

const request = require('request') 
const async = require('async') 
const AWS = require('aws-sdk') 
const s3 = new AWS.S3() 
const Bucket = 'nyu_depth_v2' 
const baseUrl = 'http://horatio.cs.nyu.edu/mit/silberman/nyu_depth_v2/' 
const parallelLimit = 5 
const parts = [ 
    'basements.zip', 
    'bathrooms_part1.zip', 
    'bathrooms_part2.zip', 
    'bathrooms_part3.zip', 
    'bathrooms_part4.zip', 
    'bedrooms_part1.zip', 
    'bedrooms_part2.zip', 
    'bedrooms_part3.zip', 
    'bedrooms_part4.zip', 
    'bedrooms_part5.zip', 
    'bedrooms_part6.zip', 
    'bedrooms_part7.zip', 
    'bookstore_part1.zip', 
    'bookstore_part2.zip', 
    'bookstore_part3.zip', 
    'cafe.zip', 
    'classrooms.zip', 
    'dining_rooms_part1.zip', 
    'dining_rooms_part2.zip', 
    'furniture_stores.zip', 
    'home_offices.zip', 
    'kitchens_part1.zip', 
    'kitchens_part2.zip', 
    'kitchens_part3.zip', 
    'libraries.zip', 
    'living_rooms_part1.zip', 
    'living_rooms_part2.zip', 
    'living_rooms_part3.zip', 
    'living_rooms_part4.zip', 
    'misc_part1.zip', 
    'misc_part2.zip', 
    'office_kitchens.zip', 
    'offices_part1.zip', 
    'offices_part2.zip', 
    'playrooms.zip', 
    'reception_rooms.zip', 
    'studies.zip', 
    'study_rooms.zip' 
] 

async.eachLimit(parts, parallelLimit, (Key, cb) => { 
    s3.upload({ 
    Key, 
    Bucket, 
    Body: request(baseUrl + Key) 
    }, cb) 
}, (err) => { 
    if (err) console.error(err) 
    else console.log('Done') 
}) 
+0

Also ich denke, das ist ein Skript auf node.js ausgeführt werden? –

Verwandte Themen