我从技术方面对AWS / Lambda有点新,所以我有一个方案,我想要你的帮助。
我有一个每天丢失的文件,我只关心该月最后一天的文件。他们都掉到了同一个桶中,文件在美国东部时间8点掉落。
然后,我需要将文件从该月的最后一天重命名为静态名称,并将其复制到存储桶,然后将该文件称为bill。如果我们在10月份,我希望前面的文件名为bill_september。
所以我的想法是每天中午都有一个cron作业启动一个Lambda函数来移动文件,除了月份的最后一天。在上午8点这个月的第一天,我将在凌晨5点开始一个lambda工作,复制到新桶。
所以问题是
我总是愿意接受更好的解决方案,所以请告诉我,如果我完全转过身来
答案 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。