Создать AWS лямбда для копирования CSV-файла из S3 в RDS MySQL

0

Я пытаюсь загрузить не менее 4 CSV файлов из моего ведра S3 в мою базу данных RDS Mysql. Каждый раз, когда файлы помещаются в ведро, у них будет другое имя. Имена файлов добавлены в конце. Я бы хотел, чтобы они автоматически загружались в базу данных, когда они помещались в ведро S3. Пока у меня есть функция загрузки для подключения к базе данных. На данный момент я просто пытаюсь загрузить один файл. Что бы я сделал, чтобы файл автоматически загрузился после его вставки в ведро S3? Спасибо за помощь!

файл lambdafunctionhandler

public class LambdaFunctionHandler implements RequestHandler<Service, ResponseClass> {
public void loadService(){
    Statement stmt = null;
    try{
         Connection conn = DriverManager.getConnection("jdbc:mysql://connection/db", "user", "password");
        log.info("Connected to database.");


         //load date sql
         String query="LOAD DATA FROM S3 '"+ S3_BUCKET_NAME + "' INTO TABLE " + sTablename 
            + " FIELDS TERMINATED BY ',' ENCLOSED BY '\"' " 
            + "lines terminated by '\r\n' "+"IGNORE " + ignoreLines+" LINES";

         stmt.executeUpdate(query);
         System.out.println("loaded table.");

         conn.close();
    }catch(SQLException e){
        e.printStackTrace();
    }
}
@Override
public ResponseClass handleRequest(Service arg0, Context arg1) {
    String path="";

    return null;
}
Теги:
amazon-s3
amazon-rds

1 ответ

0

Если у вас есть полный ключ любого файла, который вы хотите загрузить в S3, то стандартный клиентский объект AmazonS3 имеет этот метод: boolean doesObjectExist(String bucketName, String objectName). По "правилам" S3 загрузка файла на S3 является атомарной. Указанный ключ S3 не вернет true для этого вызова, если файл не будет полностью загружен.

Таким образом, вы можете инициировать загрузку своего файла и проверить полноту с вызовом doesObjectExist. После этого выполните свою лямбда-функцию.

В качестве альтернативы, S3 также имеет другую услугу (если вы хотите продолжать кормить зверя AWS), где вы можете включить уведомления Bucket или вызвать функцию Lambda для выполнения одним из этих уведомлений. Я не могу вспомнить имя с головы.

  • 0
    ОК, я попытался запустить функцию лямбда, но он говорит, что недействительным s3 URI. У меня есть полное название S3 Bucket. Имя сегмента: private static final String S3_BUCKET_NAME = "sftpgateway-i-XXXXXX / VolvoSA / uploads / DVD37411_20180530_0213_SV_APPT.csv";
  • 0
    @Roro попробуйте добавить s3:// к вашему имени. Вы используете S3_BUCKET_NAME переменную S3_BUCKET_NAME в своем объекте String query ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню