有没有方法通过boto为创建的快照添加名称标签?

3 投票
3 回答
4466 浏览
提问于 2025-04-18 14:10

我在查阅API文档时没有找到相关信息,真让人失望。如果这件事做不到,我会很惊讶。我用boto创建了一个快照,代码如下:

conn.create_snapshot(volume_id, "This shows up in the description column")

这个方法可以成功,但我想在创建快照的时候给它加上一个标签,比如{Name: "我的标签"}。有没有人知道在创建快照时是否可以做到这一点?如果不行,那创建完快照后能不能给这个快照对象添加标签呢?

3 个回答

0

我成功地只用 create_tags 这个方法完成了这个任务(因为 add_tags 方法像上面评论中的 JavaQueen 提到的那样,出现了 AttributeError 错误)。

示例:

snapshot = conn.create_snapshot(volume_id, "This shows up in the description column")

conn.create_tags(
            Resources=[
                snapshot['SnapshotId'],
            ],
            Tags=[
                {'Key': 'Name', 'Value': 'myTagValue'}
            ]
 )

这个灵感来自于 Eddie Trejo 的贡献:https://stackoverflow.com/a/44796462/1973233

注意:你可能需要更新底层的权限策略,以获得 Allow: ec2:CreateSnapshot 的权限。

1

根据这条AWS的公告,从2018年4月开始,在创建快照时可以直接添加标签。

下面是一个示例代码,展示了如何做到这一点:

snap = ec.create_snapshot(
    Description = "Recent Snapshot",
    VolumeId = volume_id,
    TagSpecification = [{
        'ResourceType': 'snapshot',
        'Tags': [
            {'Key': 'Name', 'Value': snapshot},
            {'Key': 'InstanceId', 'Value': instance_id}
        ]
    }]
)

你可以看到,之前的ec2.create_tags()这个调用现在已经合并到这里面了。

9

在创建快照的时候,不能直接添加标签。这是因为EC2的API不支持这个功能。不过,创建完快照后,你可以很简单地给它添加标签。其实有几种方法可以做到这一点。

第一种方法是使用create_snapshot方法返回的Snapshot对象:

snapshot = conn.create_snapshot(volume_id, "This shows up in the description column")
snapshot.add_tags({'foo': 'bar', 'fie': 'bas'})

另外,你也可以使用通用的create_tags方法,这个方法可以用来给任何可以加标签的资源添加标签:

conn.create_tags('snap-12345678', {'foo': 'bar', 'fie': 'baz'})

撰写回答