当前位置: 首页 > 知识库问答 >
问题:

如果AWS S3存储桶上的现有标记包含“AWS:”前缀,如何使用Boto3向该存储桶添加新标记?

吕华彩
2023-03-14

我使用下面的boto3代码向S3 bucket添加新标记,而不删除现有标记。

s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging('bucket_name')
tags = bucket_tagging.tag_set
tags.append({'Key':'Owner', 'Value': owner})
Set_Tag = bucket_tagging.put(Tagging={'TagSet':tags})

这将获取现有标记,添加一个新标记,然后将它们全部放回。

但是,如果我的bucket包含“aws:”作为前缀,它会给出以下错误:“调用CreateTags操作时发生错误(InvalidParameterValue):参数键的值(aws:cloudformation:stack name)无效。”。以“aws:”开头的标记键保留供内部使用

在这种情况下,如何使用boto3在不删除现有标记的情况下添加新标记?

共有1个答案

宓英哲
2023-03-14

我发现,虽然不能使用以“aws:”开头的键添加新标记,但可以毫无例外地将现有标记与新标记一起放回。以下是我使用的测试代码;替换bucket名称并根据需要添加区域:

#!/usr/bin/env python3
import boto3

tag_data = [{'Key':'Owner', 'Value': "my owner tag here"}]
bucket_name = "mybucket"
print (f"Updating tags in bucket: {bucket_name}")

s3 = boto3.resource('s3')
try:
    bucket_tagging = s3.BucketTagging( bucket_name)
    tags = bucket_tagging.tag_set
    for tag in tags:
        # Avoid error by not adding duplicate keys from current tag list.
        key_test = tag.get("Key")
        Found=False
        for new_tag in tag_data:
            if new_tag.get("Key") == key_test:
               found=True
        if not found:
            tag_data.append(tag)
except Exception as error:
    print ("Error getting tags: ", error)

print ("Setting new tag set to: ", tag_data)

response = bucket_tagging.put(
    Tagging={
        'TagSet': tag_data
    }
)
if response is not None and response['ResponseMetadata']['HTTPStatusCode'] == 204:
    print ("success")
else:
    print (f"Warning, unable to update tags for bucket: {bucket_name}")

 类似资料:
  • 更新:在联系了Firebase的支持后,他们告诉我,在修复了他们的后端之后,这个问题确实被修复了。

  • 使用Boto3,python脚本从S3桶中下载文件以读取它们,并将下载文件的内容写入名为的文件。 我的问题是,一旦脚本使用AWS Lambda函数,它将如何以相同的方式工作?

  • 但是如何使用Firebase来使用不由Firebase管理的现有存储桶(尽管它拥有与创建Firebase应用程序所使用的相同的谷歌云账户的管理员访问权限)?

  • 存储桶用于存储用户的任意文件。 对象存储是用于存储任意文件的分布式存储服务。存储桶即bucket,用于存储对象文件。用户在存储文件之前必须先创建存储桶,云管平台以存储桶为对象存储的资源单位分配给项目使用。用户可以通过网络便捷的在对象存储中上传、下载以及分享文件。 云管平台目前支持对接并导入基于S3协议的对象存储服务MinIO、Ceph Radio以及公有云提供的对象存储服务。 使用流程: (二者任

  • 在S3中,我如何使用Bot3

  • 如果我能知道根本原因是什么就好了。