我有两个S3 buckets设置为 跨区域复制. 每当源桶中有一个带有特定前缀的上传,我就需要将相应的数据复制到不同区域的 "处理桶 "中。然而,在复制过程之后,我至少需要知道一些关于原始源桶的信息,因为我想设置多个桶,包括用同一个目标桶进行复制,而处理是通过lambda事件来完成的。我想过用标记来让这个工作,但我找不到办法在复制之前(或之后)自动标记包含特定前缀的上传数据。
我能找到的唯一接近这个主题的东西是 https:/docs.aws.amazon.comAmazonS3latestdevbatch-ops-put-object-tagging.html。但我不能做太多,因为我不确定,如果这是我要找的东西,特别是关于自动复制功能。
总结一下。我想通过lambda事件来处理数据 通过事件中包含的信息来区分数据的来源 json 数据(例如源于S3文件上的特定标签)。
最好的方法是什么?
标记对象
标记对象 取决于它们是如何被上传到S3的。如果你使用的是CLI。在您用 aws s3 cp
你可以调用s3api命令来添加标签。
[aws s3api put-object-tagging --bucket \[bucket name\] --key \[object key\] --tagging 'TagSet=\[{Key=mykey,Value=myvalue},{Key=yourkey,Value=yourvalue}\]'][2]
或者你也可以添加一个 兰姆达触发器 当上传时,将标签添加到对象中。您可以使用概述的例子来完成这个任务 此处.
Bucket Replication:
对象是按原样复制的,你可以设置加密,类型或存储或所有权。目前你不能改变其他的东西。
AWS文档中的 复制 将目标配置定义为。
{
"AccessControlTranslation" : AccessControlTranslation,
"Account" : String,
"Bucket" : String,
"EncryptionConfiguration" : EncryptionConfiguration,
"StorageClass" : String
}
目前只能设置目的地StorageClass、Bucket、Account和Configuration.Bucket只是Bucket名称,不包括前缀。
如果正确的 权限 都设置了复制可以复制标签,标签可以随时添加.即你可以添加一个对象,它可以复制,然后你可以更新源标签,该源标签将复制。
注意:如果你更新了目标对象的标签,而源标签更新后,源标签将覆盖目标标签。这取决于定义的IAM策略,即如果所有权发生了变化,那么你可能无法更新标签。
AWS S3没有文件夹的概念,前缀只是键名的一部分,因此整个键名都会被复制。
可能的解决方案。
在源桶中,你可以设置一个前缀,例如 "my-source",然后在复制到目标桶时,过滤前缀 "my-source"。S3复制将把对象复制到目标桶,前缀为'my-source'。因此,如果bucket1的前缀是'my-source1object',bucket2的前缀是'my-source2object'。那么目标桶将显示 "文件夹"'my-source1'和'my-source2'以及它们的对象。但如果两个源桶的前缀相同,那么文件将出现在目标桶的同一个 "文件夹 "中。
或者你可以使用Lambda来改变前缀,或者添加上面定义的标签。