Hay un gran conjunto de datos en un servidor público (~0,5 TB, varias partes aquí ), que me gustaría copiar en mis propios cubos s3. ¿Parece que aws s3 cp es solo para archivos locales o archivos basados en depósitos S3?
¿Cómo puedo copiar ese archivo (ya sea una o varias partes) en S3? ¿Puedo usar la CLI de AWS o necesito algo más?
No hay forma de cargarlo directamente a S3 desde la ubicación remota. Pero puede transmitir el contenido de los archivos remotos a su máquina y luego hasta S3. Esto significa que habrá descargado los 0,5 TB de datos completos, pero su computadora solo mantendrá una pequeña fracción de esos datos en la memoria a la vez (tampoco se almacenarán en el disco). Aquí hay una implementación simple en 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') })