如何在AWS Lambda函数上重命名或复制文件?

时间:2017-10-03 21:08:25

标签: amazon-web-services amazon-s3 aws-lambda

我从技术方面对AWS / Lambda有点新,所以我有一个方案,我想要你的帮助。

我有一个每天丢失的文件,我只关心该月最后一天的文件。他们都掉到了同一个桶中,文件在美国东部时间8点掉落。

然后,我需要将文件从该月的最后一天重命名为静态名称,并将其复制到存储桶,然后将该文件称为bill。如果我们在10月份,我希望前面的文件名为bill_september。

所以我的想法是每天中午都有一个cron作业启动一个Lambda函数来移动文件,除了月份的最后一天。在上午8点这个月的第一天,我将在凌晨5点开始一个lambda工作,复制到新桶。

所以问题是

  1. 这有意义吗?
  2. 我可以将lambda重命名现有文件到文件+月吗?
  3. 我总是愿意接受更好的解决方案,所以请告诉我,如果我完全转过身来

1 个答案:

答案 0 :(得分:1)

您的Lambda函数,无论使用何种语言,都将使用S3-SDK处理S3存储桶中的文件。使用S3,文件(对象)无法重命名,但您可以执行的操作是复制到另一个名称(对象键),并删除旧文件。

如何在S3上复制文件

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
s3client.copyObject(sourceBucketName, sourceKey, 
                    destinationBucketName, destinationKey);

http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingJava.html

如何删除S3上的文件

AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
        try {
            s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName));
        } catch (AmazonServiceException ase) {
            System.out.println("Caught an AmazonServiceException.");
            System.out.println("Error Message:    " + ase.getMessage());
            System.out.println("HTTP Status Code: " + ase.getStatusCode());
            System.out.println("AWS Error Code:   " + ase.getErrorCode());
            System.out.println("Error Type:       " + ase.getErrorType());
            System.out.println("Request ID:       " + ase.getRequestId());
        } catch (AmazonClientException ace) {
            System.out.println("Caught an AmazonClientException.");
            System.out.println("Error Message: " + ace.getMessage());
        }

http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingOneObjectUsingJava.html

您可能需要做的是列出特定文件夹中的存储桶中的对象,然后找到您的目标文件(在特定日期/时间修改/创建的文件?),然后执行您需要执行的任何操作,如果没有复制可能涉及读取文件,编辑它然后重新上传到S3。