CsvUploader
que se encarga de la lógica de subir archivos CSV a S3 utilizando la AWS CLI. El método uploadCsvFiles
recibe la ruta del directorio local donde se encuentran los archivos CSV, el nombre del bucket en S3 y el prefijo de ruta en S3 para los archivos. Luego, se itera sobre los archivos CSV dentro del directorio y se ejecuta el comando de subida utilizando la AWS CLI.S3BatchUpload
utiliza el trait CsvUploader
para subir todos los archivos CSV dentro de un directorio específico a S3. Simplemente se especifica la ruta del directorio local, el nombre del bucket en S3 y el prefijo de ruta en S3, y se llama al método uploadCsvFiles
para realizar la subida.s3Key
en función de la estructura de directorios local. Se utiliza substring
para obtener la parte de la ruta después del directorio base, y luego se reemplaza el separador de archivos local (File.separator
) por el separador de rutas en S3 ("/"). De esta manera, se mantendrá la misma estructura de directorios en el bucket de destino.import java.io.File
import sys.process._
trait AwsCliExecutor {
protected def executeCommand(command: String): Int = command.!
}
trait CsvUploader extends AwsCliExecutor {
def uploadCsvFiles(directoryPath: String, bucketName: String, s3KeyPrefix: String): Unit = {
val directory = new File(directoryPath)
val csvFiles = directory.listFiles(_.getName.toLowerCase.endsWith(".csv"))
csvFiles.foreach { file =>
val localFilePath = file.getAbsolutePath
val s3Key = s3KeyPrefix + localFilePath.substring(directoryPath.length).replace(File.separator, "/")
val uploadCommand = s"aws s3 cp $localFilePath s3://$bucketName/$s3Key"
val result = executeCommand(uploadCommand)
if (result == 0) {
println(s"Archivo ${file.getName} subido exitosamente a S3 con ruta $s3Key.")
} else {
println(s"Ocurrió un error al subir el archivo ${file.getName} a S3.")
}
}
}
}
object S3BatchUpload extends App with CsvUploader {
val localDirectoryPath = "/path/to/your/local/directory" // Ruta del directorio local con los archivos CSV
val bucketName = "your-bucket-name" // Nombre del bucket en S3
val s3KeyPrefix = "path/to/upload" // Prefijo de ruta en S3 para los archivos
uploadCsvFiles(localDirectoryPath, bucketName, s3KeyPrefix)
}
0 comentarios:
Publicar un comentario
Gracias por participar en esta página.