【问题标题】:How can I add a tag to a key in boto (Amazon S3)?如何将标签添加到 boto (Amazon S3) 中的键?
【发布时间】:2013-03-27 11:18:27
【问题描述】:

我正在尝试标记已上传到 S3 的密钥。在下同我只是从一个字符串创建一个文件。一旦我有了它们的密钥,我就不确定如何标记文件。我试过 Tag 和 TagSet。

from boto.s3.bucket import Bucket
from boto.s3.key import Key
from boto.s3.tagging import Tag, TagSet

k = Key(bucket)
k.key = 'foobar/somefilename'
k.set_contents_from_string('some data in file')

Tag(k, 'the_tag')

【问题讨论】:

    标签: python amazon-s3 boto boto3


    【解决方案1】:

    S3 此后添加了object level tags。你可以用boto3getset 他们。

    这些比元数据用途广泛得多:

    • 可以在不复制对象的情况下添加和修改它们。
    • 它们可以用作生命周期管理规则中的过滤器。
    • 它们可用于控制对对象的访问。

    【讨论】:

    • 我正在使用 boto3 并且还希望标记我的对象。我找到了这个boto3.amazonaws.com/v1/documentation/api/latest/reference/…。但是 AWS 表示您在执行此操作时需要使用 Content-MD5 HTTP 标头。问题是,我很困惑。它需要我标记的对象的 MD5 吗?我的要求?如果是我的要求,怎么做?我的请求被表示为一个 Python 字典,我怎么能 MD5 那个。有什么帮助或建议吗?
    • @PeteJirak ContentMD5 不是必填字段。如果你愿意,你可以把它排除在外。否则,它的使用在这里解释更多:docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html
    【解决方案2】:
    import boto3
    
    s3_client = boto3.client(
        's3',
        region_name='region-name',
        aws_access_key_id='aws-access-key-id',
        aws_secret_access_key='aws-secret-access-key',
    )
    
    get_tags_response = s3_client.get_object_tagging(
        Bucket='your-bucket-name',
        Key='folder-if-any/file-name.extension',
    )
    
    put_tags_response = s3_client.put_object_tagging(
        Bucket='your-bucket-name',
        Key='folder-if-any/file-name.extension',    
        Tagging={
            'TagSet': [
                {
                    'Key': 'tag-key',
                    'Value': 'tag-value'
                },
            ]
        }
    )
    

    【讨论】:

      【解决方案3】:

      虽然 S3 “标签”仅在存储桶级别,但存储桶中的每个键都可以具有与之关联的任意“元数据”,它们本身就是键值对。见boto documentation

      k.set_metadata('key', 'value')
      value = k.get_metadata('key') # prints 'value'
      

      【讨论】:

      • 现在已经改变了。 S3 标签现在在对象级别可用。
      【解决方案4】:

      据我在文档中看到的,setTags-method 仅适用于存储桶级别,而不适用于单个键。因此,您不能为上传的文件设置不同的标签,但您必须在包含存储桶上执行此操作。

      【讨论】:

      • 这是正确的。 S3 仅支持存储桶级别的标签,而不支持单个对象。这些标签主要用于成本分配和跟踪,如docs.aws.amazon.com/awsaccountbilling/latest/about/… 中所述
      • 这个接受的答案当时是正确的,但现在应该不被接受;谷歌搜索时,这仍然是排名第一的搜索结果,现在它是错误的和误导性的。
      猜你喜欢
      • 2018-08-09
      • 2010-12-28
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多