创建AWS Lambda将CSV文件从S3复制到RDS MySQL

时间:2018-08-06 19:58:22

标签: java mysql amazon-s3 amazon-rds

我正在尝试从S3存储桶中至少加载4个csv文件到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;
}

1 个答案:

答案 0 :(得分:0)

如果您具有要尝试加载到S3中的任何文件的完整密钥,则标准AmazonS3客户端对象将具有以下方法:boolean doesObjectExist(String bucketName, String objectName)。根据S3的“规则”,将文件上传到S3是原子的。除非文件完全上传,否则指定的S3键将不会为此调用返回true

因此,您可以触发文件上传,并通过doesObjectExist调用测试完整性。完成后,执行lambda函数。

或者,S3还有另一项服务(如果您想继续喂AWS野兽),您可以在其中打开存储桶通知,或触发Lambda函数以其中的一个通知执行。我不记得这个名字了。