amazon-web-services - 如何创建 Amazon S3 作业以移动大文件
问题描述
我需要在唯一的 Amazon S3 存储桶中将文件从一个文件夹复制到另一个文件夹。但是,由于文件大小,我不能简单地从 AWS SDK S3 类调用 copyObject 方法,因为它会使我的 Lambda 函数超时。
这就是为什么我试图创建一个S3 批量操作作业来移动这个文件,但是我Invalid job operation
在尝试时遇到了错误。我正在使用 AWS SDKS3Control
类,试图调用方法 createJob。我将此对象作为参数传递:
{
AccountId: '445084039568',
Manifest: {
Location: {
ETag: 'dbe4a392892992491a7124c10f2fbf03',
ObjectArn: 'arn:aws:s3:::amsp-media-bucket/manifest.csv'
},
Spec: {
Format: 'S3BatchOperations_CSV_20180820',
Fields: ['Bucket', 'Key']
},
},
Operation: {
S3PutObjectCopy: {
TargetResource: 'arn:aws:s3:::amsp-media-bucket/bigtest'
}
},
Report: {
Enabled: false
},
Priority: 10,
RoleArn: 'arn:aws:iam::445084039568:role/mehoasumsp-sandbox-asumspS3JobRole-64XWYA3CFZF3'
}
老实说,我不确定我是否正确指定了清单。这是 manifest.csv 内容:
amsp-media-bucket, temp/37766a92-16ef-4ee2-8e79-3875679dad85.mkv
我不是对文件本身不安全,而是对我在 param 对象中定义 Spec 属性的方式不安全。
解决方案
单引号在作业规范 JSON 中可能无效。我只见过双引号。
在 boto3 (Python SDK) 中,使用托管的 .copy() 函数而不是 .copy_object(),并调整 multipart_chunksize 和并发设置,多个 UploadPartCopy 请求很可能在 Lambda 运行时限制内完成。AWS JS SDK 似乎缺少等效功能,您可能想尝试类似https://github.com/Zooz/aws-s3-multipart-copy
正如 John Rotenstein 所说,请注意 CSV 文件中对象键中的空格。
S3PutObjectCopy S3 批量操作作业使用 CopyObject,其大小限制为 5GiB。
加上操作成本,S3 批量操作作业每个成本为 0.25 美元,如果复制少量对象,这可能会很昂贵。
推荐阅读
- python - HTML - 在页面的其余部分完成加载后加载 Selenium 内容
- c++ - 在基类中创建派生类的对象
- python-3.x - 从csv文件加载数据后如何调用数组项?
- python - 如何在 PostgreSql 上获取查询的最后第 n 项
- java - 如何更新连接到我的 JTable 的数据库 (JavaDatabase) 中的一行条目?
- apache-spark - 为什么资源在独占节点标签之间共享?
- python - 如何将对象的函数名作为参数传递
- c++ - 对元素的向量或指向元素的指针进行排序
- php - 如何合并 $u_activity[$key] 和 $u_activity_event[$key] 结果集返回的结果集
- angular - 我正在尝试使用带有角度的茉莉花来测试来自服务的 api 请求,但没有成功