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

Par*_*ikh 5 amazon-s3 amazon-web-services aws-lambda

从技术方面来说,我对 AWS / Lambda 有点陌生,所以我有一个场景,我需要你的帮助。

我有一个每天都会删除的文件,我只关心该月最后一天的文件。它们都掉落到与文件在美国东部时间 8 点掉落的同一个存储桶中。

然后,我需要将文件从该月的最后一天重命名为静态名称,并将其复制到存储桶,假设该文件名为 bill.txt。如果我们是在十月,我想要之前名为 bill_september 的文件。

所以我的想法是让 cron 作业每天中午启动 Lambda 函数来移动文件(该月最后一天除外)。该月的第一天早上 8 点,我将让它在早上 5 点启动 lambda 作业以复制到新存储桶。

所以问题是

  1. 这有道理吗?
  2. 我可以让 lambda 将现有文件重命名为 file+month 吗?

我总是乐于接受更好的解决方案,所以请告诉我我是否彻底转变了

Ken*_* S. 4

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

如何在S3上复制文件

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
s3client.copyObject(sourceBucketName, sourceKey, 
                    destinationBucketName, destinationKey);
Run Code Online (Sandbox Code Playgroud)

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());
        }
Run Code Online (Sandbox Code Playgroud)

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

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