有没有方法通过boto为创建的快照添加名称标签?
我在查阅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'})