用于具有特定前缀的自动复制的 Amazon S3 标签?

Amazon S3 tags for automatic replication with specific prefix?

我为跨区域复制设置了两个 Amazon S3 存储桶。每当源存储桶中有具有特定前缀的上传时,我需要将相应的数据复制到我在不同区域的“处理存储桶”。但是,我至少需要知道复制过程后有关原始源存储桶的一些信息,因为我想设置多个存储桶,包括使用同一目标存储桶进行复制,而处理将通过 lambda 事件完成。

我想过让它与标记一起使用,但我找不到在复制之前(或之后?)自动标记包含特定前缀的上传数据的方法。

我能找到的唯一接近这个主题的是 https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-put-object-tagging.html,但我无法充分利用它,因为我不确定这是否是我要搜索的内容,特别是关于自动复制功能。

回顾一下:我想通过 lambda 事件处理数据,并通过事件的 json 数据(源自 S3 上的特定标签)中包含的信息来区分它们的来源例如文件)。

解决这个问题的最佳方法是什么?

标记对象

Tagging objects 取决于将它们上传到 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]

或者您可以添加 Lambda Trigger that adds the tags to the object when uploaded. You can do this using the examples outlined here

桶复制:

对象按原样复制,您可以设置加密、类型或存储或所有权。目前您无法更改任何其他内容。

replication 的 AWS 文档将目标配置定义为:

{
  "AccessControlTranslation" : AccessControlTranslation,
  "Account" : String,
  "Bucket" : String,
  "EncryptionConfiguration" : EncryptionConfiguration,
  "StorageClass" : String
}

目前只能设置目标StorageClass、Bucket、Account和Configuration。 桶只是桶名,不包含前缀。

如果设置正确permissions复制可以复制标签,标签可以随时添加。即你可以添加一个对象,它可以复制,然后你可以更新源标签,源标签将复制。

注意:如果您更新目标对象标签,并且源更新源将覆盖目标标签。这取决于定义的 IAM 策略。即,如果所有权已更改,那么您可能无法更新标签。

AWS S3没有文件夹的概念,前缀只是键名的一部分,所以整个键名被复制。

可能的解决方案:

在源桶中,您可以设置一个前缀,例如 'my-source',然后复制到前缀为 'my-source' 的目标桶过滤器。 S3 复制会将对象复制到前缀为 'my-source' 的目标存储桶。因此,如果存储桶 1 的前缀为 'my-source1/object',而存储桶 2 的前缀为 'my-source2/object'。然后目标桶将显示 "folders" 'my-source1' 和 'my-source2' 及其尊敬的对象。但是,如果两个源存储桶具有相同的前缀,那么文件将出现在目标上的相同 "folder" 中。

或者,您可以使用 Lambda 更改前缀,或添加上面定义的标签。